Libgdx敌人移动

Jov*_*van 1 android artificial-intelligence libgdx

我有关于在马里奥兄弟游戏中像海龟一样移动敌人的问题.

我正在使用像libgdx中的马里奥兄弟游戏这样的平台游戏.我制造地面,玩家在地面上移动,游戏装饰等......但我不知道如何使敌人移动.

什么时候敌人应该开始移动(渲染)?在一段时间延迟或当玩家接近敌人(宽度为1-2个屏幕)时,一直......

mrz*_*zli 10

让我们说你有这样的形象:

在此输入图像描述

移动角色时,可见区域随之移动,以便您的角色例如始终位于中间.

当角色移动,charX增加并且在他行进一定距离后,他到达敌人激活时的位置:

在此输入图像描述

它一直保持活跃,直到角色到达:

在此输入图像描述

实现可能是这样的:
someOffset可以是一个任意的常量值,你使用它,以便敌人在进入屏幕之前激活并变得可见.

因此,对于每个帧,您可以这样做:

if (Math.abs(enemyX - charX) <= visibleWidth / 2 + someOffset) {
    // the enemy patrols between leftLimit and rightLimit
    if (enemySpeed < 0 && enemyX < leftLimit) {
        enemyX = leftLimit;
        enemySpeed = -enemySpeed;
    } else if (enemySpeed > 0 && enemyX > rightLimit) {
        enemyX = rightLimit;
        enemySpeed = -enemySpeed;
    }

    enemyX += enemySpeed * delta;

    renderEnemy();
}
Run Code Online (Sandbox Code Playgroud)

[更新]

如果我没记错的话,马里奥的屏幕只能向右移动.如果马里奥向左移动,屏幕会保持原位,并且只允许马里奥到达其左边缘,不再进一步.

由于他并非总是在可见区域上的相同位置,因此基于可见区域位置而不是角色位置来激活/渲染敌人可能更好.

可以说这visibleX是可见区域左边缘的x位置(绿色矩形).

在每次更新时,您可以执行以下操作:

visibleX = Math.max(charX - visibleWidth / 2, visibleX);

if (enemyX <= visibleX + visibleWidth + someOffset && enemyX >= visibleX - someOffset) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 神奇的图表! (2认同)