欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

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

一、动画概念

  • 动画的概念不同于一般意义上的动画片,动画是一种综合艺术,它是集合了绘画、漫画、电影、数字媒体、摄影、音乐、文学等众多艺术门类于一身的艺术表现形式。最早发源于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、启动应用,查看效果

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

本文地址:https://blog.csdn.net/howard2005/article/details/108868417

相关标签: 安卓应用开发