0
如何甚至有可能使用Flash中Actionscript 3中我的問題接受的答案here中提供的轉換表?我知道這可能與Matrix有關,但如果答案中提供的轉換可能在此實現,我真的不知道。是嗎?如果是這樣如何?如何在Matrix類中使用轉換表?
如何甚至有可能使用Flash中Actionscript 3中我的問題接受的答案here中提供的轉換表?我知道這可能與Matrix有關,但如果答案中提供的轉換可能在此實現,我真的不知道。是嗎?如果是這樣如何?如何在Matrix類中使用轉換表?
好的,讓我們從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()
或類似的東西。