Libgdx 敌人移动

我想问一下关于游戏中敌人移动的问题,就像马里奥兄弟游戏中的乌龟那样。

我正在使用 Libgdx 开发一个类似马里奥兄弟的平台游戏。我已经制作了地面、玩家在地面上移动、游戏装饰等……但我不知道如何让敌人移动。

敌人应该在什么时候开始移动(渲染)?是经过一段时间延迟后,还是当玩家接近敌人(1-2个屏幕宽度)时,还是一直移动……


回答:

假设你有这样的图片:

enter image description here

当你移动角色时,可见区域会随之移动,例如你的角色总是处于中间位置。

当角色移动时,charX 会增加,当他移动了一定距离后到达一个位置,敌人就会被激活:

enter image description here

敌人会保持激活状态,直到角色到达这里:

enter image description here

实现方式可以是这样的:
someOffset 可以是一个任意的常数值,你可以使用它来让敌人在进入屏幕并变得可见之前就激活。

因此,对于每一帧,你可以这样做:

if (Math.abs(enemyX - charX) <= visibleWidth / 2 + someOffset) {    // 敌人在 leftLimit 和 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) {    // ...}

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注