gpt4 book ai didi

javascript - 如何为使用 Phaser 中的构造函数创建的动态生成的 Sprite 启用碰撞?

转载 作者:行者123 更新时间:2023-11-28 04:43:15 26 4
gpt4 key购买 nike

代码是这样的:

  function RainDrops(charLabel){
this.xLocArray = [50, 120, 190, 260]; //Array for x pos
this.charLabel = charLabel;
this.rainCreator = function(){
var x = Math.floor(Math.random()*4);
this.genChar = game.add.sprite(this.xLocArray[x], 0, charLabel);
game.physics.arcade.enable(genChar);
genChar.body.gravity.y = 50;
genChar.body.collideWorldBounds = true;
};


}

function createChar(){
var randomIndex = Math.floor(Math.random()*3);
switch(randomIndex){
case 0:
var Apple = new RainDrops('apple',uniqueRainDropId);
Apple.rainCreator();
break;
case 1:
var Candy = new RainDrops('candy',uniqueRainDropId);
Candy.rainCreator();
break;
case 2:
var Duck = new RainDrops('duck',uniqueRainDropId);
Duck.rainCreator();
break;
}
}

function create(){
game.physics.startSystem(Phaser.Physics.ARCADE);
game.add.sprite(0, 0, 'backyard');
var ground = game.add.sprite(40, game.world.height - 300, 'ground');
ground.scale.setTo(0.7, 0.2);
game.physics.arcade.enable(ground);
ground.body.immovable = true;
game.time.events.loop(500, createChar, this);

}

function update(){
game.physics.arcade.collide(ground, ????);
}

我是 javaScript 和 Phaser(以及一般编程)的新手。我一直在自学 js 和 Phaser,但我陷入了这一点。现在我如何告诉更新函数检查碰撞,因为 Sprite 是动态创建的。预先感谢:)

最佳答案

collide function Phaser 中的设计是为了处理 Sprite 和组。因此,您可以将雨 Sprite 添加到 Phaser.Group 中,然后在碰撞调用中使用该组。像这样的事情:

function create() {
var raingroup = game.add.group();
game.physics.startSystem(Phaser.Physics.ARCADE);
// etc.

function createChar() {
//..
Apple.rainCreator();
raingroup.add(Apple);
break;
//etc. add Candy and Duck to group in same way

function update(){
game.physics.arcade.collide(ground, raingroup, mycollisionHandler)
}

function mycollisionHandler(grnd, rainspr) {
// note, parameters grnd and rainspr represent the sprites that have collided
rainspr.kill();
}

请注意,您可以选择使用 processHandler 进行额外的检查并确定重叠的对象是否应该发生碰撞。就您而言,我认为您并不真正需要它,而只是为了展示它是如何工作的:

game.physics.arcade.collide(ground, raingroup, mycollisionHandler, myprocessHandler, this);
//..
function myprocessHandler(grnd, rain) {
if (rain.health > 0) {
return false; // no collisionHandler
} else {
return true; // will cause a call to collisionHandler
};
}

关于javascript - 如何为使用 Phaser 中的构造函数创建的动态生成的 Sprite 启用碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43600016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com