Android碰撞检测——圆形检查
来源:互联网 发布:工程优化方法及其应用 编辑:程序博客网 时间:2024/05/05 06:10
圆形检查的思路:两个圆的圆心距小于两个圆的半径之和则相碰撞了,反之,没有发生碰撞
/** * 两个圆的碰撞检测 * @param x1 * @param y1 * @param r1 * @param x2 * @param y2 * @param r2 * @return */ public static boolean CheckCollideCircle(int x1, int y1, int r1, int x2, int y2, int r2) { boolean iscollide=false; //两点之间的距离 小于两半径之和就发生了碰撞 if(Math.sqrt(Math.pow(x1-x2,2)+Math.pow(y1-y2, 2))<=r1+r2){ iscollide=true; } return iscollide; }
下面用一个完整列子说明
public class CircleSurfaceView extends SurfaceView implements Callback,Runnable { int x1=70,y1=110,r1=40; int x2=220,y2=110,r2=40; boolean isCollide=false;//是否发生碰撞 SurfaceHolder surfaceHolder; Paint paint; boolean flag=false; int sleeptime=100; Thread thread; public CircleSurfaceView(Context context) { super(context); surfaceHolder=getHolder(); surfaceHolder.addCallback(this); paint=new Paint(); paint.setTextSize(12); thread=new Thread(this); flag=true; } public void draw(Canvas canvas) { canvas.drawColor(Color.BLACK); if(isCollide){ paint.setColor(Color.RED); canvas.drawText("Collide", 0, 30, paint); } else { paint.setColor(Color.WHITE); canvas.drawText("Not Collide", 0, 30, paint); } canvas.drawCircle(x1, y1, r1, paint); canvas.drawCircle(x2, y2, r2,paint); } /** * 触屏点击事件 */ @Override public boolean onTouchEvent(MotionEvent event){ x1=(int)event.getX()-r1/2; //圆心坐标 if(CheckCollide.CheckCollideCircle(x1, y1, r1, x2, y2, r2)){//检查碰撞的方法 isCollide=true; } else { isCollide=false; } return true; } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub if(!thread.isAlive()){ thread.start(); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub flag=false; thread=null; } @SuppressLint("WrongCall") @Override public void run() { // TODO Auto-generated method stub Canvas canvas=null; while (flag) { try { canvas=surfaceHolder.lockCanvas(); synchronized (canvas) { draw(canvas); } } catch (Exception e) { Log.e("Collide", e.getMessage()); }finally{ if(canvas!=null){ surfaceHolder.unlockCanvasAndPost(canvas); } } try { Thread.sleep(sleeptime); } catch (Exception e) { Log.e("Collide", e.getMessage()); } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub }}
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- Android碰撞检测——圆形检查
- Android碰撞检测——矩形检查
- Android碰撞检测——Region碰撞检查
- Android碰撞检测——多矩形检查
- Android碰撞检测——多矩形检查
- 矩形圆形碰撞检查
- android 圆形碰撞
- 碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞
- 碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞
- 碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞
- 碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞
- 碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞
- 圆形和长方形的碰撞检测!
- 圆形和矩形的碰撞检测
- 碰撞检测一重奏——长方体碰撞检测
- 碰撞检测第二重奏——胶囊体碰撞检测
- android 游戏 碰撞检测
- android碰撞检测
- !!!Chapter 5 Hashing
- 慎用_tcscpy函数
- 你也可以是天才,心有多大,舞台就有多大
- get network hotplugging working on Ubuntu 12.04 LTS
- 13、EL表达式
- Android碰撞检测——圆形检查
- C++空类的默认成员函数总结
- Structs2学习小结
- HDU 1033 Edge
- 解决win7下cisco vpn的Reason 442问题
- c语言函数调用详细过程
- Struts2+freemarker开发搭建
- 汉字转换拼音字头原理实践
- C/C++笔试题