2014-07-05 5 views
0

간단한 게임을 개발 중입니다. 나는 cca가있다. 10 개의 열과 5 개의 열로 배열 된 50 개의 직사각형. 어떻게 든 화면 전체에 맞추는 것은 문제가되지 않았습니다. 그러나 캔버스를 회전시킬 때 약 7 ° 각도라고 가정 해 봅시다. 이전 좌표는 좌표의 새 위치에 맞지 않습니다. 생성자에서 나는 이미이 직사각형의 위치를 ​​만들고 정의합니다. onDraw 메서드에서이 직사각형을 그립니다. (당연히 회전이 있습니다) 현재 사각형과 충돌하는 메서드가 필요합니다. 나는 (내가 화면의 중앙 점을 중심으로 회전을했다)안드로이드는 회전 후 새 좌표를 얻습니다.

int newx = (int) ((x * Math.cos(ROTATE_ANGLE) - (y * Math.sin(ROTATE_ANGLE))) + width/2);     
int newy = (int) ((y * Math.cos(ROTATE_ANGLE) + (x * Math.sin(ROTATE_ANGLE))) + height/2); 

같은 것을 사용하려고하지만 (그것이 나에게 절대 잘못 새로운 좌표를 제공 becuase)는 일을하지 않습니다. xy은 회전 방식으로 새로운 위치를 계산하려는 터치 좌표입니다. ROTATE_ANGLE은 화면의 회전 각도입니다.

누구든지이 문제를 해결하는 방법을 알고 있습니까, 이미 많은 기사, 위키, wolframalpha 카테고리를 철저히 조사하지만 행운은 아닙니다. 어쩌면 문제를 더 이해하기 위해 링크가 필요할 수도 있습니다.

고맙습니다.

답변

1

회전 매트릭스를 사용합니다.

Matrix mat = new Matrix(); //mat is identity 
mat.postRotate(ROTATE_ANGLE); //mat is a rotation matrix of ROTATE_ANGLE degrees 
float point[] = {10.0, 20.0}; //create a new float array representing the point (10, 20) 
mat.mapPoints(point); //rotate the point by the requested amount 
0

확인.

먼저는

가 그럼 난 personly 라디안 값 무효화 할 필요가 라디안 각도에서 를 변환하는 것이 중요하다.

그게 전부입니다,이 해결책은 정확합니다

관련 문제