1
我有关于移动敌人在我的游戏像马里奥兄弟游戏中的海龟的问题。Libgdx敌人移动
我正在像libgdx中的马里奥兄弟游戏一样的平台游戏。我制作地面,玩家在地面上移动,游戏装饰等......但我不知道如何让敌人移动。
敌人什么时候开始移动(渲染)?在一段时间的延迟或当玩家靠近敌人(1-2屏幕宽度),所有的时间...
我有关于移动敌人在我的游戏像马里奥兄弟游戏中的海龟的问题。Libgdx敌人移动
我正在像libgdx中的马里奥兄弟游戏一样的平台游戏。我制作地面,玩家在地面上移动,游戏装饰等......但我不知道如何让敌人移动。
敌人什么时候开始移动(渲染)?在一段时间的延迟或当玩家靠近敌人(1-2屏幕宽度),所有的时间...
可以说,你有这样的事情图片:
当你移动你的角色,可见区域随之移动,这样你的角色总是处于中间。
当角色移动,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) {
// ...
}
神奇图! –
我知道我不想发表那篇文章,但你的回答是非常有条理的,很好的编辑和良好的形象!非常好的工作@ mrzli! – Ferdz