1.Animation类介绍
 
Api定义:动画是由多个帧,在设定的时间间隔序列显示。比如,一个跑步的人一个动画可以通过运行时播放这些图像无限拍照他了。
功能用法:管理动画,设置随即播放模式和播放顺序。
使用方法: walkAnimation = new Animation(float fDuration, keyFrames)
第一个参数是播放每一帧的时间,后面是一个TestureRegion。下面我给大家介绍下,Animation的原理,下图显示了一个完整的运行一个周期。它被称为精灵表。每个矩形是一个精灵,它被称为一个框架。先创建运行动画,在精灵要绘制后,随着时间的推移,绘制另一个矩形内的图片。
一般动画都是用一张图片,然后配合TextureRegion来实现的。下面我们官方的动画来做演示
 

 
 
 
2.代码解读
(1)TextureRegion[][]数组
代码:TextureRegion[][] tmp = TextureRegion.split(walkSheet, walkSheet.getWidth() / FRAME_COLS, walkSheet.getHeight() /FRAME_ROWS);
 
这个段代码是怎么回事呢?他是采用分离式的方法分分割传入的纹理,将获得的纹理分为一个二维数组。记住,前提是分割的矩形大小相等。然后使用临时变量,填充walkframes数组。这是样使用起来很方便。
 
(2) SetPlayMode()方法
它是Animation类自己封装的一个方法,是用来设置播放模式的,其中它提供的模式有6种:NORMAL、REVERSED、LOOP、LOOP_REVERSED、LOOP_PINGPONG、LOOP_RANDOM、。
NORMAL:这个不用说了,就是正常的播放模式。
REVERSED:反向播放,从后向前播放,这个就像人物倒退的跑。
LOOP:持续播放,这个比较常用。
LOOP_REVERSED:持续倒退播放。
LOOP_PINGPONG: 向前播放几张图片,再向后播放几帧图片。
 
(3) StateTime 使用
代码stateTime += Gdx.graphics.getDeltaTime(),他是一个获取一个状态下所持续的一个时间。就像我们在现实世界使用的时间一样,一般配合系统时间使用Gdx.graphics.getDeltaTime():获取系统渲染时间,一般默认是0.173秒。
3.详细实现
 package com.mygdx.animation;

 import com.badlogic.gdx.ApplicationListener;
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.GL20;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.Animation;
 import com.badlogic.gdx.graphics.g2d.Animation.PlayMode;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.graphics.g2d.TextureRegion;
 /**
  * 测试使用动画
  * @author Jack(乐智)
  * @blog dtblog.cn
  * @qq 984137183
  */
 public class UseAnimation 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"));
         //将纹理分割成2维数组的坐标
         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(PlayMode.LOOP_PINGPONG);//设置播放模式,
         batch=new SpriteBatch();
         stateTime=0f;
     }

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

     }

     @Override
     public void render() {
         Gdx.gl.glClear(GL20.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 pause() {
         // TODO Auto-generated method stub

     }

     @Override
     public void resume() {

     }

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

     }

 }

原文由博主 乐智 编辑撰写,版权归博主所有。

原文地址 http://www.dtblog.cn/1143.html 转载请注明出处!

【开源java游戏框架libgdx专题】-09-动画的使用的更多相关文章

  1. 【开源java游戏框架libgdx专题】-01-libgdx介绍

    libgdx是一款开源的java游戏框架,而且还实现了Desktop/Android/BlackBerry/iOS/HTML5这些些平台的跨平台开发.官方网址:https://libgdx.badlo ...

  2. 【开源java游戏框架libgdx专题】-05-模块描述与上下文

    模块描述(Modules overview) Input:为所有的平台提供一个统一的输入模型和处理程序. 获取触摸示例: if (Gdx.input.isTouched()) { System.out ...

  3. 【开源java游戏框架libgdx专题】-08-中文显示与绘制

    libgdx虽然是由美国人Mario Zechner(即BadlogicGames)写的开源引擎,由于Libgdx底层是用OpenGL实现的,所以Libgdx是可以支持中文的,在libgdx中的汉字都 ...

  4. 【开源java游戏框架libgdx专题】-11-核心库-演员类

    演员类,又称为Actor类,是libgdx开发中最基本的元素,可以被继承. 演员类,从OpenGL类的角度来理解,可以称为一个二维场景节点.它本身具有位置(postion).边界矩形(类似Retang ...

  5. 【开源java游戏框架libgdx专题】-10-核心库-Viewport

    Viewport类,又称为视口类,主要负责管理游戏相机,处理游戏世界坐标与布景层坐标的换算关系.在移动端开发,不像PC端容易.因为要适配不同分辨率的设备.libgdx处理不同的设备屏幕时,用视口处理舞 ...

  6. 【开源java游戏框架libgdx专题】-07-文件处理

    介绍:文件处理在不同平台的文件管理是略有差异的 Desktop(Windows,Linux,Mac OS X等等):在桌面系统中,文件系统是一个大块的内存.文件可以通过当前的工作目录或者绝对路径被引用 ...

  7. 【开源java游戏框架libgdx专题】-04-接口介绍及生命周期

    在核心项目中包含6大与操作系统交互的接口,每个后端都实现了这6大接口. Application:运行应用程序并通知API的客户端应用程序级别的事件,提供日志记录设施和查询方法,例如,内存使用. Fil ...

  8. 【开源java游戏框架libgdx专题】-14-系统控件-Skin类

    Skin类主要用于存储用户界面的资源,该资源主要用于窗口部件.这些资源也包括纹理图片.位图画笔.颜色等内容.方便创建游戏组件,同时使用Skin也可以批量的粗略处理一些窗口部件. test.json { ...

  9. 【开源java游戏框架libgdx专题】-13-开发工具-地图的使用

    支持libGDX的地图编辑器有很多种,其中比较常用的工具为Tiled地图工具.Tiled是一款非常好用的地图编辑器.下载地址:http://www.mapeditor.org TiledMap类: 又 ...

随机推荐

  1. Vim及VimScript资料总结《转载》

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   Vim教程 入门 Vim 实用技术 Learning the vi and Vim Editors A Byte of ...

  2. 求解:远程方法调用失败Exception from HRESULT: 0x800706BE)

    服务器:Windows Server2003 sp2服务器 客户端:XP SP3 内容:C#Winform客户端调用服务器的Excel模板生成报表的时候,生成失败,抛出的异常如下: TargetInv ...

  3. 专家解读Linux操作系统内核中的GCC特性

    专家解读Linux操作系统内核中的GCC特性   Linux内核使用GNU Compiler Collection (GCC)套件的几个特殊功能.这些功能包括提供快捷方式和简化以及向编译器提供优化提示 ...

  4. [BZOJ 1874] [BeiJing2009 WinterCamp] 取石子游戏 【博弈论 | SG函数】

    题目链接:BZOJ - 1874 题目分析 这个是一种组合游戏,是许多单个SG游戏的和. 就是指,总的游戏由许多单个SG游戏组合而成,每个SG游戏(也就是每一堆石子)之间互不干扰,每次从所有的单个游戏 ...

  5. Java中swap解惑

    直接上代码…… public class Swap { public static void main(String[] args) { int a[] = new int[]{1,2}; Syste ...

  6. 关于判断变量是否为null的顺序问题。

    if("y".equals(other)){ } 其中,other字符串变量可能为Null,可以加一个null判断或者将常量写在前面,变量写在equals后面.如果将变量other ...

  7. PCB板可靠性测试方法择要

    在电子设备中PCB板是所有电子设备的核心,其的可靠性程度会直接影响了产品的耐用性和寿命.因此在我们实验室(上海摩尔实验室)的实际工作中遇到了越来越多的针对PCB板的可靠性的测试要求,现根据一些企业的内 ...

  8. Solution for "De-serialization exception: Unable to find assembly xxxxx"

    public void DeSerialize() { BinaryFormatter formatter = new BinaryFormatter(); AppDomain.CurrentDoma ...

  9. sed的选项与命令简要

    第一部分:sed命令选项 sed选项 说明 -n, --quiet, --silent 静默模式,取消将模式空间中的内容自动打印出来. -e script, --expression=script 以 ...

  10. 《算法问题实战策略》-chaper8-动态规划法

    Q1:偶尔在电视上看到一些被称为“神童”的孩子们背诵小数点以后几万位的圆周率.背诵这么长的数字,可利用分割数字的方法.我们用这种方法将数字按照位数不等的大小分割后再背诵. 分割形式如下: 所有数字都相 ...