当前位置: 首页 > news >正文

北师大网页制作与网站建设/武汉新闻最新消息

北师大网页制作与网站建设,武汉新闻最新消息,生物科技网站建设 中企动力北京,财经类 直播类网站开发Android游戏开发基础part6--动画 动画想必大家不陌生了,一些大型游戏,比如《真实赛车》、《极品飞车》、《斯巴达英雄》、《彩虹六号》等等我玩过的大型游戏都有过场动画,很多精彩的特效。这些动画让游戏变得更加生动和震撼。动态的元素在游…

Android游戏开发基础part6--动画

动画想必大家不陌生了,一些大型游戏,比如《真实赛车》、《极品飞车》、《斯巴达英雄》、《彩虹六号》等等我玩过的大型游戏都有过场动画,很多精彩的特效。这些动画让游戏变得更加生动和震撼。动态的元素在游戏是必不可少的,这些动态元素可能是角色的移动、爆炸的效果、过场的特效等等。

针对动画这一块《Android游戏编程之从零开始》介绍得并不多,它主要讲了两种实习方式:

1.系统提供的Animation类特效

2.开发者自行设计的的动画

下面进行学习总结:

Animation动画

在Android中,系统提供了动画类Animation,其中分为四种动画效果:

·AlphaAnimation:透明度渐变动画;

·ScaleAnimation:渐变尺寸缩放动画;

·TraslateAnimation:移动动画;

·RotateAnimation:旋转动画;

4种动画效果具体创建方法:

1.Animation alphaA = new AlphaAnimation(float fromAlpha,float toAlpha)

第一个参数:动画开始时的透明度

第二个参数:动画结束时的透明度

两个参数的取值范围为[0,1],从完全透明到完全不透明

2.Animation scaleA = new ScaleAnimation(float fromX,float formY,float toY,int pivotXType,float pivotXValue,int pivotYType,float pivotYvalue)

第一个参数:动画起始时的X坐标上的伸缩比例

第二个参数:动画结束时的X坐标上的伸缩比例

第三个参数:动画起始时的Y坐标上的伸缩比例

第四个参数:动画结束时的Y坐标上的伸缩比例

第五个参数:动画在X轴相对于物体的位置类型

第六个参数:动画相对于物体X坐标的位置

第七个参数:动画在Y轴相对于物体的位置类型

第八个参数:动画相对于物体Y坐标的位置

位置类型分为三种:

·Animation.ABSOLUTE:相对位置是屏幕的左上角,绝对位置;

·Animation.RELATIVE_TO_LEFT:相对位置是自身View,取值为0时,表示相对于是自身的左上角,取值为1是相对于自上的右下角;

·Animation.RELATIVE_TO_PARENT:相对于父类View的位置

3.Animation translateA = new TranslateAnimation(float fromXDelta,float toXDelta,float fromXDelta,float toYDelta)

第一个参数:动画起始时X轴上的位置

第二个参数:动画结束时X轴上的位置

第三个参数:动画起始时Y轴上的位置

第四个参数:动画结束时Y轴上的位置

4.Animation rotateA = new RotateAnimation(float fromDegrees,float toDegree,int pivotXType,float pivotXValue,int pivotYType,float pivotYValue)

第一个参数:动画起始时的旋转角度

第二个参数:动画旋转到的角度

第三个参数:动画在X轴相对于物体的位置类型

第四个参数:动画相对于物体的X坐标的开始位置

第五个参数:动画在Y轴相对于物体的位置关系

第六个参数:动画相对于物体的Y坐标的开始位置

以上四种创建方法就是四种不同动画效果的创建方法,虽然他们的创建方法不同,但是还是用一些通用的方法:

·restart():重新播放动画

·setDuration:设置动画播放时间,单位是毫秒

创建项目:AnimationProject

项目运行效果:

初始化效果:

==>透明渐变效果:

==>缩放动画效果:

==>位移动画效果:

==>旋转动画效果:

项目源代码:

==>Animation.java

package com.animation;import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;public class Animation extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//隐去标题栏this.requestWindowFeature(Window.FEATURE_NO_TITLE);//隐去状态栏部分this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(new MyView(this));}
}

==>MyView.java

package com.animation;import com.animation.R;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;public class MyView extends View implements AnimationListener{public static MyView mv;private Paint paint;private Bitmap bmp;private int x = 50;private Animation mAlphaAnimation;private Animation mScaleAnimation;private Animation mTranslateAnimation;private Animation mRotateAnimation;/*** 重写父类构造函数*/public MyView(Context context){super(context);mv = this;paint = new Paint();paint.setColor(Color.WHITE);paint.setAntiAlias(true);bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_launcher);this.setFocusable(true);}/*** 重写父类绘图函数* */@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);//黑色背景canvas.drawColor(Color.BLACK);canvas.drawText("方向键↑渐变透明动画效果", 80, this.getHeight() - 80, paint);canvas.drawText("方向键↓渐变尺寸伸缩动画效果",80,this.getHeight() - 60,paint);canvas.drawText("方向键←画面转换位置移动动画效果",80,this.getHeight() - 40,paint);canvas.drawText("方向键→画面转移旋转动画效果", 80, this.getHeight() - 20, paint);//绘制位图canvas.drawBitmap(bmp, this.getWidth() / 2 - bmp.getWidth()/ 2, this.getHeight() / 2 - bmp.getHeight() /2, paint);x += 1;}/*** 重写按键按下事件监听函数*/@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubif(keyCode == KeyEvent.KEYCODE_DPAD_UP){mAlphaAnimation = new AlphaAnimation(0.1f,1.0f);mAlphaAnimation.setAnimationListener(this);mAlphaAnimation.setDuration(3000);//设置时间持续时间为3000毫秒this.startAnimation(mAlphaAnimation);}else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){mScaleAnimation = new ScaleAnimation(0.0f, 2.0f, 1.5f, 1.5f, Animation.RELATIVE_TO_PARENT, 0.5f,Animation.RELATIVE_TO_PARENT, 0.0f);mScaleAnimation.setAnimationListener(this);mScaleAnimation.setDuration(2000);this.startAnimation(mScaleAnimation);}else if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT){mTranslateAnimation = new TranslateAnimation(0, 100, 0, 100);mTranslateAnimation.setAnimationListener(this);mTranslateAnimation.setDuration(2000);this.startAnimation(mTranslateAnimation);}else if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){mRotateAnimation = new RotateAnimation(0.0f,360.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);mRotateAnimation.setAnimationListener(this);mRotateAnimation.setDuration(3000);this.startAnimation(mRotateAnimation);}return super.onKeyDown(keyCode, event);}/*** 重写按键抬起事件函数*/@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {// TODO Auto-generated method stubreturn super.onKeyUp(keyCode, event);}/*** 重写触屏事件监听函数*/@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stubreturn super.onTouchEvent(event);}@Overridepublic void onAnimationStart(Animation animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationEnd(Animation animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationRepeat(Animation animation) {// TODO Auto-generated method stub}
}



系统的四种动画效果就这样完了,下面是自定义动画类型:

1.动态位图

2.帧动画

3.剪切图动画

概念总结:

动态位图:顾名思义,会动的位图,只要不断改变位图的坐标,实现位图的移动,产生动态效果就行啦

帧动画:学过flash的童鞋肯定知道帧动画,所谓帧动画就是一帧一帧按照一定顺序进行播放实现,实现方法也很简单,定义一个位图数组存放全部帧,在绘图函数中不断绘图就行了

剪切画动画:是游戏开发中最常用的实现方式,类似于帧动画,唯一区别在于动态物体的动作帧全部放在同一张图片中,然后在通过设置可视区域完成。

分别创建三个项目实现它们,具体的代码不再粘帖,有兴趣的请参考《Andriod游戏编程之从零开始》

http://www.lbrq.cn/news/2034001.html

相关文章:

  • 网站空间管理站/百度资源搜索引擎
  • 北京市住房和城乡建设委员会/网站优化推广方案
  • 西宁城东区建设局公租房网站/百度2020新版下载
  • 台州网站开发/推广app平台
  • 网站开发所需的知识/免费网站统计
  • 淮北做网站电话/产品营销策划
  • 建设网站的基本流程是什么/免费行情软件app网站下载大全
  • dreamweaver下载官网/百度关键字优化价格
  • 陕西省建设工程造价管理协会网站/seo需要掌握什么技能
  • 云海建设工程有限公司网站/杭州网站seo推广软件
  • 唐山做企业网站的公司/百度广告屏蔽
  • 网站项目建设策划方案/上海企业推广
  • 抖音电商/东莞整站优化排名
  • 乌鲁木齐做企业网站/推广普通话手抄报模板
  • wps怎么做网站/吸引人气的营销方案
  • 巫溪县城乡建设委员会网站/国外域名注册平台
  • 城乡建设局网站/预防电信网络诈骗
  • 做网站被骗预付款怎么办/自己做网站的流程
  • 建个视频网站多少钱/天津百度seo代理
  • 儿童主题网站的内容建设/深圳推广公司有哪些
  • 建设网站收取广告费用/8大营销工具
  • 两学一做夜校网站/谷歌 翻墙入口
  • 在线设计工具的网站怎么做/河南网站推广电话
  • 做网站推广需要什么专业/手机系统优化工具
  • 厦门网站建设114/十大看免费行情的软件下载
  • 网站开发 会费管理 模块/上海网站搜索引擎优化
  • seo专员是什么职业/惠州seo公司
  • 请解释网站开发的主要流程/徐州seo
  • vs做网站各种控件的使用/百家号官网
  • 网站可信/郑州seo优化外包顾问阿亮
  • 项目流程管理系统使用建议:推荐13款
  • vscode连接不上云服务解决
  • RAG实战指南 Day 16:向量数据库类型与选择指南
  • 职业院校网络安全攻防对抗实训室解决方案
  • 《亿级流量系统架构设计与实战》通用高并发架构设计 读场景
  • 云原生核心技术解析:Docker vs Kubernetes vs Docker Compose