2011-03-09 57 views
0

我使用下面的從右上角旋轉文本域,我想知道找到右上角的最佳方式。找到右上角的旋轉文本域

  var txt:TextField = new TextField(); 
      txt.autoSize = TextFieldAutoSize.LEFT; 
      txt.htmlText = "Some text here>"; 


      mtx = txt.transform.matrix.clone(); 
      MatrixTransformer.rotateAroundInternalPoint(mtx, txt.width, 0, -45); 
      txt.transform.matrix = mtx; 

編輯:

我只是寫了這個測試在閃IDE下面的代碼(OMG這傷害......),顯然沒有在庫調用Arial字體嵌入字體。我無法將圓圈正確地放置在文本框的右上角。

import flash.text.TextField; 
import flash.text.TextFieldAutoSize; 
import flash.geom.Matrix; 
import flash.display.Shape; 
import fl.motion.MatrixTransformer; 
import flash.geom.Point; 
import flash.text.TextFormat; 
import flash.text.Font; 

Font.registerFont(Arial); 

var angle:Number = -45 

var txt:TextField = new TextField(); 
txt.autoSize = TextFieldAutoSize.LEFT; 
txt.embedFonts = true; 
txt.defaultTextFormat = new TextFormat("Arial", 20, 0x0000ff); 
txt.text = "Here is some text"; 
txt.border = true; 
txt.x = 100; 
txt.y = 100; 
addChild(txt); 

var circle:Shape = new Shape(); 
circle.graphics.beginFill(0x00ff00); 
circle.graphics.drawCircle(-5, -5, 10); 
circle.graphics.endFill(); 
addChild(circle); 

var mtx:Matrix = txt.transform.matrix.clone(); 
MatrixTransformer.rotateAroundInternalPoint(mtx, txt.width, 0, angle); 
txt.transform.matrix = mtx; 

// The top right after being turned -45° 
var localPoint:Point = new Point(txt.width, txt.height); 
var globalPosition:Point = txt.localToGlobal(localPoint); 

circle.x = globalPosition.x; 
circle.y = globalPosition.y; 
+0

您需要更具體一些,您是否需要「過去是右上角的當前位置」?你是否總是將盒子翻轉-45°或者你是否需要任何旋轉的一般解決方案? – 2011-03-10 15:20:18

+0

好的,我很抱歉,我想總是得到txt TextField的右上角,不管旋轉角度是什麼,我需要使用trig來做到這一點嗎? – Neil 2011-03-10 15:32:49

回答

1

如果你的意思是把它前右上方:

// The field's original top right corner: 
var localPoint:Point = new Point(txt.width, 0); 
var globalPosition:Point = txt.localToGlobal(localPoint); 

如果你的意思是,在已經變成了場:

// The top right after being turned -45° 
var localPoint:Point = new Point(txt.width, txt.height); 
var globalPosition:Point = txt.localToGlobal(localPoint); 

編輯:

好,看到你的測試後,我嘗試了一堆東西,我想我發現了一些可以工作的東西:

var angle:Number = -45 
var txt:TextField = new TextField(); 
txt.autoSize = TextFieldAutoSize.LEFT; 
txt.defaultTextFormat = new TextFormat("Arial", 20, 0x0000ff); 
txt.text = "Here is some text"; 
txt.border = true; 
txt.x = 100; 
txt.y = 250; 
stage.addChild(txt); 

var local3d:Vector3D = new Vector3D(txt.width, txt.height); 

var circle:Shape = new Shape(); 
circle.graphics.beginFill(0x00ff00); 
circle.graphics.drawCircle(-5, -5, 10); 
circle.graphics.endFill(); 
stage.addChild(circle); 

var mtx:Matrix = txt.transform.matrix.clone(); 
mtx.rotate(-45/180 * Math.PI); 
txt.transform.matrix = mtx; 

var globalPosition:Point = txt.local3DToGlobal(local3d); 

circle.x = globalPosition.x; 
circle.y = globalPosition.y; 

如果我運行這個,我得到一個TextField,轉動-45度,綠色的球粘在什麼東西的右下角。我不知道你的MatrixTransformer類,但它應該能夠處理任何矩陣。

嘗試並複製&粘貼此代碼並將其弄亂,直到獲得您想要的結果。

+0

感謝您的回覆,這似乎沒有做旋轉版本的工作,似乎指向邊界框的右下角而不是旋轉文本框的右上角 – Neil 2011-03-10 10:06:00

+0

@Neil,你確定第一個片段不起作用?無論當前的輪換或頭寸是什麼,它都應該給你全球化的東西。您確定您使用實際的textfield實例本身作爲txt.localToGlobal的「txt」部分,而不是持有人DisplayObject嗎? – 2011-03-10 16:19:03

+0

EyeSeeEm,我已經在上面添加了一個測試,除非我錯過了一些我無法使其工作的東西。 – Neil 2011-03-11 16:38:08