2012-02-03 12 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}); 
    } 
}). 

編集:これは、最新バージョンのを使用しているhttp://jsfiddle.net/PzKVh/

で実行している完全な例

// 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"); 

をCrafty 0.4.5。いくつかの大きな変更と多くの改善がありましたので、このバージョンを使用することをお勧めします。

また、私はあなたが私は、コードを入れない場所に、より手の込んだことができ、あなたがはるかに

+0

こんにちは:-)そこに助けを見つける可能性が高いと思いますhttps://groups.google.com/forum/#!forum/craftyjsでフォーラムにお気軽に!私はCraftyにはかなり新しく、いくつかの困難を抱えています。ありがとう! – Deyang

+0

ありがとう!それはとても役に立ちました! – Deyang

関連する問題