无法检测到与 Phaser.IO 的碰撞
Not able to detect collision with Phaser.IO
我正在使用 Phaser.io 构建一个简单的无限跑酷游戏。
我有一个骑手,骑手对象一直向右移动。
有几个障碍阻碍了它。我想检测碰撞何时发生。但我似乎无法检测到任何碰撞或重叠。请帮忙!
我的一些代码片段如下 -
function create () {
//obstacles initialization
obstacles = game.add.group();
obstacles.enableBody = true;
//player initialization
player = game.add.sprite(10, 250, 'tuktuk'); game.physics.arcade.enable(player);
player.body.bounce.y = 0.2;
player.body.gravity.y = 800;
player.body.bounce.x = 0.2;
player.body.collideWorldBounds = true;
player.animations.add('right', [0,1,2], 20, true);
create_random_obstacle();
game.physics.arcade.enable(obstacles);
game.world.bringToTop(player);
game.physics.arcade.overlap(obstacles, player, after_collision, null, null);
}
我认为您还需要在玩家精灵上启用物理。
game.physics.arcade.enable(player);
另外,在我的游戏中,我将overlap
的第一个参数设置为精灵,第二个参数是组。虽然根据 Phaser docs 应该无关紧要,但您可以尝试确定一下。
您需要先启用物理,然后才能检查精灵之间的任何碰撞。你可以通过
game.physics.startSystem(Phaser.Physics.ARCADE);
您还应该为玩家精灵启用物理效果
game.physics.arcade.enable(player);
连同 B. Naeem 的回答:
game.physics.arcade.overlap(obstacles, player, after_collision, null, null);
应该在 update() 中,因为它必须检查每一帧的重叠。
我正在使用 Phaser.io 构建一个简单的无限跑酷游戏。
我的一些代码片段如下 -
function create () {
//obstacles initialization
obstacles = game.add.group();
obstacles.enableBody = true;
//player initialization
player = game.add.sprite(10, 250, 'tuktuk'); game.physics.arcade.enable(player);
player.body.bounce.y = 0.2;
player.body.gravity.y = 800;
player.body.bounce.x = 0.2;
player.body.collideWorldBounds = true;
player.animations.add('right', [0,1,2], 20, true);
create_random_obstacle();
game.physics.arcade.enable(obstacles);
game.world.bringToTop(player);
game.physics.arcade.overlap(obstacles, player, after_collision, null, null);
}
我认为您还需要在玩家精灵上启用物理。
game.physics.arcade.enable(player);
另外,在我的游戏中,我将overlap
的第一个参数设置为精灵,第二个参数是组。虽然根据 Phaser docs 应该无关紧要,但您可以尝试确定一下。
您需要先启用物理,然后才能检查精灵之间的任何碰撞。你可以通过
game.physics.startSystem(Phaser.Physics.ARCADE);
您还应该为玩家精灵启用物理效果
game.physics.arcade.enable(player);
连同 B. Naeem 的回答:
game.physics.arcade.overlap(obstacles, player, after_collision, null, null);
应该在 update() 中,因为它必须检查每一帧的重叠。