2009-03-12 12 views
3

저는 그리드에서 작동하는 roguelike 스타일 핸드폰 게임을하고 있습니다. 이 게임의 공격/아이템은 타일을 사용자를 기준으로 한 패턴으로 타겟팅하여 작동합니다. paturn이 screenshot에서 예를 들어,j2me - 2 차원 점의 배열을 45도 단위로 회전

Point2d[] damageTiles = new Point2d[4]; 

damageTiles[0] = new Point2d(0, -1); 
damageTiles[1] = new Point2d(0, -2); 
damageTiles[2] = new Point2d(1, -2); 
damageTiles[3] = new Point2d(-1, -2); 

는 "최대"목표 임시 적으로 보여 상대 (노란색 상자)는 패턴 사용자뿐만 아니라에서 목표 방향에 일반적으로 상대적입니다.

현재 패턴 배열을 90도 단위로 회전시키는 간단한 코드가 있습니다 (here 참조). 내 질문은, 2 차원 점의 배열을 45도 단위로 회전시킬 수있는 쉬운 방법이 있는데, 대다수의 경우, 부동 소수점 수학을 사용하지 않고 내 공격/항목을 대각선으로 발사 할 수 있습니다. 많은 전화기에서 천천히 실행됩니다. 그래서 나는 듣는다). 이것은 아마도 그래픽 프로그래밍에 익숙한 사람들에게는 사소한 질문 일 것이지만, 나는 코더 블록 (coder 's block)의 경우에 맞았다.

현재 로테이션 코드는 다음과 같습니다. 이제는 더 나은 방법은 "방향"대신 각도를 사용하고 그 각도로 점들을 회전시키는 것입니다 (45 도의 배수가 아닌 각도를 거부 함).

private Point2d[] rotateList(Point2d[] points, int direction) { 
    for (int i = 0; i < points.length; i++) { 

     if (direction == ROTATE_LEFT) { 
      int temp = points[i].x; 
      points[i].x = points[i].y; 
      points[i].y = -1 * temp; 
     } 
     else if (direction == ROTATE_RIGHT) { 
      int temp = points[i].x; 
      points[i].x = -1 * points[i].y; 
      points[i].y = temp; 
     } 

    } 

    return points; 
} 
+0

이 다른 질문은 유사하지만 (중복이 아님) 도움이 될 수 있습니다. http://stackoverflow.com/questions/484573/image-rotation-algorithm –

답변

2

당신이 45도 회전하기 어려울 것 보여 T 모양의 공격을 - 일이 정말 번역하지 않는다 90에서 45까지.

 
original: 
..... 
.###. 
..#.. 
..o.. 

alternative A: 
..... 
.##.. 
.##.. 
...o. 

alternative B: 
..#.. 
.#... 
#.#.. 
...o. 

그 패턴에 대해 쉽게 다른 것이있을 수 있습니다.

90도 패턴과 일치하도록 45도 "패턴"을 만든 다음 45도 패턴을 90도 패턴을 회전하는 것과 똑같이 회전시키는 것이 좋습니다.

+0

나는 시도하는 동안 나 자신과 같은 실현에와 봤다. 다른 답의 회전 수학. 두 가지 모두 필요로하는 패턴의 "대각선"버전을 만들어야합니다. 도움을 주셔서 감사합니다. – LoginError

0

물론, 반대 2 차원 회전 (양의 X는 Y가 오른쪽으로 가리키는) 단지이 (위키의 rotation matrix 참조) 쎄타 = 45 °위한

[x'] [cos(theta) -sin(theta)] [x] 
[y'] = [sin(theta) cos(theta)] [y] 

,이된다

x' = 0.7071*x - 0.7071*y 
y' = 0.7071*x + 0.7071*y 

(SQRT (2)/2 0.7071 교체, 난 단지 여기에 4 자리 숫자 사용하고 있습니다)

관련 문제