Android画布。包含(x,y)椭圆?

时间:2015-06-09 10:42:15

标签: android canvas

创建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时会停止,而不是椭圆形本身(印刷版上的光圈) (print screen

有没有办法像椭圆一样使用方法包含(x,y)? 要弄清楚角色何时会到达椭圆形或圆形本身?

或者如何实现它?

2 个答案:

答案 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

获得了参考

enter image description here