我对在马里奥兄弟游戏中像海龟一样在我的游戏中移动敌人有疑问。
我正在使用像libgdx中的马里奥兄弟游戏这样的平台游戏。我制造地面,玩家在地面上移动,游戏装饰等......但我不知道如何使敌人移动。
敌人什么时候开始移动(渲染)?在某个时间延迟或玩家接近敌人(宽度为1-2个屏幕)时,一直......
答案 0 :(得分: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();
}
<强> [更新] 强>
如果我没记错的话,马里奥的屏幕只能向右移动。如果马里奥向左移动,屏幕会保持原位,并且只允许马里奥到达其左边缘,不再进一步。
由于他并非总是在可见区域的同一位置,因此最好根据可见区域位置而不是角色位置激活/渲染敌人。
让我们说visibleX
是可见区域左边缘的绿色矩形(绿色矩形)。
在每次更新时,您都可以执行以下操作:
visibleX = Math.max(charX - visibleWidth / 2, visibleX);
if (enemyX <= visibleX + visibleWidth + someOffset && enemyX >= visibleX - someOffset) {
// ...
}