私は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
]
}
私はこれ置く:私は、ブラウザのコンソールにfoo
とpickle
を調べる場合、彼らは両方とも同じです
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(ノートで見ることができるもので、円筒状のオブジェクトがありますクールエイド漬け漬物):
彼らは全く衝突していない、とピクルスはひどい見えます。私はその周りの矩形、または頂点を見たくありません。
例は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.body
がsetCollisionGroup
に応答しなかったので、私はこれでエラーが発生しました。 foo.body
はArcade物理を使って作成されたので、Phaser.Physics.P2.Bodyインスタンスに置き換える必要がありました。この結果は、私はカスタム境界で衝突を持っていますが、ありません: