我是Phaser的新手。代码片段如下,此处的collisionCnt全局初始化为0:
update: function() {
this.collisionChecker = this.physics.arcade.collide(this.ground, this.rainGroup, this.over, this.overCheck, this); //checks for collision between rain drops and ground
this.physics.arcade.collide(this.rainGroup, this.rainGroup); //checks for collision between rain drops
},
overCheck: function() {
collisionCnt++;
if(collisionCnt == 4) {
console.log(collisionCnt);
return true;
}
else {
console.log(collisionCnt);
return false;
}
},
over: function() {
this.state.start('gameOver');
}
问题是更新方法持续监视碰撞实例并连续返回true,导致单个碰撞事件的collisionCnt变为等于4。我需要至少4个rainGroup组对象才能在游戏结束前触地。欢迎所有帮助,并提前感谢:)
答案 0 :(得分:1)
解决这个问题的一种方法是给你的雨滴提供一个属性,表示它们是否碰撞或碰到地面。然后在检查中查看该属性是否已设置,以及是否未增加计数器并设置属性。
我created a full JSFiddle as a working example但您的代码中的相关代码更改可能是这样的:
this.collisionChecker = this.physics.arcade.collide(this.ground, this.rainGroup, this.over); //checks for collision between rain drops and ground
over: function(ground, rainDrop) {
if (!rainDrop.hasTouchedGround) {
collisionCnt++;
rainDrop.hasTouchedGround = true;
if (collisionCnt >= 4) {
this.state.start('gameOver');
}
}
}
第二种选择是在接触地面时杀死雨滴。这使事情变得更容易,但会从显示中删除精灵。
over: function(ground, rainDrop) {
collisionCnt++;
rainDrop.kill();
if (collisionCnt >= 4) {
this.state.start('gameOver');
}
}