2017-03-26 12 views
1

私はPhysicsEditorを使用して作成したpickle.jsonファイルにカスタムヒットボックスを持つファイルpickle.pngを持っています。私のプリロード機能でPhaserのカスタムスプライト境界との衝突方法

{ 

    "pickle": [ 

     { 
      "density": 2, "friction": 0, "bounce": 0, 
      "filter": { "categoryBits": 1, "maskBits": 65535 }, 
      "shape": [ 468, 156 , 399, 214 , 365, 222 , 387, 98 , 414, 100 , 443, 113 , 467, 131 ] 
     } , 
    // etc 
    ] 
} 

私はこれ置く:私は、ブラウザのコンソールにfoopickleを調べる場合、彼らは両方とも同じです

game.physics.startSystem(Phaser.Physics.P2JS); 

    this.pickle = game.add.sprite(400, 300, '/pickle.png'); 
    game.physics.p2.enable(this.pickle, true); 
    this.pickle.body.loadPolygon('pickle_physics', 'pickle'); 

    // this is a separate sprite with default bounds 
    this.foo = mt.create('foo1'); 
    game.physics.p2.enable(this.foo, true); 

this.game.load.physics("pickle_physics", "pickle.json"); 

と作成機能ではスプライトオブジェクトの種類。

は今、私は彼らが衝突するようにしたいので、私は更新機能にこれを追加します。

this.game.physics.arcade.collide(
     this.foo, this.pickle, function(foo, pickle) { 
     }, null, this 
    ) 

このすべての最終結果は、次のgif(ノートで見ることができるもので、円筒状のオブジェクトがありますクールエイド漬け漬物):

game

彼らは全く衝突していない、とピクルスはひどい見えます。私はその周りの矩形、または頂点を見たくありません。

例はhereですが、私はそれを理解するのに問題があります。


編集素晴らしいニュース、私はcollision-groups例の助けを借りて進行のビットを作りました。まず

// collision setup for non-rectanular sprites 
    game.physics.p2.setImpactEvents(true); 
    game.physics.p2.restitution = 0.8; 
    foo.body = new Phaser.Physics.P2.Body(game, foo, 0, 0) 
    var foo_collision = game.physics.p2.createCollisionGroup(); 
    var pickle_collision = game.physics.p2.createCollisionGroup(); 
    game.physics.p2.updateBoundsCollisionGroup(); 
    this.foo.body.setCollisionGroup(foo_collision); 
    this.foo.body.collides([foo_collision, pickle_collision]); 
    this.pickle.body.setCollisionGroup(pickle_collision); 
    this.pickle.body.collides(foo_collision, function(pickle, foo) { 
     console.log('hit') 
    }, this); 

foo.bodysetCollisionGroupに応答しなかったので、私はこれでエラーが発生しました。 foo.bodyはArcade物理を使って作成されたので、Phaser.Physics.P2.Bodyインスタンスに置き換える必要がありました。この結果は、私はカスタム境界で衝突を持っていますが、ありません:

enter image description here

答えて

1

私は次の行

game.physics.p2.enable(this.pickle, true); 
game.physics.p2.enable(this.foo, true); 

を変更し、それの代わりに、真なければなりませんでしたtrueはそのデバッグモードを意味し、それらの醜い罫線と頂点をすべて表示します。これは次のチュートリアルでカバーされています。このチュートリアルは、このすべてで非常に役に立ちました:https://www.codeandweb.com/physicseditor/tutorials/phaser-p2-physics-example-tutorial

次に、this.pickle.body.loadPolygon('pickle_physics', 'pickle');の前に、外側の矩形の境界を削除するためにthis.pickle.body.clearShapes();を追加する必要がありました。

結果がこれです:

enter image description here

関連する問題