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;
}