2012-05-21 3 views
0

현재 cocos2d의 객체를 사용하여 등각 투영 TMX 맵에 스프라이트를 추가하려고합니다. 문제는 TMX 객체의 X 및 Y 메타 데이터가 등각 투영 X 및 Y 형식 대신 표준 2d 형식 (픽셀 x, 픽셀 y)에있는 것입니다. 일반적으로 타일 크기로 나누면되지만 등각 투영에는 일종의 변형이 필요합니다. 크기 40 개 타일 객체 40 개 타일 64 × 32 등각 tilemap에 예를 들어표준 X, Y 좌표에서 등각 투영 좌표 얻기

(20, 21)는 '의 좌표는 (20) (그래서 질문은 정말 얻는 것을 공식이다 (640584)

로 나와 21) from (640,584)?

+0

당신은 3D 안하고? 뭔가 평면의 등각 투영 뷰? – phkahler

답변

0

Wikipedia's isometric projection article은 귀하의 친구입니다.

C는 다음 약간 각도 (α) (제 1 행렬) 및 베타 (2 매트릭스), S = 죄 (알파)를 통해 회전하여 얻을 수있는 벡터이다
cx | 1 0 0 | | c' 0 -s' | ax 
cy = | 0 c s | | 0 1 0 | ay 
cz | 0 -s c | | s' 0 c' | az 

, C = COS (알파 : 수학 섹션), s '= sin (β), c'= cos (β)이다. 하나에 모든 매트릭스를 결합

vx | 1 0 0 | cx 
vy = | 0 1 0 | cy 
vz | 0 0 1 | cz 

변환 : 그런 다음 미리 곱 C에 의해 2 차원에 그 프로젝트

vx | c' 0 -s' | ax 
vy = | ss' c sc' | ay 
vz | 0 0 0 | az 

이 (가) 숫자로 변환 얻으려면,에 알파와 베타의 자신의 값을 사용 계수를 생성한다. 직선적인 Cocos2D의 CCTMXLayer 소스 코드에서

1

:

-(CGPoint) positionForIsoAt:(CGPoint)pos 
{ 
    CGPoint xy = { 
     mapTileSize_.width /2 * (layerSize_.width + pos.x - pos.y - 1), 
     mapTileSize_.height /2 * ((layerSize_.height * 2 - pos.x - pos.y) - 2), 
    }; 
    return xy; 
} 
+0

어떻게 사용합니까? [UIAppDelegate.tileMap.layer positionForIsoAt : tilePos]를 시도하면 "구조체 또는 공용체가 아닌 멤버 계층에 대한 요청"이라고 표시되고 CCTMXLayer.h에 메서드가 노출되지 않습니다. – RSH1

관련 문제