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)