簡體   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