【问题标题】:Phaser sprites not colliding when standing still静止不动时移相器精灵不碰撞
【发布时间】:2017-10-03 21:59:04
【问题描述】:

我正在制作一个简单的类似马里奥的平台游戏,我想在玩家角色跳到敌人头上时杀死敌人,并在玩家从侧面与敌人发生碰撞时杀死玩家。

我已经设法在玩家精灵移动时做到这一点,但是,如果玩家静止不动,敌人就会穿过他而不会杀死他。

您可以在此处查看 GitHub 存储库中的所有代码:

https://github.com/failedCoder/failedCoder.github.io

您可以在这里试一试游戏(需要几秒钟才能加载):

https://failedcoder.github.io/

【问题讨论】:

  • 你在'update'函数中使用'collide'方法吗?另外你在精灵和游戏中激活了物理?
  • 我在更新功能中使用了碰撞方法,但是我没有为敌人激活物理。在我静止时激活它后,敌人精灵不再穿过玩家,而是在与玩家精灵碰撞时死亡.

标签: collision-detection collision phaser-framework sprite-sheet


【解决方案1】:

首先为玩家和敌人启用物理,设置速度,现在你可以选择如何左右移动敌人,我会给你一个如何向左移动的例子。所以,要记住的重要一点是:“物理系统只有在至少一个物体有速度的情况下才能工作”。

enemies = game.add.group();
enemies.enableBody = true;

var enemy1 = enemies.create(230,490,'invader');
//enemy1.body.gravity.y = 300;  
enemy1.body.velocity.x = -100;  

 var enemy2 = enemies.create(430,490,'invader');
//enemy2.body.gravity.y = 300;
enemy2.body.velocity.x = -100;

在更新函数中添加以下代码:

game.physics.arcade.collide(player, enemies, touchingEnemies);

然后创建一个函数touchingEnemies:

function touchingEnemies(player, enemy)
{
    if (player.body.touching.right || player.body.touching.left)
    {
        // player is dead
        player.alpha = .5;
    }
    else if (player.body.touching.down)
    {
        // player is jumping on enemy, kill it
        enemy.alpha = .5;
    }
}

【讨论】:

  • 我有 player.body.touching.bottom 而不是 .down,现在敌人在我静止不动时会被摧毁,而不是像以前那样只是穿过玩家角色,他们仍然会杀死移动的玩家角色。这是我的代码function enemiesInteraction(player,enemies){ crush.play(); if(player.body.touching.left || player.body.touching.right){ player.kill(); } else if(player.body.touching.down){ score += 200; scoreText.text = 'Score: ' + score; enemies.kill(); } }
  • 你跳上去能杀死敌人吗?如果敌人从右侧或左侧碰到你,他们当然会杀了你,我不明白到底是什么问题?此代码有效,我在游戏中使用它。我已经编辑了答案,请添加该代码以更新并查看玩家和敌人的物理身体。也许这会告诉你问题,然后请更新游戏我会检查它。
  • 如果我跳上它就可以杀死敌人,问题是只有当玩家角色移动时敌人从侧面击中他才会杀死玩家角色,如果玩家角色静止敌人死,而不是玩家角色。由于某种原因,当玩家精灵静止不动时,这部分代码被执行 ` else if (player.body.touching.down) { // 玩家跳到敌人身上,杀死它 },instead of if (player.body.touching.right || player.body.touching.left) { // 玩家死了 }`
  • 长话短说,如果PC碰到敌人的精灵-PC死了,如果PC跳到敌人的头上-敌人死了,问题是当PC静止时-敌人在碰撞时死了个人电脑。
  • 我会尝试将 game.debug.body 添加到更新函数中,看看是否有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多