将动画添加到Sprite.draw(SpriteBatch)方法中

时间:2017-04-06 13:09:29

标签: java android ios animation libgdx

如果可以将动画添加到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),有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

简单的答案是libgdx提供的Animation类 https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/Animation.html

以下是它的工作原理:

  • 使用您喜欢的图形工具创建带有动画帧的Sprite Map。
  • 知道尺寸分割了Sprite图,即:

    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);
    
  • 准备好动画后,您需要创建一个扩展Actor类的类。即:

    public class Bomb extends Actor {
    
     ... (some fields and methods)
     @Override
     public void draw(Batch batch, float parentAlpha) {
      ...
     }
    
  • 您需要覆盖act方法:

    @Override
    public void act(float delta) {
       this.statetime += delta;
    }
    
  • 之后
  • 在重写的draw()方法中使用batch.draw方法来调用

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

这就是简单动画的所有要求

如果您需要竞争示例,请阅读William Mora创建的教程 http://williammora.com/a-running-game-with-libgdx-part-1

如果不清楚,请在评论中写下。