大家好,我刚刚来这里,但最近我已经尝试了我的第一个游戏了。以前我是开发者,重新回到这个领域让我感觉非常好!

无论如何,我仍然在学习一些基本知识,我想问一下一些有经验和成熟的朋友们一些想法和指导。

注意:抱歉,我知道一个几何形状和糟糕的线条和平面UI并不是展示自己的作品的最佳阶段——批评者很可能会对此发起攻击——但这只是我学习和建立一个简单场景的2+周的结果。所以,请不要太严厉地批评我的图形。

背景:它是基于Phaser(我选择这个只是因为我更熟悉Typescript,所以它更容易和更快地学习)而构建的,我甚至不确定它是否是最好的选择。但是,我只是先尝试着。

我刚刚工作了大约3周,这是第一个场景,我已经完成了用于测试战斗的第一步。其他所有东西都是平面UI;我主要关注的是只是尝试获得机制正确。从大部分来说,我认为它是相当直接和常见的(自动发射,敌人移动到玩家,等等)但我在“接触”部分卡住了。

问题:如您可以从视频中看到,玩家形状上的怪物触摸应该每隔几次 tick 才能造成伤害,但它并没有(忽略整个毒点的东西;那是一个不同的机制我正在尝试)。我尝试使用Phaser的内置物理来解决这个问题,因为它更简单并且可能是正确的方式,但我猜我没有正确的数学或“接触检测”。任何老兵或愿意分享一些方向的仁慈人士,真的会很感激!

我只是觉得我只是缺少了一个明显或至关重要的东西?哦,确实有一种微妙的延迟我添加到每个怪物攻击(提到上面);它每5次 tick 一次我相信,但我已经等待并检查了它。显然,这并不是问题。

*P.S. 不要问我如何使用AI来解决这个问题。事实上,我已经尝试过并且没有成功(或我只是无法正确提示它)所以我是在这里问真正的人们如何正确地实现它。

// 怪物接触伤害(近战)通过物理重叠
    this.physics.add.overlap(
      this.monsterPhysicsGroup,
      this.playerToken.shape,
      (monsterObj) => {
        const monsterId = (monsterObj as Phaser.GameObjects.Arc).getData('instanceId') as string;
        if (!monsterId) return;
        this.combat.resolveContactDamage(monsterId);
      },
      // 计算从对象的边缘接触
      (monsterObj) => {
        const monster = monsterObj as Phaser.GameObjects.Arc;
        const dx = monster.x - this.playerToken.shape.x;
        const dy = monster.y - this.playerToken.shape.y;
        const dist = Math.sqrt(dx * dx + dy * dy);
        const monsterRadius = (monster.body as Phaser.Physics.Arcade.Body).halfWidth;
        const playerRadius = this.playerToken.shape.width / 2;
        return dist < monsterRadius + playerRadius;
      },
      this
    );

感谢任何指导!