[英]LibGDX Rotating Sprites from a Hashmap
一般来说,我对libGDX和Java还是很陌生,所以我一直在关注大量教程。 请随时纠正我! (即使在代码效率低下也可以!!)
我目前遇到的问题是旋转所有单一类型的精灵,而不是仅一个精灵。
我会告诉你我的意思:
具体细节如下:
精灵共有3种大小。
我使用哈希表存储3个Sprite sprite = new Sprite();
因此不必Sprite sprite = new Sprite();
每次(据说这是一个繁重的任务)
我通过引用哈希图中的一个来创建一个精灵(我想?)
问题:当我告诉特定的精灵旋转时,它会彼此旋转其大小的精灵。
我怀疑我正在旋转哈希图引用...如果这是正确的说法。
这是我一直在使用的过程:
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.