1 decade ago by quidmonkey
Okay, this is a bit of a doozy. My thanks ahead of time for looking into this.
I'm trying to extend the Font class to pop-up various notifications to the player, which will then fade after a few seconds. Here's what I got so far:
The chain-notification.js file is placed in the /game/impact/ directory. I want to be able to instantiate these notifications whenever I want, so I've modded my main.js accordingly:
When I try to call ig.main.spawnNote() from any Entity class, I get this:
I'm trying to extend the Font class to pop-up various notifications to the player, which will then fade after a few seconds. Here's what I got so far:
ig.module(
'impact.chain-notification'
)
.requires(
'impact.font'
)
.defines(function(){
ChainNotification = ig.Font.extend({
font: null,
text: '',
pos: { x: null, y: null },
_kill: null,
vel: { x: 0, y: -10 },
lifetime: 5,
fadetime: 1,
init: function( text, x, y ) {
this.font = new ig.Font( 'media/04b03.font.png' );
this.text = text;
this._kill = false;
this.pos.x = x;
this.pos.y = y;
this.idleTimer = new ig.Timer();
},
update: function() {
//if greater than lifetime, kill note
if( this.idleTimer.delta() > this.lifetime ) {
this._kill = true;
return;
}
//slowly dissipate
this.currentAnim.alpha = this.idleTimer.delta().map(
this.lifetime - this.fadetime, this.lifetime, 1, 0 );
//update position
this.pos.x += this.vel.x;
this.pos.y += this.vel.y;
},
draw: function() {
this.font.draw( this.text, this.pos.x, this.pos.y, ig.Font.ALIGN.LEFT );
}
});
});
The chain-notification.js file is placed in the /game/impact/ directory. I want to be able to instantiate these notifications whenever I want, so I've modded my main.js accordingly:
ig.module(
'game.main'
)
.requires(
'impact.game',
'impact.font',
//other stuff
)
.defines(function(){
MyGame = ig.Game.extend({
notes: [], //my notifications array
//code
update: function() {
// Update all entities and backgroundMaps
this.parent();
if( this.notes.length ) {
for( i = this.notes.length; i--; i ) {
this.notes[i].update();
//if note is dead, erase it
if( this.notes[i]._kill ) {
this.notes.splice(i, 1);
}
}
}
},
draw: function() {
//other code
//draw notes
if( this.notes.length ){
for(var note in this.notes) {
this.notes[note].draw();
}
}
}
};
ig.main( '#canvas', MyGame, 60, 528, 576, 1 );
//create note
ig.main.spawnNote = function( text, x, y) {
var note = new ChainNotification( text, x, y );
MyGame.notes.push( note );
};
});
When I try to call ig.main.spawnNote() from any Entity class, I get this:
Uncaught TypeError: Object [object Object] has no method 'spawnNote'Any ideas on what's broken?
