安卓案例:利用帧动画实现游戏特效

   日期:2020-10-01     浏览:124    评论:0    
核心提示:文章目录一、运行效果二、涉及知识点三、实现步骤1、创建安卓应用【GameSpecialEffect】2、将逐帧动画素材拷贝到drawable目录里3、主布局资源文件acitivity_main.xml4、字符串资源文件strings.xml5、主界面类MainActivity(1)声明变量(2)通过资源标识获得控件实例(3)初始化图像标识数组(4)创建消息处理器(5)创建开始按钮单击事件处理方法(6)创建停止按钮单击事件处理方法6、启动应用,查看效果上一个安卓案例【动态显示时间】,利用线程(Thread)

文章目录

  • 一、动画概念
  • 二、逐帧动画
  • 三、运行效果
  • 四、涉及知识点
  • 五、游戏特效案例实现思路
  • 六、实现步骤
    • 1、创建安卓应用【GameSpecialEffect】
    • 2、将逐帧动画素材拷贝到drawable目录里
    • 3、主布局资源文件acitivity_main.xml
    • 4、字符串资源文件strings.xml
    • 5、主界面类MainActivity
      • (1)声明变量
      • (2)通过资源标识获得控件实例
      • (3)初始化图像标识数组
      • (4)创建消息处理器
      • (5)创建开始按钮单击事件处理方法
      • (6)创建停止按钮单击事件处理方法
    • 6、启动应用,查看效果

一、动画概念

  • 动画的概念不同于一般意义上的动画片,动画是一种综合艺术,它是集合了绘画、漫画、电影、数字媒体、摄影、音乐、文学等众多艺术门类于一身的艺术表现形式。最早发源于19世纪上半叶的英国,兴盛于美国,中国动画起源于20世纪20年代。1892年10月28日埃米尔·雷诺首次在巴黎著名的葛莱凡蜡像馆向观众放映光学影戏,标志着动画的正式诞生,同时埃米尔·雷诺也被誉为“动画之父”。
  • 动画的英文有很多表述,如animation、cartoon、animated cartoon、cameracature。其中较正式的 “Animation” 一词源自于拉丁文字根anima,意思为“灵魂”,动词animate是“赋予生命”的意思,引申为使某物活起来的意思。所以动画可以定义为使用绘画的手法,创造生命运动的艺术。

二、逐帧动画

  • 逐帧动画(Frame-by-Frame Animation)是一种常见的动画形式,其原理是在“连续关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。 因为逐帧动画的帧序列内容不一样,不但给制作增加了负担,而且最终输出的文件量也很大,但它的优势也很明显,逐帧动画具有非常大的灵活性,几乎可以表现任何想表现的内容,而它类似与电影的播放模式,很适合于表演细腻的动画。例如人物或动物急剧转身、 头发及衣服的飘动、走路、说话以及精致的3D效果等等。
  • 逐帧动画有多种实现方式:利用动画资源文件实现、利用Thread和Handler来实现、利用Timer和Handler来实现。上一个安卓案例【动态显示时间】,利用线程(Thread)和消息处理器(Handler)实现帧动画,本次案例,我们学习如何利用定时器(Timer)和消息处理器(Handler)实现帧动画。

三、运行效果

四、涉及知识点

  1. 线性布局(LinearLayout)
  2. 图像视图(ImageView)
  3. 按钮(Button)
  4. 定时器(Timer)
  5. 定时器任务(TimerTask)
  6. 消息处理器(Handler)

五、游戏特效案例实现思路

  • 逐帧动画,其实就要定时切换图片,定时操作可以利用定时器(Timer)来完成,切换图片就需要事先将所有图片的资源标识保存到一个数组里(这也是一个难点,尤其当图片数量比较大时),通过改变图片资源标识数组的当前索引达到切换图片的目的。但是,从安卓4.0版本以后,出于安全考虑,子线程不能直接更新主界面元素。怎么办呢?这就需要一种能沟通主线程和子线程的机制,而消息处理器Handler正是这样一种机制,实现不同线程间的通信。在子线程里,定时更新图片当前索引,然后通过handler的sendEmptyMessage方法将更新后的图片当前索引发送到主线程,最后,在主线程里,通过handler的handleMessage方法获取子线程发送过来的图片当前索引,利用这个索引获取当前图片的资源标识,作为参数传给图像控件的setImageRource方法,就达到更新图片的目的。

六、实现步骤

1、创建安卓应用【GameSpecialEffect】


2、将逐帧动画素材拷贝到drawable目录里


图片素材下载链接:https://pan.baidu.com/s/1FvyJ2_dB7F4inGftnIZ5mQ 提取码:ti7v

3、主布局资源文件acitivity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000000" android:gravity="center" android:orientation="vertical" tools:context="net.hw.game_special_effect.MainActivity">

    <ImageView android:id="@+id/ivBomb" android:layout_width="250dp" android:layout_height="250dp" android:src="@drawable/img1" />

    <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal">

        <Button android:id="@+id/btnStart" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_marginRight="30dp" android:background="#cccccc" android:onClick="doStart" android:text="@string/start" android:textSize="25sp" />

        <Button android:id="@+id/btnStop" android:layout_width="100dp" android:layout_height="wrap_content" android:background="#cccccc" android:onClick="doStop" android:text="@string/stop" android:textSize="25sp" />
    </LinearLayout>
</LinearLayout>

4、字符串资源文件strings.xml

<resources>
    <string name="app_name">帧动画:游戏特效</string>
    <string name="start">开始</string>
    <string name="stop">停止</string>
</resources>

5、主界面类MainActivity

(1)声明变量

(2)通过资源标识获得控件实例

(3)初始化图像标识数组

(4)创建消息处理器

  • 创建消息处理器,处理从定时器任务里发送过来的消息,更新主界面元素

(5)创建开始按钮单击事件处理方法

(6)创建停止按钮单击事件处理方法

6、启动应用,查看效果

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服