繁体   English   中英

LibGDX从哈希图旋转精灵

[英]LibGDX Rotating Sprites from a Hashmap

一般来说,我对libGDX和Java还是很陌生,所以我一直在关注大量教程。 请随时纠正我! (即使在代码效率低下也可以!!)

我目前遇到的问题是旋转所有单一类型的精灵,而不是仅一个精灵。

我会告诉你我的意思:

libGDX精灵旋转问题

具体细节如下:

  1. 精灵共有3种大小。

  2. 我使用哈希表存储3个Sprite sprite = new Sprite();因此不必Sprite sprite = new Sprite(); 每次(据说这是一个繁重的任务)

  3. 我通过引用哈希图中的一个来创建一个精灵(我想?)

  4. 问题:当我告诉特定的精灵旋转时,它会彼此旋转其大小的精灵。

我怀疑我正在旋转哈希图引用...如果这是正确的说法。

这是我一直在使用的过程:

hashpmap:

final HashMap<String, Sprite> spriteMap = new HashMap<String, Sprite>();

纹理图集:

spriteAtlas = new TextureAtlas("sprites.txt");

用纹理图集的区域填充哈希图:

private void init spriteMap() {
    Array<AtlasRegion> regions = spriteAtlas.getRegions();

    for (int i = 0; i < regions.size; i++) {
        AtlasRegion region = regions.get(i);
        Sprite sprite = spriteAtlas.createSprite(region.name);

        float width = sprite.getWidth() / SCALE;
        float height = sprite.getHeight() / SCALE;

        sprite.setSize(width, height);
        sprite.setOrigin(0, 0);
        sprite.scale(1f);
        spriteMap.put(region.name, sprite);
    }
}

从哈希表创建精灵“实例”:

private void createNewSprite() {
    Sprite sprite;
    sprite = spriteMap.get(name);
    sprite.setPosition(x, y);
    sprite.rotate(rotation);
    spriteArray.add(sprite);
}

也许我实际上没有从哈希图中充分推断出精灵? 让我知道您是否还有其他需要解决的难题。

非常感谢!

您只为每个区域名称创建了一个精灵,在spriteArray多次引用了它。 每次创建一个新的:

private void createNewSprite() {
    Sprite sprite = new Sprite(spriteMap.get(name)); //creates a new sprite that is a copy of the one in your map.
    sprite.setPosition(x, y);
    sprite.rotate(rotation);
    spriteArray.add(sprite);
}

他们只是有点沉重。 每个Sprite实例都有一个包含20个浮点的数组,用于顶点数据,其中包含基础TextureRegion的冗余UV数据,以及冗余的Color对象和Rectangle对象。 因此,这比创建自己的类来引用所有这些内容而没有多余内容要重。

它们太重了,无法在不使用池的情况下在游戏过程中创建和销毁它们中的许多。

真正麻烦的是加载新的Textures来创建Sprites,而不是让它们全部共享一个Texture实例。

在我看来,Libgdx Sprites通常不适用于游戏设计,因为除了冗余之外,它们将状态与绘制过多混合在一起。 它们对于合并实际上不是设计问题的粒子(可能还有UI元素)很有用。 实际上,我认为这是Libgdx内部仅使用Sprites的两个地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM