Libgdx敌人移动

时间:2014-01-19 21:14:32

标签: android artificial-intelligence libgdx

我对在马里奥兄弟游戏中像海龟一样在我的游戏中移动敌人有疑问。

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

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

1 个答案:

答案 0 :(得分:10)

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

enter image description here

当您移动角色时,可见区域会随之移动,因此您的角色总是位于中间。

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

enter image description here

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

enter image description here

实施可能是这样的:
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) {
    // ...
}