Похоже, вы используете
this.x += this._speed;
, чтобы отодвинуть игрока от гриба после того, как он столкнулся.Но поскольку вы перемещаете его только в направлении x, оно не будет работать, если вы столкнетесь сверху или снизу.Это ваша проблема?
Если вы используете компоненты Multiway или Fourway, вы можете сделать это вместо:
.bind('Moved', function(from) {
if(this.hit('mushroomRed')){
this.attr({x: from.x, y:from.y});
}
}).
Редактировать: завершить пример
// Init Crafty:
Crafty.init();
Crafty.canvas.init();
var player = Crafty.e("2D, Canvas, Color, player, Multiway, Collision")
.attr({x: 0, y: 0, w: 50, h: 50})
.color("rgb(0,255,0)")
.multiway(3, {UP_ARROW: -90, DOWN_ARROW: 90, RIGHT_ARROW: 0, LEFT_ARROW: 180})
.bind('Moved', function(from) {
if(this.hit('mushroomRed')){
this.attr({x: from.x, y:from.y});
}
});
var mushroom = Crafty.e("2D, Canvas, mushroomRed, Color")
.attr({x: 200, y: 150, z:1, w: 32, h: 32})
.color("red");
Работает на http://jsfiddle.net/PzKVh/
Используется последняя версия Crafty 0.4.5.Произошло несколько критических изменений и множество улучшений, поэтому я бы посоветовал вам использовать эту версию.
Кроме того, не стесняйтесь спрашивать на форумах по адресу https://groups.google.com/forum/#!forum/craftyjs Я думаю, что вы гораздо большеСкорее всего, найти помощь там: -)