2016-12-16 2 views
2

Я пытаюсь масштабировать текстуру в соответствии с моим экраном, но я не уверен, как это сделать.Шкала LibGDX TextureRegion для установки на экран

private AssetManager assets; 
private TextureAtlas atlas; 
private TextureRegion layer1,layer2,layer3; 

assets = new AssetManager(); 

assets.load("pack.pack", TextureAtlas.class); 

assets.finishLoading(); 

atlas = assets.get("pack.pack"); 

layer1=atlas.findRegion("floor"); 

Есть ли способ масштабирования текстуры?

ответ

1

Объект TextureRegion не содержит информации о том, какой размер будет при рисовании. Для этого вы можете создать свой собственный класс, который содержит данные для его рисования, такие как переменные для ширины, высоты и положения.

Или вы можете использовать встроенный класс Sprite, который уже обрабатывает множество базовых данных о местоположении и размере данных. С точки зрения дизайна, я думаю, Sprite следует избегать, потому что он простирается от TextureRegion, поэтому он объединяет активы с игровыми данными. Было бы предпочтительнее иметь класс игрового объекта. Пример:

public class GameObject { 
    float x, y, width, height, rotation; 
    TextureRegion region; 
    final Color color = new Color(1, 1, 1, 1); 

    public GameObject (TextureRegion region, float scale){ 
     this.region = region; 
     width = region.getWidth() * scale; 
     height = region.getHeight() * scale; 
    } 

    public void setPosition (float x, float y){ 
     this.x = x; 
     this.y = y; 
    } 

    public void setColor (float r, float g, float b, float a){ 
     color.set(r, g, b, a); 
    } 

    //etc getters and setters 

    public void draw (SpriteBatch batch){ 
     batch.setColor(color); 
     batch.draw(region, x, y, 0, 0, width, height, 1f, 1f, rotation); 
    } 

    public void update (float deltaTime) { 
     // for subclasses to perform behavior 
    } 
}