`
Lucky_Man
  • 浏览: 27719 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

Android游戏开发之过关动画(基于SurfaceView实现)

阅读更多

   最近在做一个Android小游戏,使用SurfaceView实现,在为游戏加过关动画的时候遇到了麻烦,记录于此,供大家参考。在SurfaceView中,加动画有两种方式,一种是在Canvas上画出图形,然后对图形的位置、大小等参数进行改变来实现动画效果;另一种是使用Animation类。

   对于在SurfaeView上实现第二种方式的动画,有很多值得注意的地方,当然网上有一种将View和SurfaceView同时显示,利用View去实现动画的方法 ,虽然可以,但感觉太麻烦。开始入题:

   首先,提醒大家,在SurfaceView中,只能对整个Canvas播放动画,而不能对某个画出来的图形播放动画;

   其次,要想看到动画效果,必须先为SurfaceView设置背景,setBackgroundXXX(),有三个可用方法,可任意选用,视情况而定

   最后,在播放玩动画后,你会发现原来画的东西看不到了,只能看到背景,这时候要去掉这个背景,调用SurfaceView的setBackgroundResource(0)方法,参数0表示去掉背景。

   来一段实例

private MessageHandler messageHandler;
public GameView(Context context) {
	......
        Looper looper = Looper.getMainLooper();
	messageHandler = new MessageHandler(looper);
        ......
}

//播放过关动画
private void playAnimation() {
		//收缩
		ScaleAnimation mScaleAnimation = new ScaleAnimation(1.0f, 0f,   
				 1.0f, 0f, Animation.RELATIVE_TO_SELF,   
				 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);  
		mScaleAnimation.setDuration(3000);
		
		//旋转
		RotateAnimation mRotateAnimation = new RotateAnimation(0.0f, 1000.0f,   
				Animation.RELATIVE_TO_SELF, 0.5f, 
                                Animation.RELATIVE_TO_SELF, 0.5f);  
		mRotateAnimation.setDuration(3000);
		
		//更新背景必须在主线程中调用,所以使用了MessageHandler
		GameView.this.setBackgroundResource(ResourceUtil.nextLevelImage);
		
		AnimationSet animationSet = new AnimationSet(true);
		animationSet.addAnimation(mRotateAnimation);
		animationSet.addAnimation(mScaleAnimation);
		
		GameView.this.setAnimation(animationSet);
		animationSet.startNow();
		
                //这里使用Timer在动画播放后将背景去掉,注意控制时间
		Timer tempTimer = new Timer();
		tempTimer.schedule(new TimerTask() {
			@Override
			public void run() {
				GameView.this.setBackgroundResource(0);
			}
		}, 3000);
}
class MessageHandler extends Handler {
	public MessageHandler (Looper looper) {
		super(looper);
	}
	@Override
	public void handleMessage(Message msg) {
		if(msg.what == Play_Animation_Message)
			playAnimation();
	}
		
}

   在要播放动画的地方加入以下代码

        Message msg = new Message();
        msg.what = Play_Animation_Message;      //构造Message对象
        messageHandler.sendMessage(msg);        //发送Message,将由MessageHandler来处理

   以下是效果截图:

  

 

   大家有什么更好的方法,欢迎分享交流!

0
5
分享到:
评论

相关推荐

    Android SurfaceView 实现图片缩放 滑动

    在Android开发中,SurfaceView是一种特殊的视图,它允许开发者创建高性能的图形界面,尤其适合处理视频播放或游戏等需要连续刷新的场景。本话题主要探讨如何利用SurfaceView实现图片的缩放和滑动功能。 首先,理解...

    Android SurfaceView实现动画效果

    在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在单独的线程中进行高性能的图形绘制,常用于游戏或者视频播放等需要连续更新显示内容的场景。本篇文章将详细探讨如何利用SurfaceView实现动画效果,...

    android SurfaceView实现人物动画

    在Android开发中,SurfaceView是一种特殊的视图组件,它提供了在UI线程之外进行渲染的能力,使得复杂的动画或视频播放成为可能。在这个“android SurfaceView实现人物动画”的示例程序中,我们将深入探讨如何利用...

    Android SurfaceView实现加载GIF动画

    本篇文章将深入探讨如何使用`SurfaceView`来实现加载GIF动画,这是一个常见的需求,特别是在游戏开发或者需要实时渲染场景的应用中。 首先,我们要理解`SurfaceView`的基本概念。`SurfaceView`是Android系统提供的...

    android之surfaceview游戏开发

    在Android平台上进行游戏开发,SurfaceView是一个至关重要的组件,它为高效、低延迟的图形绘制提供了可能,尤其适合用于创建动态、高性能的游戏画面。本文将深入探讨如何利用SurfaceView进行游戏开发,以及与之相关...

    Android基于SurFaceView的小游戏

    在Android平台上,开发一款基于SurfaceView的小游戏是一个有趣且具有挑战性的任务。SurfaceView是Android系统提供的一种特殊视图,它允许开发者创建高性能、低延迟的图形界面,非常适合用于游戏和视频播放等需要连续...

    Android圆形相机预览窗口,圆形SurfaceView

    在Android开发中,有时我们可能需要创建一个独特的用户体验,比如设计一个圆形的相机预览窗口。这个场景就涉及到了Android的SurfaceView以及如何定制它的显示效果。本文将深入探讨如何实现一个圆形的相机预览窗口。 ...

    Android游戏开发之旅

    2.Android游戏开发之旅二 View和SurfaceView 3.Android游戏开发之旅三 View类详解 4.Android游戏开发之旅四 Canvas和Paint实例 5.Android游戏开发之旅五 Path和Typeface 6.Android游戏开发之旅六 自定义View 7....

    Android SurfaceView 实现实时显示摄像头视频

    在Android开发中,实时显示摄像头视频是一个常见的需求,如创建相机应用、视频聊天或游戏等。`SurfaceView`是Android提供的一种用于高效显示多媒体数据的视图组件,尤其适合处理像视频流这样的实时数据。本篇文章将...

    Android SurfaceView实现人物动画

    在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在应用程序中创建高性能的图形界面,特别是用于实现动画效果,如游戏或者视频播放等。SurfaceView拥有自己的绘图表面,与主线程分离,因此在处理复杂的...

    使用android自带的动画机制很卡时可以考虑使用SurfaceView来实现动画

    在Android应用开发中,我们经常会遇到需要创建流畅的动画效果,但有时使用默认的动画机制(如`ViewPropertyAnimator`、`ObjectAnimator`等)可能会出现性能问题,尤其是在处理大量图形变化或者游戏场景时。...

    Android 通过SurfaceView 实现实时显示摄像头视频

    总之,通过SurfaceView实现实时显示摄像头视频是Android开发中的一个基础任务,涉及到对Android系统相机API的理解和使用,以及对SurfaceView生命周期的掌握。随着技术的发展,开发者可以选择更高级的API,如Camera2...

    Android进阶篇之引导页系列之强大的SurfaceView实现动画引导页(2)

    在这个"Android进阶篇之引导页系列之强大的SurfaceView实现动画引导页(2)"中,我们将深入探讨如何利用SurfaceView来创建动态且引人入胜的引导页动画。 SurfaceView是Android系统提供的一种特殊视图,它允许开发者...

    Android中SurfaceView截屏

    在Android开发中,`SurfaceView`是一个非常重要的视图组件,尤其在处理视频播放、游戏渲染等高性能图形操作时,它的优势在于拥有独立于主线程的渲染机制,能避免阻塞UI更新。然而,由于其特殊的性质,直接通过常规...

    Android应用源码之Android使用SurfaceView实现墨迹天气的风车效果.zip

    在Android应用开发中,SurfaceView是一个非常重要的组件,它提供了在主线程之外进行绘图的能力,使得复杂的动画和游戏能够流畅运行。本压缩包“Android应用源码之Android使用SurfaceView实现墨迹天气的风车效果.zip...

    android SurfaceView游戏框架

    在Android平台上开发游戏时,SurfaceView是一个至关重要的组件,它为高效、低延迟的图形渲染提供了可能。SurfaceView是Android系统提供的一种特殊视图,它有自己的独立绘制表面,与主线程分离,使得游戏或者视频这类...

    Android游戏框架SurfaceView介绍

    在Android平台上开发游戏时,SurfaceView是一个非常重要的组件。它提供了低延迟的显示功能,并且支持双缓冲机制,这对于实时渲染图像非常关键。相比于传统的View组件,SurfaceView在性能上有着显著的优势。 #### 二...

    SurfaceView实现图片缩放,移动加标记

    在Android开发中,`SurfaceView`是一个非常重要的视图组件,尤其适用于处理高性能图形和视频渲染。本项目通过`SurfaceView`实现图片的缩放、移动以及添加标记功能,这在许多应用场景中都非常实用,比如地图应用或者...

    Android游戏开发学习(5)--实现Button悬浮于与SurfaceView之上

    在Android游戏开发中,将一个`Button`控件悬浮于`SurfaceView`之上是一项常见的需求。这通常是为了解决在游戏界面中添加交互元素,如暂停、设置或返回按钮,以便用户可以随时进行操作。本篇文章将深入探讨如何实现这...

    基于android实现SurfaceView播放视频代码.rar

    这个名为"基于android实现SurfaceView播放视频代码.rar"的压缩包提供了实现这一功能的源码参考,对于初学者和经验丰富的开发者来说都是一份宝贵的资源。下面,我们将深入探讨如何利用Android的SurfaceView组件来播放...

Global site tag (gtag.js) - Google Analytics