2012-02-03 84 views
1

在CraftyJS中,我如何阻止我的球员实体从裁剪到其他实体?防止对象在craftyJS中裁剪

这是我的目标:

 Crafty.c("Mushroom", { 
     init: function() { 
      this.addComponent("collision"); 
      this.collision(new Crafty.polygon([[8,8],[24,8],[24,24],[8,24]])); 
     } 
    }); 

    var mushroom = Crafty.e("2D, canvas, mushroomRed, Mushroom") 
    .attr({x: 200, y: 150, z:1, w: 32, h: 32}); 

,这是我的球员onHit:

.onhit("mushroomRed", function() { 
      this.x += this._speed; 
      this.stop(); 
     } 

当我从某些角度接近它,它仅适用,否则,它会失控。

建议?

回答

3

看起来你正在使用

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/

运行这是使用最新版本的狡猾0.4.5。有一些突变和很多改进,所以我建议你使用这个版本。

而且,随时https://groups.google.com/forum/#!forum/craftyjs在论坛上问我觉得你更容易找到帮助有:-)

+0

嗨,你可以更多地讨论我在哪里把代码?我对Crafty很陌生,并且遇到一些困难。谢谢! – Deyang 2012-02-03 14:40:51

+0

非常感谢你!这非常有帮助! – Deyang 2012-02-05 16:27:26