2011-08-02 38 views
0

如何甚至有可能使用Flash中Actionscript 3中我的問題接受的答案here中提供的轉換表?我知道這可能與Matrix有關,但如果答案中提供的轉換可能在此實現,我真的不知道。是嗎?如果是這樣如何?如何在Matrix類中使用轉換表?

回答

0

好的,讓我們從Matrix開始(我爲了看起來更好 - 這就是最後兩個值的作用)。

private var gridTransform:Matrix = new Matrix(28, -14, 28, 14, 0, 14); 

現在,如果你創建一個UIComponent,而你可以使用這個矩陣來繪製網格:使用輔助功能

var grid:UIComponent = new UIComponent(); 

grid.graphics.beginFill(0xff0000, 0); 
grid.graphics.lineStyle(2, 0x888888); 

for (var u:int = 0; u < 20; u++) 
{ 
    for (var v:int = 0; v < 20; v++) 
    { 
     grid.graphics.moveTo(getX(u,v), getY(u,v)); 
     grid.graphics.lineTo(getX(u+1,v), getY(u+1,v)); 
     grid.graphics.lineTo(getX(u+1,v+1), getY(u+1,v+1)); 
     grid.graphics.lineTo(getX(u,v+1), getY(u,v+1)); 
    } 
} 
grid.graphics.endFill(); 

private function getX(u:Number, v:Number):Number 
{ 
    return gridTransform.transformPoint(new Point(u,v)).x; 
} 

private function getY(u:Number, v:Number):Number 
{ 
    return gridTransform.transformPoint(new Point(u,v)).y; 
} 

注:我知道繪圖方法是多餘的,但我也這樣做,以便填充允許網格之間的區域註冊點擊事件。有更好的方法來做到這一點,但這不是重點。

一旦你畫在UIComponent的網格可以將其添加到顯示列表:

addChild(grid); 

(我使用FLEX4,所以我用addElement(grid);

,並顯示出如何鼠標事件映射回(U,v)座標,添加事件偵聽到grid

grid.addEventListener(MouseEvent.CLICK, grid_clickHandler); 

,我們有:

private function grid_clickHandler(event:MouseEvent):void 
{ 
    trace("Local coordinates: (" + event.localX + "," + event.localY + ")"); 
    var inverted:Matrix = gridTransform.clone(); 
    inverted.invert(); 
    trace("U-V Coordinates: " + inverted.transformPoint(new Point(event.localX,event.localY))); 

} 

如果你只想要你的U-V座標有整數你可以使用一個Math.ceil()Math.floor()或類似的東西。