Phaser P2 Collision杀死碰撞精灵

时间:2016-04-26 01:18:14

标签: phaser-framework

我希望我能帮助解决我现在遇到的问题。

基本上我有一些子弹,然后我有一群随着速度移动的敌人。敌人有不同的精灵,基本上我想为每个精灵类型分配一个值。例如,如果我说如果生成一颗钻石并且与子弹发生碰撞就会得到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 :(得分:1)

我很乐意承认我在Phaser中没有做过很多关于P2物理的事情,但我想到的最直接的事情是,当你在调用var i = 0; function build(){ var li_builder = ''; li_builder += '<a href="javascript:;">'; li_builder += '<span class="txt">' + i + '</span>'; li_builder += '</a>'; var attach = $(li_builder).on("click.doNothing", function(){ console.log("Off"); $(this).off("click.ShowData"); }).on("click.ShowData", function(){ console.log("showData"); ajax(); }); $('#catalog').append(attach); $("#catalog a").each(function(){ if($(this).parent("li").length > 0){ console.log("has_li"); }else{ console.log("no_li"); $($(this)).wrap("<li/>"); } }); i++; } function ajax(){ $.ajax({ type: "GET", url: "", data: "", success: function (data) { build(); } }); } $(document).ready(function(){ build(); }); 时,你并没有传递一个数字({ {1}})。没有看到变量的初始化我不能确定,但​​我认为你想要将你的功能改为如下所示:

resetFigura

这应该通过figura中的resetFigura: function(figura) { figura.sprite.kill(); }, 来调用。

如果不在this.resetFigura(figuritapega);电话中,我还建议您查看official P2 Physics collision group example;我能够很快地完成并运行。它确实有一个玩家角色,但是如果你将子弹简化为一个,你可以找出你的问题。