【Android 游戏开发】-- 仿捕鱼达人 //处理各个SurfaceView发送的消息 Handler myHandler = new Handler(){ public void handleMessage(Message msg) { switch(msg.what) { case GameMessage.MAINMENU_VIEW: //gotoMainMenuView(); break; case GameMessage.GAME_VIEW: gotoGameView(); break; } } } 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 游戏主界面类public class GameView extends SurfaceView implements SurfaceHolder.Callback{ MainActivity activity; Paint paint; //线程引用 GameViewThread gameViewThread;//游戏界面刷新主线程 CreatFishThread creatFishThread;////产生金鱼的线程 //位图引用 Bitmap bgBitmap; Bitmap topBoxBitmap; Bitmap bottomBoxBitmap; Bitmap btnJianBitmap; Bitmap btnJiaBitmap; Bitmap btnZTBitmap; Bitmap btnJieTu; Bitmap btnJinyu; Bitmap btnNLBitmap; Bitmap[] btn20Bitmap; Bitmap[] btnSunBitmap; Bitmap[] btnMRYBitmap; Bitmap[] btnBXBitmap; Bitmap cannonBitmap;//大炮位图 Bitmap bulletBitmap;//子弹位图 public Bitmap goldfishBitmap;//金鱼位图 //列表引用 public List<Goldfish> allGoldfish;//所有金鱼 public List<TipText> allTipText;//所有提示文本 //对象引用 Cannon cannon;//大炮对象 public Bullet bullet=null;//子弹对象 //状态值 public float angle=(float) (Math.PI/6);//炮筒仰角 //声音相关变量 public GameView(MainActivity activity) { super(activity); this.activity=activity; //获得焦点并设置为可触控 this.requestFocus(); this.setFocusableInTouchMode(true); //注册回调接口 getHolder().addCallback(this); } public void onDraw(Canvas canvas) { super.onDraw(canvas); try{ int w=Constant.SCREEN_W; int h=Constant.SCREEN_H; Rect rect=new Rect(0, 0, w, h); canvas.drawBitmap(bgBitmap, null, rect, paint); //绘制子弹 if(bullet!=null){ bullet.drawMe(canvas, paint); } //绘制金鱼 List<Goldfish> allGoldfish1=new Vector<Goldfish>(allGoldfish);//复制目标列表 for(Goldfish g : allGoldfish1){ g.drawMe(canvas, paint); } //绘制UI canvas.drawBitmap(topBoxBitmap, (w-317)/2, 0 , paint); canvas.drawBitmap(bottomBoxBitmap, 0, h-85, paint); canvas.drawBitmap(btnJianBitmap, 182, h-27, paint); canvas.drawBitmap(btnJiaBitmap, 260, h-27, paint); canvas.drawBitmap(btnZTBitmap, null, new Rect(10,0,50,40), paint); canvas.drawBitmap(btnJieTu, 400, 2, paint); canvas.drawBitmap(btnJinyu, 440, 2, paint); canvas.drawBitmap(btnNLBitmap,null, new Rect(305,290,305+30,290+30), paint); canvas.drawBitmap(btn20Bitmap[0],null, new Rect(350,290,350+30,290+30), paint); canvas.drawBitmap(btnSunBitmap[0],null, new Rect(382,290,382+30,290+30), paint); canvas.drawBitmap(btnMRYBitmap[0],null, new Rect(414,290,414+30,290+30), paint); canvas.drawBitmap(btnBXBitmap[0],null, new Rect(446,290,446+30,290+30), paint); canvas.drawText("渔夫", 155, 16, paint); canvas.drawText("1", 237, 16, paint); //绘制大炮 cannon.drawMe(canvas, paint); //绘制提示文字 List<TipText> allTipScore=new Vector<TipText>(allTipText);//复制提示文字列表 for(TipText t : allTipScore){ t.drawMe(canvas, paint); } } catch(Exception e){ e.printStackTrace(); } } @Override public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); switch(event.getAction()){ case MotionEvent.ACTION_DOWN: //计算炮筒仰角 angle=cannon.calcuateAngle(x, y); break; case MotionEvent.ACTION_MOVE: //计算炮筒仰角 angle=cannon.calcuateAngle(x, y); break; case MotionEvent.ACTION_UP: //创建一个子弹并发射 bullet=cannon.creatAndSendBullet(); break; } return true; } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } public void surfaceCreated(SurfaceHolder holder){ paint=new Paint();//创建画笔 paint.setAntiAlias(true);//打开抗锯齿 initBitmap();//初始化位图资源 initSounds();//初始化声音资源 cannon=new Cannon(this,cannonBitmap, bulletBitmap);//创建大炮对象 allGoldfish=new Vector<Goldfish>();//创建金鱼列表 allTipText=new Vector<TipText>();//创建提示分数列表 createAllThreads();//创建所有线程 startAllThreads();//开始所有线程 } public void surfaceDestroyed(SurfaceHolder holder) { } //将图片加载 public void initBitmap(){ bgBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.bj01); topBoxBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.top_box); bottomBoxBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.bottom_box); btnJianBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.btn_jian_hv); btnJiaBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.btn_jia); cannonBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.cannon10_1); bulletBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.bullet_test); goldfishBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.fish_goldfish); btnZTBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.btn_zt); btnJieTu=BitmapFactory.decodeResource(getResources(), R.drawable.btn_jietu); btnJinyu=BitmapFactory.decodeResource(getResources(), R.drawable.btn_jy); btnNLBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.btn_nl); btn20Bitmap=new Bitmap[]{ BitmapFactory.decodeResource(getResources(), R.drawable.icon_201), BitmapFactory.decodeResource(getResources(), R.drawable.icon_202)}; btnSunBitmap=new Bitmap[]{ BitmapFactory.decodeResource(getResources(), R.drawable.icon_sun1), BitmapFactory.decodeResource(getResources(), R.drawable.icon_sun2)}; btnMRYBitmap=new Bitmap[]{ BitmapFactory.decodeResource(getResources(), R.drawable.icon_mry1), BitmapFactory.decodeResource(getResources(), R.drawable.icon_mry2)}; btnBXBitmap=new Bitmap[]{ BitmapFactory.decodeResource(getResources(), R.drawable.icon_bx1), BitmapFactory.decodeResource(getResources(), R.drawable.icon_bx2)}; } //初始化声音的方法 public void initSounds(){ } //播放声音的方法 public void playSound(int sound, int loop) { } //结束游戏的方法 public void overGame(){ } void createAllThreads(){ gameViewThread=new GameViewThread(this); creatFishThread=new CreatFishThread(this); } void startAllThreads(){ gameViewThread.setFlag(true); creatFishThread.setFlag(true); gameViewThread.start(); creatFishThread.start(); } void stopAllThreads(){ gameViewThread.setFlag(false); creatFishThread.setFlag(false); } } 关于android客户端与服务器端的通信 请教?在android中处理键盘事件是怎么实现的 关于SQLite的问题 android 电量使用列表中显示的总和超过100% 求助:如何监听AlertDialog里面的listView XML的注释语法是啥? log日志的显示问题 eclipse可以改变avd的存放目录么 出现Service错误 ,新手求解答 the application has stopped unexpectedly 关于音乐播放器中service的使用方法 关于Andriod的一个小小的逻辑问题
MainActivity activity;
Paint paint;
//线程引用
GameViewThread gameViewThread;//游戏界面刷新主线程
CreatFishThread creatFishThread;////产生金鱼的线程
//位图引用
Bitmap bgBitmap;
Bitmap topBoxBitmap;
Bitmap bottomBoxBitmap;
Bitmap btnJianBitmap;
Bitmap btnJiaBitmap;
Bitmap btnZTBitmap;
Bitmap btnJieTu;
Bitmap btnJinyu;
Bitmap btnNLBitmap;
Bitmap[] btn20Bitmap;
Bitmap[] btnSunBitmap;
Bitmap[] btnMRYBitmap;
Bitmap[] btnBXBitmap;
Bitmap cannonBitmap;//大炮位图
Bitmap bulletBitmap;//子弹位图
public Bitmap goldfishBitmap;//金鱼位图
//列表引用
public List<Goldfish> allGoldfish;//所有金鱼
public List<TipText> allTipText;//所有提示文本
//对象引用
Cannon cannon;//大炮对象
public Bullet bullet=null;//子弹对象
//状态值
public float angle=(float) (Math.PI/6);//炮筒仰角
//声音相关变量
public GameView(MainActivity activity) {
super(activity);
this.activity=activity;
//获得焦点并设置为可触控
this.requestFocus();
this.setFocusableInTouchMode(true);
//注册回调接口
getHolder().addCallback(this);
} public void onDraw(Canvas canvas) {
super.onDraw(canvas);
try{
int w=Constant.SCREEN_W;
int h=Constant.SCREEN_H;
Rect rect=new Rect(0, 0, w, h);
canvas.drawBitmap(bgBitmap, null, rect, paint);
//绘制子弹
if(bullet!=null){
bullet.drawMe(canvas, paint);
}
//绘制金鱼
List<Goldfish> allGoldfish1=new Vector<Goldfish>(allGoldfish);//复制目标列表
for(Goldfish g : allGoldfish1){
g.drawMe(canvas, paint);
}
//绘制UI
canvas.drawBitmap(topBoxBitmap, (w-317)/2, 0 , paint);
canvas.drawBitmap(bottomBoxBitmap, 0, h-85, paint);
canvas.drawBitmap(btnJianBitmap, 182, h-27, paint);
canvas.drawBitmap(btnJiaBitmap, 260, h-27, paint);
canvas.drawBitmap(btnZTBitmap, null, new Rect(10,0,50,40), paint);
canvas.drawBitmap(btnJieTu, 400, 2, paint);
canvas.drawBitmap(btnJinyu, 440, 2, paint);
canvas.drawBitmap(btnNLBitmap,null, new Rect(305,290,305+30,290+30), paint);
canvas.drawBitmap(btn20Bitmap[0],null, new Rect(350,290,350+30,290+30), paint);
canvas.drawBitmap(btnSunBitmap[0],null, new Rect(382,290,382+30,290+30), paint);
canvas.drawBitmap(btnMRYBitmap[0],null, new Rect(414,290,414+30,290+30), paint);
canvas.drawBitmap(btnBXBitmap[0],null, new Rect(446,290,446+30,290+30), paint);
canvas.drawText("渔夫", 155, 16, paint);
canvas.drawText("1", 237, 16, paint);
//绘制大炮
cannon.drawMe(canvas, paint);
//绘制提示文字
List<TipText> allTipScore=new Vector<TipText>(allTipText);//复制提示文字列表
for(TipText t : allTipScore){
t.drawMe(canvas, paint);
}
}
catch(Exception e){
e.printStackTrace();
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
//计算炮筒仰角
angle=cannon.calcuateAngle(x, y);
break;
case MotionEvent.ACTION_MOVE:
//计算炮筒仰角
angle=cannon.calcuateAngle(x, y);
break;
case MotionEvent.ACTION_UP:
//创建一个子弹并发射
bullet=cannon.creatAndSendBullet();
break;
}
return true;
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
} public void surfaceCreated(SurfaceHolder holder){
paint=new Paint();//创建画笔
paint.setAntiAlias(true);//打开抗锯齿
initBitmap();//初始化位图资源
initSounds();//初始化声音资源
cannon=new Cannon(this,cannonBitmap, bulletBitmap);//创建大炮对象
allGoldfish=new Vector<Goldfish>();//创建金鱼列表
allTipText=new Vector<TipText>();//创建提示分数列表
createAllThreads();//创建所有线程
startAllThreads();//开始所有线程
}
public void surfaceDestroyed(SurfaceHolder holder) { }
//将图片加载
public void initBitmap(){
bgBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.bj01);
topBoxBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.top_box);
bottomBoxBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.bottom_box);
btnJianBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.btn_jian_hv);
btnJiaBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.btn_jia);
cannonBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.cannon10_1);
bulletBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.bullet_test);
goldfishBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.fish_goldfish);
btnZTBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.btn_zt);
btnJieTu=BitmapFactory.decodeResource(getResources(), R.drawable.btn_jietu);
btnJinyu=BitmapFactory.decodeResource(getResources(), R.drawable.btn_jy);
btnNLBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.btn_nl);
btn20Bitmap=new Bitmap[]{
BitmapFactory.decodeResource(getResources(), R.drawable.icon_201),
BitmapFactory.decodeResource(getResources(), R.drawable.icon_202)};
btnSunBitmap=new Bitmap[]{
BitmapFactory.decodeResource(getResources(), R.drawable.icon_sun1),
BitmapFactory.decodeResource(getResources(), R.drawable.icon_sun2)};
btnMRYBitmap=new Bitmap[]{
BitmapFactory.decodeResource(getResources(), R.drawable.icon_mry1),
BitmapFactory.decodeResource(getResources(), R.drawable.icon_mry2)};
btnBXBitmap=new Bitmap[]{
BitmapFactory.decodeResource(getResources(), R.drawable.icon_bx1),
BitmapFactory.decodeResource(getResources(), R.drawable.icon_bx2)};
}
//初始化声音的方法
public void initSounds(){ }
//播放声音的方法
public void playSound(int sound, int loop) { }
//结束游戏的方法
public void overGame(){
}
void createAllThreads(){
gameViewThread=new GameViewThread(this);
creatFishThread=new CreatFishThread(this);
}
void startAllThreads(){
gameViewThread.setFlag(true);
creatFishThread.setFlag(true);
gameViewThread.start();
creatFishThread.start();
}
void stopAllThreads(){
gameViewThread.setFlag(false);
creatFishThread.setFlag(false);
}
}