创建android 2d游戏。
......角色有障碍,他一定不能去
Basicaly它实现如下:
RectF obstacle1 = new RectF(100, 150, 200, 300);
Paint paint = new Paint();
barPaint.setColor(Color.argb(130, 255, 255, 255));
canvas.drawRect(obstacle1, paint);
// stopping the character in case of getting to the obstacle
if (obstakle1.contains(currentXCoordinate, currentYCoordinate) {
theCharacter.stop();
}
//...
适用于矩形障碍物。
但我必须使用椭圆形的障碍物 如果我这样做,只画椭圆形:
RectF ovalObstacle = new RectF(100, 400, 500, 800);
Paint paint = new Paint();
barPaint.setColor(Color.argb(130, 255, 255, 255));
// drawing oval
canvas.drawOval(ovalObstacle, paint);
// stopping the character in case of getting to the obstacle
if (ovalObstacle.contains(currentXCoordinate, currentYCoordinate) {
theCharacter.stop();
}
角色在到达RectF时会停止,而不是椭圆形本身(印刷版上的光圈) (
有没有办法像椭圆一样使用方法包含(x,y)? 要弄清楚角色何时会到达椭圆形或圆形本身?
或者如何实现它?
答案 0 :(得分:0)
您需要使用Phytagoras。
float delPos=(player.x-obstacle.x)*(player.x-obstacle.x)+
(player.y-obstacle.y)*(player.y-obstacle.y);
if(delPos<=radius*radius)
{
//collision
}
不要使用Math.sqrt(),因为它太慢了!
此方法不适用于椭圆形,但更容易使用圆形的命中框。让你的生活更轻松!!!
对于椭圆就像
boolean collision=(player.x - obstacle.x)² / obstacle.width/2² +
(player.y - obstacle.y)² / obstacle.height/2² <=1;
if(collision)
{
//collision
}
答案 1 :(得分:0)
以下方法检查该点是否在椭圆形中。
public boolean pointInEllipse(Point test, Point center, int width, int height) {
int dx = test.x - center.x;
int dy = test.y - center.y;
return (dx * dx) / (width * width) + (dy * dy) / (height * height) <= 1;
}
我从here
获得了参考