2016-05-16 12 views
1

ボールオブジェクトが弾丸オブジェクトに当たっている単純なゲームを作っています。オブジェクトは適切に衝突しますが、オブジェクトの同じcollides()関数に含まれているコールバックfunction(addscore())は、一度呼び出されます(オブジェクトの最初の作成時)。Phaser.jsゲームオブジェクトは意図したとおりに衝突しますが、コリジョンコールバックはありません

ここにcreate()機能のコードスニペットがあります。衝突部分は下にあります:

create: function() { 

     this.cursors = this.game.input.keyboard.createCursorKeys(); 

     //background 
     this.cloud = game.add.sprite(50, 100, 'cloud'); 
     this.cloud.scale.setTo(.4,.4); 
     this.cloud1 = game.add.sprite(250, 200, 'cloud'); 
     this.cloud1.scale.setTo(.5,.5); 
     this.grass = game.add.sprite(0, 470, 'grass'); 
     game.stage.backgroundColor = '#71c5cf'; 

     //Ball and cannon 
     game.physics.startSystem(Phaser.Physics.P2JS); 
     game.physics.p2.restitution = .9; 
     this.ball = game.add.sprite(200, 245, 'ball'); 
     this.cannon = game.add.sprite(200, 490, 'cannon'); 
     this.ball.anchor.setTo(0.4, 0.4); 
     this.cannon.anchor.setTo(0.5, 0.5); 
     this.cannon.scale.setTo(.4,.4); 
     this.ball.scale.setTo(.4,.4); 
     game.physics.p2.enable(this.ball); 
     this.ball.body.setCircle(29); 
     this.game.debug.body(this.ball) 
     //gravity and bounce, collision 
     this.game.physics.p2.gravity.y = 1500; 

     this.ballCollisionGroup = this.game.physics.p2.createCollisionGroup(); 
     this.bulletCollisionGroup = this.game.physics.p2.createCollisionGroup(); 
     this.game.physics.p2.updateBoundsCollisionGroup(); 
     this.ball.body.setCollisionGroup(this.ballCollisionGroup); 
     this.ball.body.collides([this.bulletCollisionGroup], this.addscore); 

     this.bullet = game.add.group(); 

     this.bullet.createMultiple(20, 'bullet'); 

     this.bullet.callAll('events.onOutOfBounds.add', 'events.onOutOfBounds', this.resetbullet); 
     this.bullet.callAll('anchor.setTo', 'anchor', 0.1, 0.1); 
     this.bullet.callAll('scale.setTo', 'scale', .1, .1); 
     this.bullet.setAll('checkWorldBounds', true); 
     this.bullet.enableBody = true; 
     this.bullet.physicsBodyType = Phaser.Physics.P2JS; 
     game.physics.p2.enable(this.bullet); 


     this.bullet.forEach(function(child){ 
     child.body.setCircle(7); 
     child.body.setCollisionGroup(this.bulletCollisionGroup); 
     child.body.collides([this.ballCollisionGroup]); 
     child.body.collideWorldBounds=false; 
    }, this); 
    }, 

ここでゲームを見ることができます:http://gabrnavarro.github.io/Volleyball.js。 ソースを表示してコード全体を表示します。ご協力いただきありがとうございます。 :)

答えて

1

私はP2物理学の経験がありませんでしたので、これは完全に間違っている可能性があります。アーケードフィジックスを使用する場合、グループはcreate関数で初期化されますが、update関数で衝突がチェックされます。

あなたの更新機能に
this.ball.body.collides([this.bulletCollisionGroup], this.addscore, this); 

(衝突をチェックする他のコードと一緒に):

だから、あなたがしなければならない動きです。

また、私はp2物理シ​​ステムの経験がありませんでしたので、これは間違っている可能性があります。

申し訳ありませんが、これは役に立ちませんでした。

3

あなたがここに投稿したコードを見ると、すべてが一目瞭然のように見えます。しかし、ghでコードを見たときに、addScoreをコールバックとして渡すのではなく、代わりにコールすることがわかりました。

変更main.jsは、トリックを行う必要があり

this.ball.body.collides([this.bulletCollisionGroup], this.addscore, this);

this.ball.body.collides([this.bulletCollisionGroup], this.addscore(), this);

から67行目。

+0

この投稿の行67は、あなたの提案された行に変更されました。更新されたコードをgh-pagesにプッシュするのを忘れてしまった。申し訳ありません。とにかく、問題はまだ残っていますが、addscore関数はもう呼び出されませんでした。最新のコードをghにアップロードしました。もう一度やり直すことができます。 – bhounter

関連する問題