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

时间:2016-07-10 17:41:43

标签: timer libgdx 2d game-physics amazon-ecs

我有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(实体组件系统)框架,所以我想完全使用它的类。目前我主要担心的是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;
    }

enter image description here

问题
在第二次玩家触摸时,即使onFire仍然忙,也会调用onReload方法。

目标

  • 在第一个玩家触摸时,枪会被射击,因为它是 已加载。在第二个玩家触摸,如果枪仍然 装载射击将被禁用,直到它准备就绪。
  • 复制弹射器或大炮的行为,在每个子弹发射时,重新加载过程将开始。

0 个答案:

没有答案