Android 碰撞矩形法

Android 碰撞矩形法,android,surfaceview,collision,touch-event,Android,Surfaceview,Collision,Touch Event,我正在尝试将位图移动到Rect的触摸屏上。当然,我不希望图像消失或离开屏幕,所以我为屏幕的每一侧、顶部和底部创建了一个矩形。我为我美丽的艺术品道歉 onTouch @Override public boolean onTouch(View v, MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); switch (event.getAction()) {

我正在尝试将
位图
移动到
Rect
触摸屏上。当然,我不希望图像消失或离开屏幕,所以我为屏幕的每一侧、顶部和底部创建了一个矩形。我为我美丽的艺术品道歉

onTouch

@Override
public boolean onTouch(View v, MotionEvent event) {

    int x = (int) event.getX();
    int y = (int) event.getY();

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:

            // Left Key Touched
            if (x <= bLeftRect.right && x >= bLeftRect.left
                    && y >= bLeftRect.top && y <= bLeftRect.bottom) {

                hero.setX(hero.getX() - tileDimen);
                heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);
                if (heroRect.intersect(wallTopRect)) {
                    hero.setX(hero.getX() + tileDimen);
                } else if (heroRect.intersect(wallLeftRect)) {
                    hero.setX(hero.getX() + tileDimen);
                }

                //etc....
这是一个更好的方法吗?非常感谢您的任何建议/见解

谢谢

马特想明白了: 在每个
MotionEvent
上检查heroRect是否在周界内要简单得多,如果heroRect在周界内,则检查heroRect是否与任何其他
Rect
碰撞

我的onTouch方法:

@Override
public boolean onTouch(View v, MotionEvent event) {

    int x = (int) event.getX();
    int y = (int) event.getY();

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:

            // Left Key Touched
            if (x <= bLeftRect.right && x >= bLeftRect.left
                    && y >= bLeftRect.top && y <= bLeftRect.bottom) {

                hero.setX(hero.getX() - tileDimen);
                heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);

                if (!(perimeterRect.contains(heroRect))) {
                    hero.setX(hero.getX() + tileDimen);
                    heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);
                } //else if hero collides with other Rects... {
                // }

                // Up Key Touched
            } else if (x <= bUpRect.right && x >= bUpRect.left
                    && y >= bUpRect.top && y <= bUpRect.bottom) {

                hero.setY(hero.getY() - tileDimen);
                heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);

                if (!(perimeterRect.contains(heroRect))) {
                    hero.setY(hero.getY() + tileDimen);
                    heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);
                } //else if hero collides with other Rects... {
                // }

                // Right Key Touched
            } else if (x <= bRightRect.right && x >= bRightRect.left
                    && y >= bRightRect.top && y <= bRightRect.bottom) {

                hero.setX(hero.getX() + tileDimen);
                heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);

                if (!(perimeterRect.contains(heroRect))) {
                    hero.setX(hero.getX() - tileDimen);
                    heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);
                } //else if hero collides with other Rects... {
                // }

                // Down Key Touched
            } else if (x <= bDownRect.right && x >= bDownRect.left
                    && y >= bDownRect.top && y <= bDownRect.bottom) {

                hero.setY(hero.getY() + tileDimen);
                heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);

                if (!(perimeterRect.contains(heroRect))) {
                    hero.setY(hero.getY() - tileDimen);
                    heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);
                } //else if hero collides with other Rects... {
                // }

            } else {
                //button was not pressed, do nothing
            }

            break;
    }
    return true;
}
@覆盖
公共布尔onTouch(视图v,运动事件){
int x=(int)event.getX();
int y=(int)event.getY();
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
//按左键
如果(x=bLeftRect.left
&&y>=bLeftRect.top&&y=bUpRect.top&&y=bRightRect.top&&y=bDownRect.top&&y
@Override
public boolean onTouch(View v, MotionEvent event) {

    int x = (int) event.getX();
    int y = (int) event.getY();

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:

            // Left Key Touched
            if (x <= bLeftRect.right && x >= bLeftRect.left
                    && y >= bLeftRect.top && y <= bLeftRect.bottom) {

                hero.setX(hero.getX() - tileDimen);
                heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);

                if (!(perimeterRect.contains(heroRect))) {
                    hero.setX(hero.getX() + tileDimen);
                    heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);
                } //else if hero collides with other Rects... {
                // }

                // Up Key Touched
            } else if (x <= bUpRect.right && x >= bUpRect.left
                    && y >= bUpRect.top && y <= bUpRect.bottom) {

                hero.setY(hero.getY() - tileDimen);
                heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);

                if (!(perimeterRect.contains(heroRect))) {
                    hero.setY(hero.getY() + tileDimen);
                    heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);
                } //else if hero collides with other Rects... {
                // }

                // Right Key Touched
            } else if (x <= bRightRect.right && x >= bRightRect.left
                    && y >= bRightRect.top && y <= bRightRect.bottom) {

                hero.setX(hero.getX() + tileDimen);
                heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);

                if (!(perimeterRect.contains(heroRect))) {
                    hero.setX(hero.getX() - tileDimen);
                    heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);
                } //else if hero collides with other Rects... {
                // }

                // Down Key Touched
            } else if (x <= bDownRect.right && x >= bDownRect.left
                    && y >= bDownRect.top && y <= bDownRect.bottom) {

                hero.setY(hero.getY() + tileDimen);
                heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);

                if (!(perimeterRect.contains(heroRect))) {
                    hero.setY(hero.getY() - tileDimen);
                    heroRect.set(hero.getX(), hero.getY(), hero.getX() + tileDimen, hero.getY() + tileDimen);
                } //else if hero collides with other Rects... {
                // }

            } else {
                //button was not pressed, do nothing
            }

            break;
    }
    return true;
}