Android游戏开发框架Libgdx的使用(六)--动画类

it2022-05-19  64

本文使用的libgdx是0.98版本,可能和最新版有一些不同地方。全文内容仅供参考。

原文地址:http://blog.sina.com.cn/weyingkj    作为一个游戏,动画是基本的元素,试想游戏如果动画做的差的话,游戏的用户体验就会很糟,libgdx给我们提供了一个专门负责管理动画的类---------Animation类,这个类就是专门负责做动画的管理和放映的,下面我们就来学习一个Animation,由于Animation对于开发者来说可能都是很熟悉,所以土豆这个博文写的就比较简略,希望大家谅解。   Libgdx游戏引擎(1群):187378034 Libgdx游戏引擎(2群):148848483 Libgdx游戏引擎(3群): 79168470   1.Animation类介绍   Api定义:动画是由多个帧,在设定的时间间隔序列显示。比如,一个跑步的人一个动画可以通过运行时播放这些图像无限拍照他了。   功能用法:管理动画,设置随即播放模式和播放顺序。   使用方法:  walkAnimation = new Animation (float fDuration, keyFrames)          第一个参数是播放每一帧的时间,后面是一个TestureRegion。 下面我给大家介绍下,Animation的原理, 下图显示了一个完整的运行一个周期。它被称为精灵表。每个矩形是一个精灵,它被称为一个框架。先创建运行动画,在精灵要绘制后,随着时间的推移,绘制另一个矩形内的图片。 一般动画都是用一张图片,然后配合TextureRegion来实现的。下面我们官方的动画来做演示   实例图:                  2.代码解读   由于代码比较繁多,而且许多都是土豆之前讲解过的,所以这里土豆挑一些比较重要的来讲解下。这里我列举了几个,如:TextureRegion[][]数组、setPlayMode()方法、statetime的设置、   (1)TextureRegion[][]数组   代码:“TextureRegion[][] tmp = TextureRegion.split(walkSheet, walkSheet.getWidth() /  FRAME_COLS, walkSheet.getHeight() / FRAME_ROWS);”   这个段代码是怎么回事呢?他是采用分离式的方法分分割传入的纹理,将 获得的 纹理分为一个二维数组。记住,前提是分割的矩形大小相等。然后使用临时变量, 填充 walkframes数组。这是样使用起来很方便。   (2) S etPlayMode()方法   它是Animation类自己封装的一个方法,是用来设置播放模式的,其中它提供的模式有6种: NORMAL、REVERSED、LOOP、LOOP_REVERSED、LOOP_PINGPONG、LOOP_RANDOM、 。

NORMAL:这个不用说了,就是正常的播放模式。

REVERSED:反向播放,从后向前播放,这个就像人物倒退的跑

LOOP:持续播放,这个比较常用。

LOOP_REVERSED:持续倒退播放。

LOOP_PINGPONG:  向前播放几张图片,再向后播放几帧图片。

  (3)  S tateTime 使用     代码“ stateTime += Gdx.graphics.getDeltaTime(); ”,他是一个获取一个状态下所持续的一个时间。就像我们在现实世界使用的时间一样,一般配合系统时间使用.Gdx.graphics.getDeltaTime():获取系统渲染时间,一般默认是0.173秒。     3.详细实现   这个代码是比较常用的做Animation用的,而且效率也是很高的,如果大家想做动画的话,推荐大家使用这段代码。   代码如下:   package com.potato;   import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture.TextureFilter; import com.badlogic.gdx.graphics.g2d.Animation; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeBitmapFontData; import com.badlogic.gdx.graphics.g2d.tiled.TileAtlas; import com.badlogic.gdx.graphics.g2d.tiled.TileMapRenderer; import com.badlogic.gdx.graphics.g2d.tiled.TiledLoader; import com.badlogic.gdx.graphics.g2d.tiled.TiledMap;   public class Map implements ApplicationListener {     private static final int        FRAME_COLS = 6;             private static final int        FRAME_ROWS = 5;                  Animation                       walkAnimation;              Texture                         walkSheet;                  TextureRegion[]                 walkFrames;                 SpriteBatch                     batch;                 TextureRegion                   currentFrame;                   float stateTime;                                                 @Override     public void create() {             walkSheet = new Texture(Gdx.files.internal("animation_sheet.png"));                            TextureRegion[][] tmp = TextureRegion.split(walkSheet, walkSheet.getWidth() /  FRAME_COLS, walkSheet.getHeight() / FRAME_ROWS);                              walkFrames = new TextureRegion[FRAME_COLS * FRAME_ROWS];             int index = 0;             for (int i = 0; i < FRAME_ROWS; i++) {                     for (int j = 0; j < FRAME_COLS; j++) {                             walkFrames[index++] = tmp[i][j];                     }             }             walkAnimation = new Animation(0.025f, walkFrames);                           walkAnimation.setPlayMode(walkAnimation.LOOP_PINGPONG);                          batch = new SpriteBatch();                            stateTime = 0f;                                                     }       @Override     public void render() {             Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);                          stateTime += Gdx.graphics.getDeltaTime();                               currentFrame = walkAnimation.getKeyFrame(stateTime, true);                             batch.begin();             batch.draw(currentFrame, Gdx.graphics.getWidth()/2, Gdx.graphics.getHeight()/2);                                      batch.end();     }   @Override public void resize(int width, int height) { // TODO Auto-generated method stub }   @Override public void pause() { // TODO Auto-generated method stub }   @Override public void resume() { // TODO Auto-generated method stub }   @Override public void dispose() { // TODO Auto-generated method stub } }   效果视频地址:http://blog.sina.com.cn/s/blog_940dd50a0101c54b.html     写在最后,有关于 《动画类》的基本方法今天就介绍到这里了,下一篇是是关于libgdx框架中 《常用控件》的博文,我会介绍下Stage的使用。如果大家有什么问题可以加我 QQ:316344618,一起讨论下。。PS:今天写的比较仓促,周末嘛,大家都要休息,土豆也是要去步行街玩了,博文可能存在不足,希望大家能多给予指点,帮助修改完善。                                                                                                                                   ------------奋斗小土豆丶                                                                                                                                                                          2013 年 4 月 14 日  

转载于:https://www.cnblogs.com/WeYingKG/archive/2013/04/17/3025866.html

相关资源:数据结构—成绩单生成器

最新回复(0)