圆形碰撞:主要是利用两圆形的圆心距进行判定的;当两圆的圆心距小于两圆半径之和,判定发生了碰撞。
创建实例:CircleCollsoin

项目效果图:

MySurfaceView.java


  1. 2.package com.circleCollsion;3.import android.content.Context;4.import android.graphics.Canvas;5.import android.graphics.Color;6.import android.graphics.Paint;7.import android.view.KeyEvent;8.import android.view.MotionEvent;9.import android.view.SurfaceHolder;10.import android.view.SurfaceHolder.Callback;11.import android.view.SurfaceView;12.public class MySurfaceView extends SurfaceView implements Callback,Runnable{13.//用于控制SurfaceView14.private SurfaceHolder sfh;15.//声明一个画笔16.private Paint paint;17.//声明一个线程18.private Thread th;19.//线程消亡的标志位20.private boolean flag;21.//声明一个画布22.private Canvas canvas;23.//声明屏幕的宽高24.private int screenW,screenH;25.//定义两个圆的半径和坐标26.private int r1 = 20, r2 = 20;27.private int x1 = 50, y1 = 100, x2 = 150, y2 = 100;28.//便于观察是否发生碰撞设置一个标识位29.private boolean isCollsion;30.31./**32.  * SurfaceView初始化函数33.  */34.public MySurfaceView(Context context){35.  super(context);36.  //实例SurfaceHolder37.  sfh = this.getHolder();38.  //为SurfaceView添加状态监听39.  sfh.addCallback(this);40.  //实例一个画笔41.  paint = new Paint();42.  //设置画笔颜色为白色43.  paint.setColor(Color.WHITE);44.  //设置焦点45.  setFocusable(true);46.}47.@Override48.public void surfaceCreated(SurfaceHolder holder) {49.  // TODO Auto-generated method stub50.  screenW = this.getWidth();51.  screenH = this.getHeight();52.  flag = true;53.  //实例线程54.  th = new Thread(this);55.  //启动线程56.  th.start();57.}58.59.60./**61.  * 游戏绘图62.  */63.public void myDraw(){64.  try {65.   canvas = sfh.lockCanvas();66.   if(canvas != null){67.    //刷屏68.    canvas.drawColor(Color.BLACK);69.    //判断是否发生了碰撞70.    if(isCollsion){//发生碰撞71.     paint.setColor(Color.RED);72.     paint.setTextSize(20);73.     canvas.drawText("Collision!", 0, 30, paint);74.     75.    } else{//没发生碰撞76.     paint.setColor(Color.WHITE);77.    }78.    //绘制两个圆79.    canvas.drawCircle(x1, y1, r1, paint);80.    canvas.drawCircle(x2, y2, r2, paint);81.   }82.  }catch(Exception e){83.   84.  }finally{85.   if(canvas != null)86.    sfh.unlockCanvasAndPost(canvas);87.  }88.}89./**90.  * 触屏事件监听91.  */92.@Override93.public boolean onTouchEvent(MotionEvent event) {94.  // TODO Auto-generated method stub95.  x1 = (int) event.getX();96.  y1 = (int) event.getY() ;97.  //当圆形之间发生碰撞98.  if(isCollsionWithCircle(x1,y1,x2,y2,r1,r2)){99.   isCollsion = true;//设置标志位为真100.   //当矩形之间没有发生碰撞101.  }else{102.   isCollsion = false; //设置标志位为假103.  }104.  return true;105.}106./**107.  * 圆形碰撞108.  * @param x1圆形1的圆心x坐标109.  * @param y1圆形1的圆心y坐标110.  * @param x2圆心2的圆形x坐标111.  * @param y2圆形2的圆形y坐标112.  * @param r1圆形1的半径113.  * @param r2圆形2的半径114.  */115.private boolean isCollsionWithCircle(int x1,int y1,int x2,int y2,int r1,int r2){116.  //Math.sqrt:开平方117.  //Math.pow(double x,double y):X的Y次方118.  if(Math.sqrt(Math.pow(x1 - x2, 2)+ Math.pow(y1 - y2,2))<= r1 + r2){119.   //如果两圆的圆心距小于或等于两圆半径则认为发生碰撞120.   return true;121.  }122.  return false;123.}124.125./**126.  * 按键事件监听127.  */128.@Override129.public boolean onKeyDown(int keyCode, KeyEvent event) {130.  // TODO Auto-generated method stub131.  return super.onKeyDown(keyCode, event);132.}133./**134.  * 游戏逻辑135.  */136.private void logic(){137.  138.}139.@Override140.public void run() {141.  // TODO Auto-generated method stub142.  while(flag){143.   long start = System.currentTimeMillis();144.   myDraw();145.   logic();146.   long end = System.currentTimeMillis();147.   try {148.    if (end - start < 50) {149.     Thread.sleep(50 - (end - start));150.    }151.   } catch(InterruptedException e){152.    e.printStackTrace();153.   }154.  }155.  156.}157./**158.  * Surfaceview视图状态发生改变,响应此函数159.  */160.@Override161.public void surfaceChanged(SurfaceHolder holder, int format, int width,162.   int height) {163.  // TODO Auto-generated method stub164.  165.}166./**167.  * Surfaceview视图消亡,响应此函数168.  */169.@Override170.public void surfaceDestroyed(SurfaceHolder holder) {171.  // TODO Auto-generated method stub172.  173.}174.}

更多相关文章

  1. Android(安卓)Cocos2d实现:一个图片围绕一个圆心做圆运动
  2. Android实现颜色选取圆盘
  3. Android(安卓)实现遮罩
  4. android控件的边框设置
  5. Android(安卓)使用shape来优化界面效果
  6. Android(安卓)圆角图片的实现
  7. Android实现圆形图片
  8. 自定义view-制作一个加载中的圆形
  9. Android实现圆角矩形和圆形ImageView的方式

随机推荐

  1. android为HttpClient和HttpURLConnection
  2. Android中文翻译 - NFC基础
  3. Android 圆角边框实现
  4. android binder机制分析 以MediaPlayer为
  5. [翻译] Android是怎样绘制视图的
  6. Android中的Intent
  7. android中listview的一些样式设置,自定义
  8. [手机取证] 绕过屏幕锁定启用调试模式-Fo
  9. 怎样抓webview的trace
  10. 手把手教您-将Android的Camera源码导入到