Libgdx专题系列:对象篇 Action动作

声明:

本系列文章使用的Libgdx版本均为0.99版本

Libgdx游戏开发交流群 323876830

 

我的完美主义又来了,在我们的代码中,Player的动作实现,太麻烦了吧, 我还要计时,几秒到几秒执行什么动作, 而且还要我还原, 这我可忍受不了,能不能我规定一组动作, 然后你按照我的动作指令,慢慢去执行啊,好吧。 Libgdx已经为我们实现了这部分逻辑, 我们可以直接使用,Action类是他的超类,具体他的子类有几十个,有兴趣的可以看看。好吧。废话不多说了, 重构代码吧。

public class FirstGame implements ApplicationListener
{

    private Stage mStage;

    @Override
    public void create()
    {
        mStage = new Stage(800, 480);

        Player player = new Player();
        player.setPosition(800 / 2, 480 / 2);

        // 移动操作
        MoveByAction action1 = Actions.moveBy(150, 0, 3);
        ScaleByAction action2 = Actions.scaleBy(3, 3, 3);
        RotateByAction action3 = Actions.rotateBy(90, 3);

        // 还原操作
        ScaleToAction action4 = Actions.scaleTo(1, 1);
        RotateToAction action5 = Actions.rotateTo(0);
        MoveToAction action6 = Actions.moveTo(800 / 2, 480 / 2);

        // 顺序执行action
        SequenceAction sequenceAction = Actions.sequence(action1, action2,
                action3, action4, action5, action6);
        sequenceAction.setActor(player);

        // 无限循环三个动作
        RepeatAction epeatAction = Actions.repeat(RepeatAction.FOREVER,
                sequenceAction);

        player.addAction(epeatAction);

        mStage.addActor(player);

    }

    @Override
    public void resize(int width, int height)
    {
    }

    @Override
    public void render()
    {
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        mStage.act(Gdx.graphics.getDeltaTime());
        mStage.draw();
    }

    @Override
    public void pause()
    {
        // TODO Auto-generated method stub
    }

    @Override
    public void resume()
    {
        // TODO Auto-generated method stub
    }

    @Override
    public void dispose()
    {
        // 所有实现Disposable接口的都需要释放资源
        mStage.dispose();
    }

}
public class Player extends Actor
{

    private Pixmap mPixmap;
    private Texture mTexture;
    private TextureRegion mTextureRegion;

    public Player()
    {
        mPixmap = new Pixmap(Gdx.files.internal("gremlins.png"));
        mTexture = new Texture(mPixmap);
        mTextureRegion = new TextureRegion(mTexture, 0, 0, 30, 30);
    }

    @Override
    public void draw(SpriteBatch batch, float parentAlpha)
    {
        //这里要注意,我们添加的action只是改变actor的属性值,绘制的时候并没有
        //自动给我们处理这些逻辑, 我们要做的就是取得这些值,然后自己处理
        batch.draw(mTextureRegion, getX(), getY(),
                mTextureRegion.getRegionWidth() / 2,
                mTextureRegion.getRegionHeight() / 2,
                mTextureRegion.getRegionWidth(),
                mTextureRegion.getRegionHeight(), getScaleX(), getScaleY(),
                getRotation());
    }

    @Override
    public void clear()
    {
        super.clear();
        mPixmap.dispose();
        mTexture.dispose();
    }

}


 

Libgdxaction的使用还是很方便的,各种动作都有,还有控制类的action,例如顺序执行或者同步执行,循环次数等,并且都是继承action,使用了包装的设计模式, 这样无论怎么操作都是acion,简单的player.addAction(epeatAction);就能操作,不用担心他具体是什么action

 

工程下载地址

 

转载请链接原文地址 http://blog.csdn.net/wu928320442/article/details/16940665

你可能感兴趣的:(android,移动,libgdx)