android碰撞检测

来源:互联网 发布:网络异常检测 编辑:程序博客网 时间:2024/05/18 20:32

两个矩形,拖动其中一个矩形向另外一个移动,当发生碰撞时两个矩形同时变为红色:

import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.support.v4.app.NotificationCompatSideChannelService;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;/** * Created by lijia on 2017/5/25. */public class lesson6 extends SurfaceView implements SurfaceHolder.Callback,Runnable  {    private int bx,by,dx,dy,rw,rh;    private Canvas canvas;    private Paint paint1,paint2;    private Thread th;    private  boolean runFlag;    private SurfaceHolder sfh;    private Rect rect1,rect2;    public lesson6(Context context) {        super(context);        sfh=this.getHolder();        sfh.addCallback(this);        paint1=new Paint();        paint2=new Paint();         bx=100;         by=100;         rw=200;         rh=200;         dx=0;         dy=0;    }    @Override    public void surfaceCreated(SurfaceHolder holder) {        th=new Thread(this);        runFlag=true;        th.start();    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {    }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {    }    @Override    public void run() {        while(runFlag)        {            gameDraw();        }    }    public void gameDraw()    {        canvas=sfh.lockCanvas();        canvas.drawColor(Color.WHITE);        rect1=new Rect(bx,by,bx+rw,by+rh);        rect2=new Rect(300,300,500,500);        paint1.setColor(Color.GREEN);        canvas.drawRect(rect2,paint2);       if (rect2.intersect(rect1))       {           paint1.setColor(Color.RED);           canvas.drawRect(bx,by,bx+rw,by+rh,paint1);           paint2.setColor(Color.RED);           canvas.drawRect(rect2,paint2);       }else       {           paint1.setColor(Color.BLUE);           //  rect1=new Rect(bx,by,bx+rw,by+rh);           canvas.drawRect(rect1,paint1);           paint2.setColor(Color.GREEN);           canvas.drawRect(rect2,paint2);       }        sfh.unlockCanvasAndPost(canvas);    }    @Override    public boolean onTouchEvent(MotionEvent event) {        Rect r=new Rect(bx,by,bx+rw,by+rh);        if(r.contains((int)event.getX(),((int)event.getY())))        {            if (event.getAction()==MotionEvent.ACTION_MOVE)            {                bx=dx+(int)event.getX();                by=dy+(int)event.getY();            }else            {                dx=bx-(int)event.getX();                dy=by-(int)event.getY();            }        }        return  true;    }}
原创粉丝点击