想明白了:
检查heroRect是否在周长Rect内要简单得多
MotionEvent
,如果heroRect在周界内,则检查heroRect是否与其他物体碰撞
Rect
s
我的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;
}
现在位图不会超过周长Rect:)