I have a HTML5 canvas game that I have written using Craftyjs. I have keyboard interaction working fine using the arrow keys but I'm having problems adding mouse interaction. The sprite does move slightly with the mouse, but not the same way as it does with the arrow keys and when it hits another component it seems to crash. I added a function in to the component to deal with mouse interaction which is not working so it is commented out. Here is the code for my sprite component;
// This is the Angel Character
Crafty.c('Angel', {
init: function() {
this.requires('Actor, Fourway, Mouse, Collision, player_sprite, SpriteAnimation')
.fourway(2)
.stopOnSolids()
// This deals with destroying the sins on collision.
.onHit('Lust', this.killSin)
.onHit('Greed', this.killSin)
.onHit('Sloth', this.killSin)
.onHit('Wrath', this.killSin)
.onHit('Glutton', this.killSin)
.onHit('Envy', this.killSin)
.onHit('Pride', this.killSin)
// This defines the animations.
.animate('AngelUp', 0, 0, 2)
.animate('AngelLeft', 0, 1, 2)
.animate('AngelRight', 0, 2, 2)
.animate('AngelDown', 0, 3, 2);
// This deals with keyboard interaction.
var animation_speed = 4;
this.bind('NewDirection', function(data) {
if (data.x > 0 || data.realX > this._x) {
this.animate('AngelRight', animation_speed, -1);
} else if (data.x < 0) {
this.animate('AngelLeft', animation_speed, -1);
} else if (data.y > 0) {
this.animate('AngelDown', animation_speed, -1);
} else if (data.y < 0) {
this.animate('AngelUp', animation_speed, -1);
} else {
this.stop();
}
});
// This deals with mouse interaction.
/*this.bind('NewDirection', function(data) {
if (data.x > this.x) {
this.animate('AngelRight', animation_speed, -1);
} else if (data.x < this.x) {
this.animate('AngelLeft', animation_speed, -1);
} else if (data.y > this.y) {
this.animate('AngelDown', animation_speed, -1);
} else if (data.y < this.y) {
this.animate('AngelUp', animation_speed, -1);
} else {
this.stop();
}
});*/
},
// Registers a stop-movement function to be called when
// this entity hits an entity with the "Solid" component
stopOnSolids: function() {
this.onHit('Solid', this.stopMovement);
return this;
},
// Stops the movement
stopMovement: function() {
this._speed = 0;
if (this._movement) {
this.x -= this._movement.x;
this.y -= this._movement.y;
}
},
// Deals with the angel finding a sin.
killSin: function(data) {
sin = data[0].obj;
Crafty("Score").each(function () {
this.text("Score: " + ++score),
this.text("Score: " + ++score),
this.text("Score: " + ++score),
this.text("Score: " + ++score),
this.text("Score: " + ++score),
this.text("Score: " + ++score),
this.text("Score: " + ++score),
this.text("Score: " + ++score),
this.text("Score: " + ++score),
this.text("Score: " + ++score) });
Crafty.audio.play('kill');
sin.kill();
}
});
Here is the code for where the angel is instantiated in the scene. I added a bind function to it to try and make the mouse interaction work but that doesn't work properly.
// This places the angel on the grid.
this.player = Crafty.e('2D, Canvas, Angel, Mouse')
.at(5, 5)
.bind('MouseMove', function(e) {
this.x = e.offsetX || e.layerX;
this.y = e.offsetY || e.layerY;
})
Here is a link to the game;
http://users.aber.ac.uk/rig6/achievement_unlocked/index.html
I have tried everything and can't find an example online that helps with this. Please can someone help?