我希望我能帮助解决我现在遇到的问题。
基本上我有一些子弹,然后我有一群随着速度移动的敌人。敌人有不同的精灵,基本上我想为每个精灵类型分配一个值。例如,如果我说如果生成一颗钻石并且与子弹发生碰撞就会得到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
组会消失,而不是只发生一次碰撞。
答案 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;我能够很快地完成并运行。它确实有一个玩家角色,但是如果你将子弹简化为一个,你可以找出你的问题。