2013-01-08 1 views
0

나는 내 타일 블링 엔진을 사용하고 있습니다.이 타일은 6 각형 타일을 사용하고 있습니다.하지만 일반 타일과 많이 다르지 않다고 생각합니다.스케일링 타일 그리드

거대한 x, y 배열의 타일이 있고 캔버스에 렌더링 할 x, y 좌표가 있습니다. 현재 카메라 위치에서 캔바스에 표시되어야하는 것들만 반복합니다.

그래서 나는 스케일링에 걸리고 내 자신으로 이것을 해결할 수 없습니다. 이것은 좋은 빠르게 작동하지만 유일한 문제는 그것이 (일반 규모 일 것 같은) 왼쪽 상단 모서리에서 타일

Before scale


저울입니다

public function draw():Void{ 
    clearCanvas(); //Clear canvas (bitmapData) 
      var _m:Matrix; 
      iterateTiles(function(_tile:HexTile):Void{ // loop every tile that is visible on screen 
       _m = new Matrix(); 
       _m.translate(_tile.x + cameraPoint.x,_tile.y + cameraPoint.y);//Get pre calculated tile x,y and add camera x,y 
       _m.scale(matrixScale, matrixScale); 
       drawToCanvas(_tile,_m);//Send to draw tile on canvas using Matrix 
      },true); 
     } 

: 다음은 캔버스에 타일 그리기 내 코드입니다

After scale

제 질문은 타일을 항상 중심에서부터 확장하는 방법입니다. 따라서 타일 10:10이 스케일링 전에 화면의 중앙에 있다면, 스케일링 후에 을 유지해야합니다.

답변

0

죄송합니다, 제가 질문을 오해,하지만 난 지금 그것을 가지고 생각 :이 테스트하지 않았습니다

// Scale the distance from the original point to the center of the canvas 
var xDistance:Number = ((_tile.x + cameraPoint.x) - xCenter) * matrixScale; 
var yDistance:Number = ((_tile.y + cameraPoint.y) - yCenter) * matrixScale; 

// Add the distances to the center of the canvas. This is where you want the tile 
// to appear. 
var x:Number = xCenter + xDistance; 
var y:Number = yCenter + yDistance; 

// Because the coordinate is going to be scaled, you need to increase it first. 
x = (1/matrixScale) * x; 
y = (1/matrixScale) * y; 

_m.translate(x, y); 

, 난 그냥 그래프 용지에 그것을 밖으로 그려했습니다. 작동하는지 알려주세요.

+0

예,하지만 이것은 모든 타일의 위치를 ​​너비와 높이의 절반으로 변경합니다. 이것이 스케일링에 어떻게 도움이됩니까? – notmyrealname

+0

타일 위치를 왼쪽/위쪽으로 조정 된 너비/높이의 절반만큼 이동하면 각 타일의 중심이 타일 크기 조정시에도 항상 _tile.x, _tile.y에있게됩니다. 그것이 당신이 목표로하는 것입니까, 아니면 제가 그 질문을 오해 한 것입니까? – bwroga

+0

그것은 뭔가 다른 것입니다. 모든 타일을 함께 크기를 조정하고 비율을 조정 한 후 센터에서 10:10 (또는 그 시점에서 캔버스의 중심에있는 모든 타일)을 유지하려면 함께 오프셋해야합니다. 나는 단지 축소하기 때문에 센터에서 10:10을 + x + y 값으로 오프셋하는 것이 좋습니다.이 값은 "캔버스"와 눈금의 크기와 관련되어야한다고 생각합니다. – notmyrealname