2016-04-26 12 views
0

私が今問題を抱えていると私は助けを得ることができたと思っていました。フェイザーP2コリジョン衝突スプライト

基本的に私はいくつかの弾丸を持っている、そして私は速度で移動する敵のグループがあります。敵はスプライトが異なり、基本的にスプライトタイプごとに値を割り当てたいと思っています。たとえば、ダイヤモンドが生成されて弾丸と衝突して10点を得たとしたら、奇妙な行動は衝突したときです。画面上のすべての敵が10点を与え、すべてが破壊されるからです。それ。

また、10ポイントのスプライトが画面に表示されていない場合、ポイントはありません。これは正常です。

以下のコードを見てください。私は与えられた助けに感謝します。ありがとう。彼らは衝突したとき

//here is my bullets group 
createBullets: function(){ 
    //Bullets 
    this.bullets = this.add.group(); 
    this.bullets.enableBody = true; 
    this.bullets.physicsBodyType = Phaser.Physics.P2JS; 
    this.bullets.createMultiple(500, 'bullet', 0, false); 
    this.bullets.setAll('anchor.x', 0.5); 
    this.bullets.setAll('anchor.y', 0.5); 
    this.bullets.setAll('outOfBoundsKill', true); 
    this.bullets.setAll('checkWorldBounds', true);  
}, 

///here are my enemies 
addOneFigura: function(x, y) { 
    this.figuras = this.add.group(); 
    //these are sprites 
    this.figuritas = ["figura1","figura2","figura3","figura4","figura5","figura6"]; 
    this.figurita = this.figuritas[Math.floor(Math.random()*6)]; 
    this.figura = this.add.sprite(x,y,this.figurita); 
    this.figuras.add(this.figura); 
    this.physics.p2.enable(this.figura, false); 
    this.figura.body.velocity.y = 75; 
    this.figura.checkWorldBounds = true; 
    this.figura.outOfBoundsKill = true; 

    this.figura.body.setCollisionGroup(this.figurasCG); 
    this.figura.body.collides(this.bulletsCG, this.collisionBulletMatch, this); 
}, 

//and lastly this is my collision function 
collisionBulletMatch: function(figurita, figuritapega) { 

    if (this.figurita != this.figuritapega){ 
     this.score += 10; 
     this.scoreText.text = this.score; 
     this.resetFigura(); 
    } 
} 

だから基本的に全体figurasグループはただ1つの衝突するのではなく、消えます。

+0

あなたの 'resetFigura'関数はどのように見えますか? –

+0

は次のようになります:resetFigura:function(figura){ this.figura.kill(this.figura); }ご回答ありがとうございました – Rafahc

答えて

1

私はPhaserのP2物理学ではあまり経験していませんが、すぐに心に浮かぶのは、resetFiguraと呼んでいる間に数字(figura)を渡していないことです。変数の初期化を見ることなく、私は確認することはできませんが、私はあなたが次のようにあなたの機能を変更したいと思う:

resetFigura: function(figura) { 
    figura.sprite.kill(); 
}, 

これはcollisionBulletMatchthis.resetFigura(figuritapega);経由で呼び出す必要があります。

resetFiguraコールに含まれていない場合は、official P2 Physics collision group exampleもご覧ください。私はそれを手に入れて、かなり速く動くことができました。 1人のプレイヤーキャラクターを持っていますが、弾丸を1つに単純化すれば、あなたの問題を把握できます。

+0

Hey James私は何かを発見しました。速度の値より前にコリジョンが発生した場合にのみグループを破壊するので、ピクセル74でコリジョンが発生するとグループ全体が破壊され、これは正常ですか? – Rafahc

+0

うーん、それは正常に見えません。うーん。 –

+0

それは本当に助けなかったが、私はあなたが何が起こっているかを見ることができるので、間違った質問を私の新しい投稿をしてくださいお願いしますreilize。 http://stackoverflow.com/questions/37063445/phaser-collision-weird-behavior – Rafahc

関連する問題