在libgdx中组合Actors

时间:2014-01-20 08:13:13

标签: java libgdx

对于我的2D自上而下射击游戏,我想结合我的角色(Image / Actor的子类)和武器(TextureRegion或Actor?),他只是出于光学原因。我的角色里面有一个Hero物体,代表着他的逻辑部分,就像他的武器,他选择的武器和他的速度。他持有的武器也只是逻辑部分,因此没有图形。我应该如何将这种武器添加到玩家?我应该使用一个组,而玩家和武器是该组的一部分吗?或者玩家是否应该根据自己的位置在他的绘制方法中绘制武器?但是我必须将武器纹理保持在玩家内部并加载与英雄对象当前持有的武器相匹配的纹理。什么是最好的方式?

1 个答案:

答案 0 :(得分:5)

  

我应该使用一个组,而玩家和武器是该组的一部分吗?

是的,这是正确的方法。

GroupStage的一部分,每当移动该群组时,该群组的所有成员(Actors)都随之移动。它也像一个新的局部坐标系。实际上,您可以将Player类设为一个组,而不是将其放入组中。武器本身将被添加到您的玩家组,其位置应该是固定的。固定意味着它只会被设置一次到一个小的偏移量,该偏移量将被添加到玩家组位置。

分裂武器和玩家是有道理的,因为在射击时你可能希望武器“摇晃”一点,但你的玩家不应该这样做。

在伪代码中,您的给定方案可能如下所示:

class Hero extends Actor {
    // update logic in act()
    // render sprite in draw() depending on the this.getX()/getY()
}

class Weapon extends Actor {
    // update logic in act()
    // render sprite in draw() depending on the this.getX()/getY()
}

class Character extends Group {
    private Hero hero;
    private Weapon weapon;

    public Character(Hero hero, Weapon weapon) {
        this.hero = hero;
        this.weapon = weapon;
        addActor(hero);
        addActor(weapon);
        weapon.setPosition(10f, 0f); // small offset to the right
    }
}

现在使用character.setPosition()移动整个角色。但正如我所说:由于英雄可能会执行逻辑,你应该摆脱你的Character并使Hero成为Group并添加武器。否则,你的英雄需要对角色组的引用才能移动。这也会使切换武器变得更容易。然后逻辑英雄可以自己做,而不需要管理角色组。