저는 그리드에서 작동하는 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;
}
이 다른 질문은 유사하지만 (중복이 아님) 도움이 될 수 있습니다. http://stackoverflow.com/questions/484573/image-rotation-algorithm –