2016-07-26 3 views
0

저는 libGDX와 java에 익숙하지 않기 때문에 많은 튜토리얼을 따라 왔습니다. 그래서 나는 매회마다 나를 바로 잡을 수 있다고 느낀다! (코드 비효율적 인 경우에도 그렇습니다!)LibGDX 해시 맵에서 회전하는 스프라이트

현재 단일 스프라이트 대신 모든 유형의 스프라이트를 회전시키는 문제가 있습니다.

나는 내 말은하는 방법을 보여 드리겠습니다 : 스프라이트의 3 가지 크기가 있습니다

  1. : 여기

    libGDX sprite rotation issue

    는 구체적인이다.

  2. 은 내가 Sprite sprite = new Sprite();에 모든 시간을 필요가 없습니다 (가정이 무거운 작업의)

  3. 가 내가 생각 (해시 맵에서 하나를 참조하여 스프라이트를 만들려면 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); 
} 

는 어쩌면 나는 실제로 충분히 해시 맵에서 스프라이트를 외삽 아니에요? 이 수수께끼를 알아 내기 위해 다른 것이 필요한지 알려주세요.

정말 고마워요!

+0

Sprite 복사 생성자를 사용하지 못하게 될 수도 있습니다. 이것을보십시오 :'sprite = new Sprite (spriteMap.get (name)); ' – Orin

+0

[this] (http://stackoverflow.com/questions/16119522/libgdx-what-is-the-properway - 투 - 배우 -)? 또는 아마도 두 번째 생성자 [여기] (https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/Sprite.html)? – Descrubb

+0

예 두 번째 생성자에 대해 이야기했습니다. 지금은지도에서 스프라이트의 참조를 가져 와서 새로운 위치로 설정하고 회전하는 것입니다. 그래서 당신이 할 때마다 그 참조를 공유하는 모든 스프라이트도 회전하고 있습니다. – Orin

답변

0

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 인스턴스에는 기본 TextureRegion에 대한 중복 UV 데이터와 중복 Color 객체 및 Rectangle 객체가 포함 된 정점 데이터에 대한 20 개의 부동 배열이 있습니다. 따라서 중복되지 않고 이러한 모든 것을 참조하는 자체 클래스를 만드는 것보다 무겁습니다.

풀을 사용하지 않고 게임을 플레이하는 동안 너무 무거워서 파괴 할 수 없습니다.

실제로 무거울 것은 단일 텍스처 인스턴스를 공유하는 대신 스프라이트를 만들기 위해 새로운 텍스처를로드하는 것입니다.

Libgdx Sprites는 잉여를 제외하고 그리기와 상태를 너무 많이 닮기 때문에 일반적으로 게임 디자인에 적합하지 않습니다. 그들은 conflation이 정말로 디자인 문제가 아닌 파티클 (아마도 UI 요소)에 유용합니다. 사실, Sprite는 Libgdx에서 내부적으로 사용되는 유일한 두 장소라고 생각합니다.

+0

이것은 나를 위해 일했습니다. – Descrubb