2014-10-07 4 views
-1

난 원과 사각형으로 간단한 2d 충돌 감지에 문제가 있습니다. 원의 중심이 직사각형의 어떤 점과 겹치는지 검사기가 확인합니다.이 간단한 원/사각형 충돌 감지의 문제점은 무엇입니까?

을 heres 검사 :

boolean overlaps(Circle circle) { 
    for (double i = topLeft.x; i < (topLeft.x + width); i++) 
    { 
     for (double j = topLeft.y; j < (topLeft.y + height); j++) 
     { 
      if (circle.center.x == i && circle.center.y == j) 
      { 

       return true; 
      } 

     } 
    } 
return false; 
}` 

매우 간단하고 포인트. 이 오류는 if 문에서 circle.center.x 및/또는 circle.center.y과 함께 나타납니다. 여기

내 Circle 클래스에 대한 코드입니다 :

public class Circle { 
Point center; 
double radius; 
/** 
* Constructor. 
* 
* @param center the center Point of the circle 
* @param radius the radius of the circle 
*/ 
public Circle(Point center, double radius) { 
center = this.center; 
radius = this.radius; 
} 

/** 
* Get the current center point of the circle. 
* 
* @return the center point of the circle 
*/ 
public Point getCenter() { 
    return center; 
} 

/** 
* Set the center point of the circle. 
* 
* @param center the (new) center point of the circle 
*/ 
public void setCenter(Point center) { 
    this.center = center; 
} 

/** 
* Get the current radius. 
* 
* @return the current radius 
*/ 
public double getRadius() { 
    return radius; 
} 

/** 
* Set the radius. 
* 
* @param radius the (new) radius of the circle 
*/ 
public void setRadius(double radius) { 
    this.radius = radius; 
} 

}`

는 어디서 잘못된 것입니까? 확실히 Point 클래스에 문제가 될 수는 없습니다. 다른 점은 지금까지 잘못되었을 것입니다. 미리 감사드립니다.

+1

왜 2D 루프? 간단한 불평등 (예 : '<' or '>')이 확인하지 않는 이유는 무엇입니까? –

+0

실제로 clcto가 제안한 것으로 변경했지만 문제는 여전히 circle 클래스 내에 있습니다. – GravityCheck

답변

0

귀하의 방법은해야한다 :

boolean overlaps(Circle circle) 
{ 
    return topLeft.x <= circle.center.x && circle.center.x <= topLeft.x + width && 
      topLeft.y <= circle.center.y && circle.center.y <= topLeft.y + height; 
} 
+0

아마도 더 적절할 것입니다. 그러나 circle 클래스는 문제가 존재합니다. 'circle.center.x'는 null을 반환하기 때문에 오버랩 메서드 자체에서는 null이 반환됩니다. – GravityCheck

+0

'circle.center.x'는 단지 변수이므로'null'을 반환 할 수 없습니다. 'null'일 수도 있지만 참조 유형이고 기본 유형이 아닌 경우에만 가능합니다. – clcto

+0

글쎄, 그건 내가 널 포인터 예외를 제공한다는 의미. – GravityCheck