2015-01-19 1 views
0



지금까지 등각 투영 구조를 만드는 과정에서 실제 타일 맵핑 알고리즘을 사용하고 있습니다.

등각 투영 및 마우스 위치 지정

My Isometric map and how it auto maps the cell coordinates

것은 내 마우스가 특정 타일을 선택되어 있는지 확인하기 위해 모든 타일을 통해 반복과 같이 타일 충돌 당하지 않을 것입니다. 내가 시도한 것은 이것을 사용하여 마우스에서 셀 인덱스를 얻는 것입니다.

int col = (int)(((double)mouse_x/(double)tileWidth) - ((double)mouse_y/(double)tileHeight) - 0.5); 
int row = (int)(((double)mouse_y/(double)tileHeight) + ((double)mouse_x/(double)tileWidth) - 0.5); 

그러나이 방법을 사용하면 내 0,15는 마우스에 따라 0,0이고 0,0은 0,15입니다. 그럼 내 질문은 오프셋을 사용하여 마우스 코드를 편집하여 어떻게 바꿀 수 있습니까?
그럼에도 불구하고 어떻게해야할지 모르겠다. 그래서 내 질문은 어떻게 되는가.

답변

0

방금 ​​이니셜 방정식을 편집하는 대신 간단한 방법을 사용했습니다. 이 결과를 뒤집, 따라서 비 예술적인 등식 방식으로 내 문제를 해결

int col = (int)(((double)mouse_x/(double)tileWidth) - ((double)mouse_y/(double)tileHeight) - 0.5); 
    int row = (int)(((double)mouse_y/(double)tileHeight) + ((double)mouse_x/(double)tileWidth) - 0.5); 

    row = mapHeight - row - 1; 

:
나는하여 결과를 수정했습니다. 화면 등각 투영 좌표에서

0

좌표 :

isoX = (((screenY + scrollY)/tileHeight) + ((screenX + scrollX) - (isoMapMaxY * tileWidth/2))/tileWidth) 
isoY = (((screenY + scrollY)/tileHeight) - ((screenX + scrollX) - (isoMapMaxY * tileWidth/2))/tileWidth) 

isoX = (screenY/32) + (screenX - 320)/64 
isoY = (screenY/32) - (screenX - 320)/64 
: 화면에서

screenX = (isoX - isoY + isoMapMaxY) * (tileWidth/2); 
screenY = (isoX + isoY) * (tileHeight/2); 

아이소 메트릭 좌표 좌표

관련 문제