Libgdx专题系列:对象篇 Stage舞台 Actor演员

声明:

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

Libgdx游戏开发交流群 323876830

 

代码写到这,有完美主义的人,该说了, 这代码也太烂了吧, 啥东西都充斥在一个类中,什么SpriteBatch,什么OrthographicCamera,还有该死的变换等逻辑,要是把这些能分开就好了,有一个单独的东西能够处理SpriteBatchOrthographicCamera,不需要我自己来处理, 然后他可以添加对象, 这个对象呢, 可以自己在他的类中做逻辑。 哈哈。别担心。Libgdx早就想到了这一点,他提供了Stage舞台和Actor演员对象来分别处理这些。

把咱们的代码重构下,看看

 

public class FirstGame implements ApplicationListener
{

    private Stage mStage;

    @Override
    public void create()
    {
        mStage = new Stage(800, 480);
        mStage.addActor(new 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;
    private Sprite mSprite;

    private float timer;

    public Player()
    {
        mPixmap = new Pixmap(Gdx.files.internal("gremlins.png"));
        mTexture = new Texture(mPixmap);
        mTextureRegion = new TextureRegion(mTexture, 0, 0, 30, 30);
        mSprite = new Sprite(mTextureRegion);
        mSprite.setPosition(800 / 2, 480 / 2);
    }

    @Override
    public void draw(SpriteBatch batch, float parentAlpha)
    {

        timer += Gdx.graphics.getDeltaTime();
        // 1.移动
        if (timer < 3)
        {
            // 每秒移动50像素
            mSprite.translateX(50 * Gdx.graphics.getDeltaTime());
        }
        // 2.放缩
        else if (timer > 3 && timer < 6)
        {
            // 每秒xy方向上放大1倍
            mSprite.setPosition(800 / 2, 480 / 2);
            mSprite.scale(1 * Gdx.graphics.getDeltaTime());
        }
        // 3.翻转
        else if (timer > 6 && timer < 9)
        {
            // 每秒旋转90度
            mSprite.setScale(1, 1);
            mSprite.rotate(90 * Gdx.graphics.getDeltaTime());
        }
        else
        {
            timer = 0;
            mSprite.setPosition(800 / 2, 480 / 2);
            mSprite.setScale(1, 1);
            mSprite.setRotation(0);
        }

        mSprite.draw(batch);
    }

}


 

改过后,顿时感觉清爽多了, 不至于导致了类爆炸,而且各司其职, 非常简洁,而且Stage集成了不止这些,还有输入事件,分发事件等。 还是比较实用的。

 

工程代码下载

 

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值