Libgdx专题系列:对象篇 Sprite精灵的使用

来源:互联网 发布:高级感知乎 编辑:程序博客网 时间:2024/05/17 08:37

声明:

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

Libgdx游戏开发交流群 323876830

 

在上面虽然实现了对于TextureRegion的各种变换操作,但是明显感觉很繁琐, 还要自己单独写位移,放缩,旋转变量参数等, 那么libgdx有没有对这个进行封装的呢?答案是有的。 Sprite实现了这些逻辑,下面是使用精灵同样实现的代码。

 

public class FirstGame implements ApplicationListener{    private Pixmap mPixmap;    private Texture mTexture;    private TextureRegion mTextureRegion;    private Sprite mSprite;    private SpriteBatch mSpriteBatch;    private OrthographicCamera mCamera;    private float timer;    @Override    public void create()    {        mPixmap = new Pixmap(Gdx.files.internal("gremlins.png"));        mTexture = new Texture(mPixmap);        mTextureRegion = new TextureRegion(mTexture, 0, 0, 30, 30);        mSprite = new Sprite(mTextureRegion);        mSpriteBatch = new SpriteBatch();        // 镜头需要设定宽高和镜头中间位置        mCamera = new OrthographicCamera(800, 480);        mCamera.position.set(800 / 2, 480 / 2, 0);        mSprite.setPosition(800 / 2, 480 / 2);    }    @Override    public void resize(int width, int height)    {        // 确保AndroidManifest.xml里面的Activity配置为横屏        // 宽和高才是横屏的值的返回,默认为竖屏的值    }    @Override    public void render()    {        // 镜头的更新与设置矩阵到SpriteBatch        mCamera.update();        mSpriteBatch.setProjectionMatrix(mCamera.combined);        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);        }        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);        mSpriteBatch.begin();        mSprite.draw(mSpriteBatch);        mSpriteBatch.end();    }    @Override    public void pause()    {        // TODO Auto-generated method stub    }    @Override    public void resume()    {        // TODO Auto-generated method stub    }    @Override    public void dispose()    {        // 所有实现Disposable接口的都需要释放资源        mPixmap.dispose();        mTexture.dispose();        mSpriteBatch.dispose();    }}


 


怎么样,代码简洁许多了吧, 看源码可以了解到,Sprite继承了TextureRegion,并自己内部实现了逻辑操作,我上面的例子只是个简单的展示, 还有许多其他的方法可以使用,可以自己摸索,可能有些人觉得这样不好,把逻辑代码和绘制代码放在一起了, 破坏了设计原则的代码的一致性,恩,的确,放在一起的确不好, 但是这样可以更好的使用。 如果自己不想单独写一个的话,这样使用未尝不是一个好的办法。

项目下载地址

 

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

原创粉丝点击