2017-04-06 191 views
0

如果可以將動畫添加到Sprite.draw(SpriteBatch)方法中。據multidimensial屏幕我使用視窗和顯示紋理像這樣適當的比例:將動畫添加到Sprite.draw(SpriteBatch)方法

player= new Sprite(new Texture("player.jpg")); 
     player.setSize(PLAYER_SIZE,PLAYER_SIZE); 
     player.setPosition(0,0); 

    @Override 
    public void render(SpriteBatch sb) { 
     sb.setProjectionMatrix(camera.combined); 
     sb.begin(); 
     player.draw(sb); 
     sb.end(); 
    } 

我想我的動畫紋理的運動時,它會移動。搜索後,我發現只有一種方法可以做到這一點,但它需要SpriteBatch.draw(animation.getKeyFrame(elapsed_time),position.x,position.y),有沒有辦法做到這一點?

+0

我會建議看看Scene2d。這個軟件包有各種各樣的東西來爲您的遊戲添加動畫:https://github.com/libgdx/libgdx/wiki/Scene2d –

+0

如果下面的答案對您有幫助,請立即註冊。 – tjago

回答

0

簡單的答案是由libgdx https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/Animation.html

提供動畫類這裏去它的工作原理:

  • 使用自己喜歡的圖形工具動畫幀創建雪碧地圖。
  • 知道尺寸拆分雪碧地圖,即:

    Texture spritemap = newTexture(Gdx.files.internal("images/sprite-map.png")); 
    TextureRegion[][] spritePosition = TextureRegion.split(spritemap, FRAME_WIDTH, FRAME_HEIGHT); 
    
  • 接下來,要創建動畫的動畫類,例如炸彈爆炸,你需要從你的精靈地圖挑右座標,你的精靈地圖是一個二維矩陣。因此,要做到這一點,你可以,例如:

    TextureRegion[] bombSprites = new TextureRegion[4]; 
    bombSprites[0] = spritePosition[5][6]; 
    bombSprites[1] = spritePosition[5][7]; 
    bombSprites[2] = spritePosition[5][8]; 
    bombSprites[3] = spritePosition[5][9]; 
    Animation bombAnimation = new Animation(0.1f, bombSprites); 
    
  • 有動畫的準備,你需要有創建的類延伸演員類。即:

    public class Bomb extends Actor { 
    
    ... (some fields and methods) 
    @Override 
    public void draw(Batch batch, float parentAlpha) { 
        ... 
    } 
    
  • 你需要重寫的行爲方法:

    @Override 
    public void act(float delta) { 
        this.statetime += delta; 
    } 
    
  • 在使用batch.draw方法後,你重寫draw()方法來調用

    batch.draw(animation.getKeyFrame(this.statetime, true) 
    

這就是簡單動畫的所有要求

如果您需要競爭例如請仔細閱讀威廉·莫拉 http://williammora.com/a-running-game-with-libgdx-part-1

創建教程如果有什麼不清楚,請把它寫在評論。