2011-08-16 5 views
0

지도로 사용되는 타일과 기타 자산으로 가득 찬 컨테이너가 있습니다. 그 컨테이너 위에는 플레이어가 보는 카메라 역할을하는 마스크가 있습니다. 카메라를 움직이게하기 위해서 나는 컨테이너를 움직인다.축소하는 동안 카메라 위치를 유지하는 방법은 무엇입니까?

는 나는 다음과 같은 공식 사용하여 컨테이너 내 타일에 중심을 수 있어요

:이 마스크에 상대적인 위치에 컨테이너를 이동

container.x = (((tile.x + (tile.width/2)) * container.scaleX) * -1) + (mask_width/2); 
container.y = (((tile.y + (tile.height/2)) * container.scaleY) * -1) + (mask_height/2); 

은 마스크의 중심에있는 타일 될 것 문제.

최근 확대/축소 기능을 추가하여 컨테이너의 크기/크기를 조정하여 크기를 크게하거나 작게 만듭니다. 이미 위에서 설명한 센터링 코드를 수정했지만 문제가 발생하여 뷰가 축소되면서 "카메라"가 움직이지 않는 것처럼 보입니다. 기본적으로 축소 할 때 컨테이너가 축소되기 때문에 모든 것이 왼쪽으로 이동하는 것처럼 보입니다. 위의 코드를 사용하여 중심으로 한 번 괜찮 으면 좋겠지 만 확대/축소하는 동안 같은 위치에있는 것처럼 보이는 모든 것을 유지하려면 scaleX와 scaleY의 차이를 기반으로 오른쪽으로 컨테이너를 범프하는 방법이 필요합니다. 나는 이미 몇 가지 시도를 해봤지만, 수학의 머리를 감쌀 수는 없습니다.

답변

0

주석으로 부하에

container.x = (((tile.x + (tile.width/2)) * container.scaleX) * -1) + (mask_width/2); 
container.y = (((tile.y + (tile.height/2)) * container.scaleY) * -1) + (mask_height/2); 

이 코드 크기 조절/규모

cam.x = container.width/2 
cam.y = container.height/2 

을 할이 코드는이

container.x = container.x + amountOfWidthChanged/2 
container.y = container.y + amountOfHeightChanged/2 
+0

어머, 마스크는 카메라가 아니기 때문에 플레이어가 컨테이너가 움직이는 것을 보지 못하게하는 시점입니다. 플래시는 0,0에서 높이/너비로 렌더링되므로 컨테이너를 움직일 수 없으므로 이동할 수 없습니다. 어쨌든 줌의 높이/너비 차이를 기준으로 조정을 시도했지만 과도했습니다. 2 또는 4로 나누기조차도 오른쪽으로 이동합니다. – Mont

+0

카메라 컨테이너를 이동하는 마스크를 이동하지 마십시오. 마스크는 당신이 살펴 보는 "창"일뿐입니다. 다시 등록 포인트를 0,0에서 container.width/2로 오프셋하면 캠의 container.height/2에서 배율이 중앙에 배치됩니다. 제가 게시 한 나머지 코드는 가면을 중심으로 도움을 주지만 여분이었습니다. –

+0

이것이 작동하지 않는다면, 당신이 묘사 한 레이아웃은 그 방법이 아닙니다. –

0

같은 내가 그것을 알아 내기 위해 관리 할 내 다양한 as3 도우미 클래스에 대한 조사를하여 그래서 여기에이 문제를 가진 다른 누군가가 걸려 넘어지기를 기대합니다.

movieclip.transform.matrix는 scaleX/Y를 변경할 때 확대 된 점을 변경할 수있게합니다. MatrixTransformer에는 등록 포인트에 대해 두 포인트를 일치시킬 수있는 함수가 있습니다. 다음은 내가 사용한 코드입니다.

var mat:Matrix = container.transform.matrix.clone(); 
var externalCenter:Point = new Point(stage.mouseX, stage.mouseY); 
var internalCenter:Point = new Point(container.mouseX, container.mouseY); 

// container.scaleX and container.scaleY change here 

MatrixTransformer.matchInternalPointWithExternal(matrix, internalCenter, externalCenter); 
roomContainer.transform.matrix = matrix; 
관련 문제