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
- Libgdx专题系列:对象篇 Sprite精灵的使用
- Libgdx专题系列:对象篇源码分析 Sprite
- Libgdx专题系列:对象篇 简单绘制
- Libgdx专题系列:对象篇 Action动作
- Libgdx专题系列:对象篇 Animation动画
- Libgdx之Sprite 精灵类
- Libgdx专题系列:对象篇 Stage舞台 Actor演员
- Libgdx专题系列:对象篇 Game游戏控制中心 Screen 场景
- Libgdx专题系列:对象篇源码分析 TextureRegion
- Libgdx专题系列:对象篇 纹理的旋转,放缩,位移
- Libgdx专题系列:地图篇 地图的绘制
- NGUI Sprite(精灵的使用)
- NGUI Sprite精灵与精灵动画的使用
- NGUI研究之Sprite精灵与精灵动画的使用
- Libgdx专题系列:地图篇 地图移动
- Libgdx专题系列:物理引擎篇 Box2D
- Libgdx专题系列:实例篇 打飞机
- Libgdx专题系列:物理引擎篇 Box2D
- Linux下软件包的安装
- linux 重定向
- Linux中的输入输出重定向
- http状态码
- web.xml配置文件详解
- Libgdx专题系列:对象篇 Sprite精灵的使用
- linux shell编程
- Shell编程基础(转载)
- MySQL存储引擎的选择
- 有用的vi删除命令
- ubuntu下安装subversion客户端
- awk命令简介
- 日志分析的shell脚本
- Grep命令学习笔记(转)