2014-01-19 79 views
1

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

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

敌人什么时候开始移动(渲染)?在一段时间的延迟或当玩家靠近敌人(1-2屏幕宽度),所有的时间...

回答

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是可见区域(绿色矩形)左边缘的x位置。

每次更新,你可以这样做:

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

if (enemyX <= visibleX + visibleWidth + someOffset && enemyX >= visibleX - someOffset) { 
    // ... 
} 
+2

神奇图! –

+0

我知道我不想发表那篇文章,但你的回答是非常有条理的,很好的编辑和良好的形象!非常好的工作@ mrzli! – Ferdz