当前位置:首页 > 手机壁纸
public SingleBall(int x,int y,int size,int direction,Bitmap bitmap,int xSpan,int ySpan)//构造器 {
this.x=x;//初始化坐标位置 this.y=y;
this.size=size;//初始化球的尺寸
this.bitmap=bitmap;//初始化球的位图 this.direction=direction;//球的运动方向 this.xSpan=xSpan;//初始化x方向的步进 this.ySpan=ySpan;//初始化y方向的步进 }
void drawSelf(Canvas canvas, Paint paint) //绘制单个球的方法 {
canvas.drawBitmap(bitmap, x,y, paint); }
void go()//单个球运动的方法 {
int tempX,tempY;//球的目标位置 switch(direction) {
case DIRECTION_YS://如果在向右上方运动 tempX=x+xSpan;//计算目标位置坐标 tempY=y-ySpan;
if(isCollideWithRight(tempX,tempY))//到达屏幕右侧 {
direction=DIRECTION_ZS;//改变运动方向为左上 }
else if(isCollideWithUp(tempX,tempY))//到达屏幕上侧 {
direction=DIRECTION_YX;//改变运动方向为右下 }
else//如果没有碰撞 {
x=tempX;//更新坐标位置 y=tempY; } break;
case DIRECTION_ZS://如果在向左上方运动 tempX=x-xSpan;//计算目标位置坐标 tempY=y-ySpan;
if(isCollideWithLeft(tempX,tempY))//到达屏幕左侧 {
direction=DIRECTION_YS;//改变运动方向为右上 }
else if(isCollideWithUp(tempX,tempY))//到达屏幕上侧
{
direction=DIRECTION_ZX;//改变运动方向为左下 }
else//如果没有碰撞 {
x=tempX;//更新坐标位置 y=tempY; } break;
case DIRECTION_ZX://如果在向左下方运动 tempX=x-xSpan;//计算目标位置坐标 tempY=y+ySpan;
if(isCollideWithLeft(tempX,tempY))//到达屏幕左侧 {
direction=DIRECTION_YX;//改变运动方向为右下 }
else if(isCollideWithDown(tempX,tempY))//到达屏幕下侧 {
direction=DIRECTION_ZS;//改变运动方向为左上 }
else//如果没有碰撞 {
x=tempX;//更新坐标位置 y=tempY; } break;
case DIRECTION_YX://如果在向右下方运动 tempX=x+xSpan;//计算目标位置坐标 tempY=y+ySpan;
if(isCollideWithRight(tempX,tempY))//到达屏幕右侧 {
direction=DIRECTION_ZX;//改变运动方向为左下 }
else if(isCollideWithDown(tempX,tempY))//到达屏幕下侧 {
direction=DIRECTION_YS;//改变运动方向为右上 }
else//如果没有碰撞 {
x=tempX;//更新坐标位置 y=tempY; } break; }
}
boolean isCollideWithRight(int tempX,int tempY)//判断是否与屏右侧碰撞的方法 {
return !(tempX>0&&tempX boolean isCollideWithUp(int tempX,int tempY)//判断是否与屏上侧碰撞的方法 { return !(tempY>0); } boolean isCollideWithLeft(int tempX,int tempY)//判断是否与屏左侧碰撞的方法 { return !(tempX>0); } boolean isCollideWithDown(int tempX,int tempY)//判断是否与屏下侧碰撞的方法 { return !(tempY>0&&tempY package com.bn.ex12f; /* * 控制所有球的类 */ import java.util.ArrayList; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; public class AllBalls { ArrayList int[] ballsXSpan;//球x方向步进数组 int[] ballsYSpan;//球y方向步进数组 public AllBalls(int[] ballsSize,Bitmap[] ballsBitmap,int[] ballsXSpan,int[] ballsYSpan)//构造器 { this.ballsSize=ballsSize;//成员变量赋值 this.ballsBitmap=ballsBitmap;//成员变量赋值 this.ballsXSpan=ballsXSpan;//成员变量赋值 this.ballsYSpan=ballsYSpan;//成员变量赋值 for(int i=0;i int x=(int) (Math.random()*(Constant.SCREEN_WIDTH-ballsSize[i]));//随机生成单个球的初始位置 int y=(int) (Math.random()*(Constant.SCREEN_HEIGHT-ballsSize[i])); int direction=(int) Math.random()*4;//随机生成单个球的运动方向 alSingleBall.add//创建单个球对象,并加入列表 ( new SingleBall(x,y,ballsSize[i],direction,ballsBitmap[i],ballsXSpan[i],ballsYSpan[i]) ); } } public void drawSelf(Canvas canvas, Paint paint)//绘制所有球的方法 { for(SingleBall sb:alSingleBall)//循环单个球列表 { sb.drawSelf(canvas, paint);//绘制单个球 } } public void go()//使所有球运动的方法 { for(SingleBall sb:alSingleBall)//循环单个球列表 { sb.go();//使单个球运动 } } } package com.bn.ex12f; /* * 控制所有球运动的线程 */ public class BallGoThread extends Thread { AllBalls allBalls;//声明AllBalls的引用 public BallGoThread(AllBalls allBalls)//构造器 { this.allBalls=allBalls;//成员变量赋值 } boolean ballGoFlag=true;//循环标志位 @Override public void run()//重写run方法 { while(ballGoFlag)//while循环 { allBalls.go();//调用使所有球运动的方法 try { Thread.sleep(Constant.MOVE_TIME);//一段时间后再运动 } catch(Exception e) } } } { e.printStackTrace();//打印异常 }
共分享92篇相关文档