java - 在 libgdx 中组合 Actor

标签 java libgdx

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

最佳答案

Should i use a Group and the player and the weapon are part of that group?

是的,这是正确的方法。

舞台的一部分,每当组移动时,该组的所有成员(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 并添加武器。否则你的英雄需要引用角色组才能移动。这也将使切换武器变得更加容易。然后逻辑英雄可以自己做这件事,不需要管理角色组。

关于java - 在 libgdx 中组合 Actor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21229026/

相关文章:

java - 替换不是替换java中的双引号

java - 你用什么集合来接受oracle select 1的返回值?

java - iOS 的 Libgdx 项目在模拟器上通过 robovm 编译时显示 libgdx 启动?

java - libGDX : desgin game assets according different size screens

java - 使用 ANT 时,如果我有特定的 Java 版本,如何才能定义任务?

java - 使用arff文件存储数据

java - JPA 乐观锁定与同步 Java 方法

java - Libgdx 变量类型的内存大小

java - libgdx 多个平移事件

java - 如何在 libgdx 中命名 Actor?