package game.test.view;
import game.test.ball.R;
import game.test.service.Movable;
import java.util.ArrayList;
import java.util.Random;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
//游戏图像渲染类。充当View角色
public class BallView extends SurfaceView implements SurfaceHolder.Callback {
public static final int V_MAX = 35; //小球水平速度的最大值
public static final int V_MIN = 15; //小球水平速度的最小值
public static final int WOOD_EDGE = 60; //木板的右边沿的x坐标
public static final int GROUND_LINE = 450; //游戏中代表地面y坐标,小球下落到此会弹起
public static final int UP_ZERO = 30; //小球在上升过程中,如果速度大小小于该值就算为0
public static final int DOWN_ZERO = 60; //小球在撞击地面后,如果速度大小小于该值就算为0
protected Bitmap[] bitmapArray = new Bitmap[6];//各种颜色形状的小球图片引用
protected Bitmap bmpBack;//背景图片对象
protected Bitmap bmpWood;//木板图片对象
protected String fps="FPS:N/A";//用于显示帧速率的字符串,调试使用
protected int ballNumber = 6;//小球数目
protected ArrayList<Movable> alMovable = new ArrayList<Movable>();//小球对象数组
protected DrawThread dt;//后台屏幕绘制线程
public BallView(Context context) {//构造函数通常就是用来初始化的
super(context);
SurfaceHolder holder = this.getHolder();
holder.addCallback(this); //关于SurfaceView的详细说明参见《我的游戏开发经验》
initBitmaps(this.getResources()); //初始化图片
initMovables(); //初始化小球
dt = new DrawThread(this, getHolder()); //初始化重绘线程
}
//初始化小球的方法,以下的处理方法是保证大球的Movable对象在ArrayList列表的前面,在调用的时候先调用出来,就是先把大球画出来,保证大球不会挡到小球。
public void initMovables() {
Random rand = new Random();
for (int i = 0; i < ballNumber; i++) {
int index = rand.nextInt(3); //产生[0,3)的随机整数
Bitmap tempBitmap = null; //声明一个Bitmap图片引用
if (i<ballNumber/2) {
tempBitmap = bitmapArray[3+index];//如果是初始化前一半球,就从大球中随机找一个
} else {
tempBitmap = bitmapArray[index];//如果是初始化后一半球,就从小球中随机找一个
}
Movable m = new Movable(0, 70-tempBitmap.getHeight(), tempBitmap.getWidth()/2, tempBitmap);//创建Movable对象,就是创建小球对象
alMovable.add(m); //将新建的Movable对象添加到ArrayList列表中
}
}
//方法:绘制程序中所需要的图片等信息
public void doDraw(Canvas canvas){
canvas.drawBitmap(bmpBack, 0, 0, null); //绘制背景图片
canvas.drawBitmap(bmpWood, 0, 60, null); //绘制木板图片
for(Movable m : alMovable){ //遍历Movable列表,绘制每个Movable对象,就是绘制小球对象
m.drawSelf(canvas);
}
Paint p = new Paint(); //创建画笔对象
p.setColor(Color.BLUE); //为画笔设置颜色
p.setTextSize(18); //为画笔设置字体大小
p.setAntiAlias(true); //设置抗锯齿,使轮廓更加光滑
canvas.drawText(fps, 30, 30, p); //画出帧速率字符串
}
//初始化图片的方法
public void initBitmaps(Resources r) {
bitmapArray[0] = BitmapFactory.decodeResource(r, R.drawable.ball_red_small); //红色较小球
bitmapArray[1] = BitmapFactory.decodeResource(r, R.drawable.ball_purple_small); //紫色较小球
bitmapArray[2] = BitmapFactory.decodeResource(r, R.drawable.ball_green_small); //绿色较小球
bitmapArray[3] = BitmapFactory.decodeResource(r, R.drawable.ball_red); //红色较大球
bitmapArray[4] = BitmapFactory.decodeResource(r, R.drawable.ball_purple); //紫色较大球
bitmapArray[5] = BitmapFactory.decodeResource(r, R.drawable.ball_green); //绿色较大球
bmpBack = BitmapFactory.decodeResource(r, R.drawable.back);
bmpWood = BitmapFactory.decodeResource(r, R.drawable.wood);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (!dt.isAlive()) {
dt.start(); //如果DrawThread没有启动,就启动它。
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
dt.flag = false; //停止线程的执行
dt = null; //将dt指向的对象声明为垃圾
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
android下写的小球下落的动画
共37个文件
png:11个
class:10个
java:6个
5星 · 超过95%的资源 需积分: 33 135 下载量 106 浏览量
2010-12-28
16:43:31
上传
评论
收藏 212KB RAR 举报
温馨提示
这个资源是我参照《Android2.0游戏开发实战宝典》中的一个例子写的,但是这个例子有些错误,而且有些地方写的让人不太容易懂,针对这点我加以了改进和注释,希望新手能够更容易的理解android下的动画和游戏开发。以后我还会上传一些资料,希望大家多提宝贵意见,谢谢~~~
资源推荐
资源详情
资源评论
收起资源包目录
fall_ball.rar (37个子文件)
fall_ball
AndroidManifest.xml 681B
res
layout
main.xml 382B
drawable-ldpi
icon.png 2KB
drawable-mdpi
ball_green_small.png 2KB
ball_red.png 5KB
ball_purple_small.png 2KB
ball_green.png 5KB
ball_purple.png 5KB
ball_red_small.png 2KB
wood.png 5KB
icon.png 3KB
back.png 27KB
drawable-hdpi
icon.png 4KB
values
strings.xml 178B
proguard.cfg 1KB
src
game
test
view
BallView.java 4KB
DrawThread.java 2KB
engine
BallThread.java 4KB
service
Movable.java 2KB
ball
MainActivity.java 750B
bin
classes.dex 9KB
resources.ap_ 62KB
game
test
view
DrawThread.class 2KB
BallView.class 4KB
engine
BallThread.class 2KB
service
Movable.class 1KB
ball
R.class 465B
MainActivity.class 816B
R$layout.class 382B
R$attr.class 328B
R$string.class 415B
R$drawable.class 664B
fall_ball.apk 69KB
.classpath 280B
assets
default.properties 362B
.project 845B
gen
game
test
ball
R.java 1KB
共 37 条
- 1
Andy韩
- 粉丝: 43
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页