您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 射击游戏 android
  所属分类: Android
  开发工具:
  文件大小: 2mb
  下载次数: 0
  上传时间: 2013-04-15
  提 供 者: hejia******
 详细说明: 可以实现手机射击效果,控制射击方向, public static synchronized GameView sharedGameView(Context context,int level){ if(gameView==null){ gameView = new GameView(context,level); } return gameView; } private GameView(Context context,int level) { super(context); this.context = context; this.level = level; heroBmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.hero); projectileBmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.projectile); targetBmp = BitmapFactory.decodeResource(con text.getResources(), R.drawable.target); Tools.sharedTools(context).playBgSnd(); projectiles = new Vector(); targets = new Vector(); handler = new Handler(){ @Override public void handleMessage(Message msg) { if(over==true){ return; } switch(msg.what){ case kWin: //should be produce target. { overOutpost(true); break; } case kFail: overOutpost(false); break; case kPostInvalidate: invalidate(); break; case kProduceTarget: Random random = new Random(System.currentTimeMillis()); if(getHeight()!=0){ //because before gameView was display,this value is 0 float y = random.nextInt(getHeight()-targetBmp.getHeight()); float speed = Tools.sharedTools(GameView.this.context).getSetting(GameView.this.level).targetSpeed; targets.add(new Target(getWidth(), y,speed)); } break; default: break; } } }; timer = new Timer(true); timer.scheduleAtFixedRate(new TimerTask() { int j=0; int i=0; @Override public void run() { if(over==true){ return; } handler.sendEmptyMessage(kPostInvalidate); i=i+1; j=j+1; Log.d("waj", "i:"+i+Thread.currentThread().getName()+" "+GameView.this.toString()); int a = (int)Math.ceil(Tools.sharedTools(GameView.this.context).getSetting(GameView.this.level).targetDensity*60.0/1000.0); if(j == a){ handler.sendEmptyMessage(kProduceTarget); j=0; } if(i<1800){ for (Target target : targets) { if (target.latestX <= 0) { i=0; j=0; handler.sendEmptyMessage(kFail); break; } } } else{//30 second handler.sendEmptyMessage(kWin); i = 0; j = 0; } } }, 0, (long) (1000.0/60.0)); //flush 60 per second } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); canvas.drawBitmap(heroBmp, 0, getHeight()/2-heroBmp.getHeight()/2, paint); if(over==true){ return; } // remove projectiles which had outof bound of gameView. List destroyedProjectiles = new ArrayList(); for (Projectile projectile : projectiles) { Point p = projectile.nextPoint(); if (p.x > getWidth() | p.x + projectileBmp.getWidth() < 0 | p.y + projectileBmp.getHeight() < 0 | p.y > getHeight()) { destroyedProjectiles.add(projectile); continue; } canvas.drawBitmap(projectileBmp, p.x, p.y, paint); } projectiles.removeAll(destroyedProjectiles); // remove targets which's body had outof left bound of gameView List destroyedTargets = new ArrayList(); for (Target target : targets) { Point p = target.nextPoint(); canvas.drawBitmap(targetBmp, p.x, p.y, paint); } targets.removeAll(destroyedTargets); // crash detect destroyedProjectiles.clear(); destroyedTargets.clear(); for (Projectile projectile : projectiles) { for (Target target : targets) { // 判断是否相交 float x1 = projectile.latestX; float x2 = projectile.latestX + projectileBmp.getWidth(); float y1 = projectile.latestY; float y2 = projectile.latestY + projectileBmp.getHeight(); float x3 = target.latestX; float x4 = target.latestX + targetBmp.getWidth(); float y3 = target.latestY; float y4 = target.latestY + targetBmp.getHeight(); if (x1 < x4 && x2 > x3 && y1 < y4 && y2 > y3) { destroyedProjectiles.add(projectile); destroyedTargets.add(target); } } } projectiles.removeAll(destroyedProjectiles); targets.removeAll(destroyedTargets); } //outpost is over, include win and fail private void overOutpost(boolean isWin) { over = true; projectiles.clear(); targets.clear(); Intent intent = new Intent(context,SecondActivity.class); Activity mainActivity = (MainActivity)context; if(isWin){ intent.putExtra("message","You are winner of "+level+" outpost!"); mainActivity.startActivityForResult(intent,100); } else{ intent.putExtra("message","You failed on the "+level+" outpost"); mainActivity.startActivityForResult(intent,200); } } @Override public boolean onTouchEvent(MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_DOWN){ int count = Tools.sharedTools(context).getSetting(level).projectileNum; for(int i=1;i<=count;i++){ Tools.sharedTools(context).playPewPew(); Projectile projectile = new Projectile(heroBmp.getWidth()/2, getHeight()/2-projectileBmp.getHeight()/2, event.getX(), event.getY(), Tools.sharedTools(context).getSetting(level).projectileSpeed*i); projectiles.add(projectile); } } return super.onTouchEvent(event); } //data area private final int kFail = 1; private final int kWin = 2; private final int kPostInvalidate=3; private final int kProduceTarget=4; private List projectiles; private List targets; private Bitmap heroBmp; private Bitmap projectileBmp; private Bitmap targetBmp; private Context context; private Timer timer; private Handler handler; private int level; //from 1...10 private boolean over=false; private static GameView gameView; void setLevel(int level){ this.level = level; } void stop(){ over = true; } void start(){ over = false; } ...展开收缩
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: 射击 游戏 代码 android
 输入关键字,在本站1000多万海量源码库中尽情搜索: