【发布时间】:2014-01-19 21:14:31
【问题描述】:
我对在我的游戏中移动敌人(如马里奥兄弟游戏中的乌龟)有疑问。
我正在开发平台游戏,例如 libgdx 中的马里奥兄弟游戏。我制作地面,玩家在地面上移动,游戏装饰等......但我不知道如何让敌人移动。
敌人什么时候开始移动(渲染)?在某些时间延迟或玩家靠近敌人(1-2 屏幕宽度)时,一直...
【问题讨论】:
标签: android artificial-intelligence libgdx
我对在我的游戏中移动敌人(如马里奥兄弟游戏中的乌龟)有疑问。
我正在开发平台游戏,例如 libgdx 中的马里奥兄弟游戏。我制作地面,玩家在地面上移动,游戏装饰等......但我不知道如何让敌人移动。
敌人什么时候开始移动(渲染)?在某些时间延迟或玩家靠近敌人(1-2 屏幕宽度)时,一直...
【问题讨论】:
标签: android artificial-intelligence libgdx
假设你有这样的图像:
当你移动你的角色时,可见区域会随之移动,因此你的角色总是在中间。
当角色移动时,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();
}
[更新]
如果我没记错的话,马里奥的屏幕只能向右移动。如果马里奥向左移动,屏幕将保持原位,并且只允许马里奥到达其左侧边缘,不能再进一步。
由于他并不总是在可见区域的同一位置,因此基于可见区域位置而不是角色位置来激活/渲染敌人可能会更好。
假设visibleX 是可见区域(绿色矩形)左边缘的 x 位置。
在每次更新时,您都可以执行以下操作:
visibleX = Math.max(charX - visibleWidth / 2, visibleX);
if (enemyX <= visibleX + visibleWidth + someOffset && enemyX >= visibleX - someOffset) {
// ...
}
【讨论】: