android 圆形碰撞
16lz
2021-01-24
圆形碰撞:主要是利用两圆形的圆心距进行判定的;当两圆的圆心距小于两圆半径之和,判定发生了碰撞。
创建实例:CircleCollsoin
项目效果图:
MySurfaceView.java
创建实例:CircleCollsoin
项目效果图:
MySurfaceView.java
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.}
更多相关文章
- Android(安卓)Cocos2d实现:一个图片围绕一个圆心做圆运动
- Android实现颜色选取圆盘
- Android(安卓)实现遮罩
- android控件的边框设置
- Android(安卓)使用shape来优化界面效果
- Android(安卓)圆角图片的实现
- Android实现圆形图片
- 自定义view-制作一个加载中的圆形
- Android实现圆角矩形和圆形ImageView的方式