[英]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.