gpt4 book ai didi

java - libgdx ashley - 如何以正确的方式控制播放器(ECS 框架)?

转载 作者:行者123 更新时间:2023-12-01 07:50:40 26 4
gpt4 key购买 nike

我尝试过的 在选项 1 中,我创建了 PlayerControlled 类来控制播放器(它工作正常)。但我不想要这样控制玩家的方式,我怀疑这不是正确的方式。

// Option 1
class PlayerComponent implements Component {
// player data here
}

class PlayerSystem extends IteratingSystem {
// player logic here
}

class PlayerControlledComponent implements Component{
// Player entity
}
class PlayerControlledSystem extends IteratingSystem {
// Keyboard Input
// Player entity
}

// Option 2
engine.getSystem(PlayerSystem.class).attack()

// Option 3
class PlayerController {

PlayerConroller(Player player) {

}

}

Both option 1 & 2 are tested and working, option 3 is just an idea.

问题

  • 哪个选项是控制玩家的正确方法?
  • 还有其他选项可以使用 ECS 框架控制播放器吗?

最佳答案

我使用三层方法:(伪代码)

第 1 层:

一些处理来自 InputProcessor libgdx 类的原始输入的类,如下所示:

public interface InputHandlerIF {
void walk(int playerId, Vector2 direction);
void jump();
.....
}


class RawInputHandler implements InputProcessor {

private InputHandlerIF listener;
private Vector2 direction;
onKeyDown(int keycode) {
if(keycode == W) {
direction = valueToWalkForward;
listener.walk(playerId, direction);
}
}
}

因此,来自 libgdx 框架的所有原始输入都会被处理并转换为实际的游戏命令,例如:walk、shoot、castSpell 等。该层允许您在输入传递到 InputHandlerIF 之前对其进行过滤>s: F.e.本地多人游戏中的 Controller 编号。

第 2 层:

然后我有一种接收命令的命令处理程序系统:

public class InputHandlerSystem extends EntitySystem implements InputHandlerIF {
public walk(int playerId, Vector2 direction) {
positionComponents.getForPlayer(playerId).direction = direction;
}
}

系统知道玩家的所有位置组件并相应地更新值。

第 3 层:

PlayerMovementSystem 也知道positionComponents 并根据时间增量和positionComponent.direction 值更新玩家位置(x 和y)。

class PlayerMovementSystem extends IteratingSystem {
update(float delta) {
... update player position
}
}

设置如下:

Engine engine = new Engine();
InputHandlerSystem ihs = new InputHandlerSystem();
RawInputHandler rih = RawInputHandler();
rih.registerListener(ihs);
engine.addSystem(ihs);
enigne.addSystem(new PlayerMovementSystem());

关于java - libgdx ashley - 如何以正确的方式控制播放器(ECS 框架)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38278201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com