博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】Android游戏开发:如何实现爆炸效果
阅读量:4980 次
发布时间:2019-06-12

本文共 2600 字,大约阅读时间需要 8 分钟。

 

在做Android游戏MagicBubble开发的时候,在连通两个Bubbles的时候,Bubble会以水泡爆破的情形消

失。笔者的思路是这样的:在FrameLayout里面加入一ImageView,再定义一个爆炸的Animation,不需

要的时候,ImageView就隐藏起来,需要的时候,就把ImageView移动到需要的地方,再StartAnimation,

这样,就可以实现爆炸效果。下面是简化后的程序的代码,程序的效果如下:点中屏幕中任意地方,就在点击

地方显示爆炸效果。

 

首先是Animation的定义,定义一个Frame Animation,依次播放5帧动画,每帧动画持续时间为50毫秒:

<
animation-list
xmlns:android
="http://schemas.android.com/apk/res/android"
android:oneshot
="true"
>
<
item
android:drawable
="@drawable/explode1"
android:duration
="50"
/>
<
item
android:drawable
="@drawable/explode2"
android:duration
="50"
/>
<
item
android:drawable
="@drawable/explode3"
android:duration
="50"
/>
<
item
android:drawable
="@drawable/explode4"
android:duration
="50"
/>
<
item
android:drawable
="@drawable/explode5"
android:duration
="50"
/>
</
animation-list
>
接着是主程序代码:
package
com.ray.bubble;
import
android.app.Activity;
import
android.content.Context;
import
android.graphics.drawable.AnimationDrawable;
import
android.os.Bundle;
import
android.view.MotionEvent;
import
android.view.View;
import
android.view.Window;
import
android.view.WindowManager;
import
android.view.View.OnTouchListener;
import
android.widget.FrameLayout;
import
android.widget.ImageView;
public
class
BubbleExplosion
extends
Activity {
private
FrameLayout fl;
private
ExplosionView exv1;
private
AnimationDrawable exa1;
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
//
set full screen
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,
WindowManager.LayoutParams. FLAG_FULLSCREEN);
fl
=
new
FrameLayout(
this
);
fl.setBackgroundResource(R.drawable.bg);
exv1
=
new
ExplosionView(
this
);
exv1.setVisibility(View.INVISIBLE);
exv1.setBackgroundResource(R.anim.explosion);
exa1
=
(AnimationDrawable)exv1.getBackground();
fl.addView(exv1);
fl.setOnTouchListener(
new
LayoutListener());
setContentView(fl);
}
class
ExplosionView
extends
ImageView{
public
ExplosionView(Context context) {
super
(context);
}
//
处理爆炸的位置
public
void
setLocation(
int
top,
int
left){
this
.setFrame(left, top, left
+
40
, top
+
40
);
}
}
class
LayoutListener
implements
OnTouchListener{
public
boolean
onTouch(View v, MotionEvent event) {
//
首先,你必须停止播放动画,如果动画开始,你不能重复一遍!
exv1.setVisibility(View.INVISIBLE);
exa1.stop();
float
x
=
event.getX();
float
y
=
event.getY();
exv1.setLocation((
int
)y
-
20
, (
int
)x
-
20
);
exv1.setVisibility(View.VISIBLE);
exa1.start();
return
false
;
}
}
}

配合Android的SurfaceView,Animation可以实现很好的过渡效果,SurfaceView的用法很简单。

转载于:https://www.cnblogs.com/xspaceworld/archive/2011/05/01/2033886.html

你可能感兴趣的文章
前端利器躬行记(1)——npm
查看>>
前端利器躬行记(6)——Fiddler
查看>>
Intellij Idea新建web项目(转)
查看>>
用JAVA编写浏览器内核之实现javascript的document对象与内置方法
查看>>
centos iptables
查看>>
寻找二叉查找树中比指定值小的所有节点中最大的那个节点
查看>>
如何设置输入框达到只读效果
查看>>
RT3070 USB WIFI 在连接socket编程过程中问题总结
查看>>
MIS外汇平台荣获“2013年全球最佳STP外汇交易商”
查看>>
LeetCode 题解之Add Digits
查看>>
hdu1502 , Regular Words, dp,高精度加法
查看>>
SpringBoot在idea中的热部署配置
查看>>
MyEclipse连接SQL Server 2008数据库的操作方法
查看>>
JS验证图片格式和大小并预览
查看>>
laravel5.2 移植到新服务器上除了“/”路由 ,其它路由对应的页面显示报404错误(Object not found!)———新装的LAMP没有加载Rewrite模块...
查看>>
编写高质量代码--改善python程序的建议(六)
查看>>
windows xp 中的administrator帐户不在用户登录内怎么解决?
查看>>
接口和抽象类有什么区别
查看>>
Codeforces Round #206 (Div. 2)
查看>>
**p
查看>>