我有一個SWF文件,其中包含兩個「已導出用於ActionScript」的符號。這些都是簡單的正方形,其填充大小相等,但其中一個具有邊界,另一個不具有邊界。同等縮放邊界和非邊界Flash圖形
我想在我的Flash應用程序中顯示這些圖形並排側,我想他們都被縮放(擴大)到相同的尺寸。我已經寫了一些相當簡單的代碼從SWF加載這些符號,並顯示它們(見下文),但由於預期接壤元素沒有大小:
邊框使通過超過邊界的尺寸減小圖形將其放大。
我用下面的代碼來執行上面的測試。
<?xml version='1.0'?>
<s:Application
xmlns:fx='http://ns.adobe.com/mxml/2009'
xmlns:s='library://ns.adobe.com/flex/spark'
xmlns:mx="library://ns.adobe.com/flex/mx"
initialize='init(drawArea)'
>
<mx:UIComponent id='drawArea' left='0' top='0' width='250' height='250'></mx:UIComponent>
<fx:Script><![CDATA[
import mx.controls.SWFLoader;
static function init(drawArea:UIComponent):void {
var loader:SWFLoader = new SWFLoader();
loader.addEventListener(Event.COMPLETE, onSwfLoaded);
loader.load('./borderings.swf');
function onSwfLoaded(e:Event):void {
var getDefinition:Function = e.target.loaderContext.applicationDomain.getDefinition;
var Bordered:Class = getDefinition('bordered');
var bordered:MovieClip = new Bordered;
bordered.x = 100;
bordered.y = 100;
bordered.width = 100;
bordered.height = 100;
var borderedContents:DisplayObject = bordered.getChildAt(0);
assert(bordered.numChildren === 1);
assert(borderedContents.x == 0);
assert(borderedContents.y == 0);
assert(borderedContents.width == 14.1);
assert(borderedContents.height == 14.1);
drawArea.addChild(bordered);
var Borderless:Class = getDefinition('borderless');
var borderless:MovieClip = new Borderless;
borderless.x = 250;
borderless.y = 100;
borderless.width = 100;
borderless.height = 100;
var borderlessContents:DisplayObject = borderless.getChildAt(0);
assert(borderless.numChildren === 1);
assert(borderlessContents.x == 0);
assert(borderlessContents.y == 0);
assert(borderlessContents.width == 13.1);
assert(borderlessContents.height == 13.1);
drawArea.addChild(borderless);
drawArea.graphics.lineStyle(1.0, 0xFF0000, 1.0);
drawArea.graphics.moveTo(25, 50);
drawArea.graphics.lineTo(325, 50);
drawArea.graphics.moveTo(25, 150);
drawArea.graphics.lineTo(325, 150);
}
}
static function assert(pass:Boolean, msg:String=null):void {
if (!pass) throw new Error(msg || 'assertion failed');
}
]]></fx:Script>
</s:Application>
可以找到完整的IntelliJ測試項目in this git repository on BitBucket。
閃存編輯聲稱,符號都具有相同的尺寸:通過13.10px 13.10px,雖然在視覺上這似乎是不包括邊界的外半部:
但是,當我使用ActionScript檢查這些圖形的實例時,它會報告邊框圖形較大,爲14.10px,14.10px。
爲什麼用這種奇怪的方式調整這些圖形的邊界?我怎樣才能使這個圖形的邊框和無邊框版本縮放到相同的尺寸?
是你確定兩個盒子的註冊點都在同一個地方?這可以解釋對齊錯誤。 – frankhermes
@frankhermes這是有益的,謝謝。我通過複製邊框符號並刪除邊框來創建無邊界符號,因此註冊點被複制並且與兩個符號中的填充位置相同。但是,這一點在圖形本身的左上方,所以在兩種情況下,點與圖形之間的距離是不同的。 –
我進去並重新創建了這些圖形,以便在中心使用一個註冊點,這種類型固定了它們的對齊方式,除了現在導致圖形出現略微不同的尺寸(我認爲這種情況之前並不存在),而不是略有不同的立場。我會更新這個問題。 –