如何在 libGDX - Ashley ECS 框架系统上排队进程?

问题描述 投票:0回答:0

我有

GunSystem class
这个系统处理我的玩家的武器处理。

class GunSystem extends IteratingSystem implements Gun{
   super(Family.all(GunComponent.class, ...).get());

   @Override
   protected void processEntity(Entity entity, float deltaTime) {
        updateGun();
        onReload();
        onFire();
   }

   private void updateGun() {
       // Textures, Position, Size ..
   }
}

默认情况下,当

Gun
连接到
Player
时,枪会自动重新装弹。所以玩家可以立即开枪。

Gun gun = new Gun();
Player player = new Player();
player.setWeapon(gun)

// class:Player, method:onFire()
Gun gun = player.getWeapon();
gun.fire() // or gun.trigger();
// class:GunSystem, method:onReload();
gun.reload(); // reload the gun for half a second, before the gun can be fired again.

担忧
因为我使用的是 libGDX - Ashley ECS (Entity Component System) Framework,所以我想充分利用它的类。目前我主要关心的是扩展抽象

GunSystem
IteratingSystem
。你们可能会建议我如何在重新加载时锁定枪支,然后才能再次扣动扳机。

我试过的

// onReload
  if(gun.reload) {
        if (timer < 0.5f) {
            timer += deltaTime;
        } else {
            gun.reload(spatialX, spatialY);
            gun.reload = false;
        }
    }

// onFire
    if(gun.triggered){
        gun.fire();
        gun.triggered = false;
        gun.reload = true;
    }

问题
在第二次玩家触摸时,即使

onFire
仍然很忙,
onReload
方法也会被调用。

目标

  • 第一次玩家触摸时,枪会开火,因为它是 已经加载。在第二个玩家触摸时,如果枪还在 加载射击被禁用,直到它准备好。
  • 复制弹射器或大炮的行为,每发射一颗子弹都会开始重新加载过程。
timer libgdx 2d game-physics
© www.soinside.com 2019 - 2024. All rights reserved.