2010-11-09 40 views
1

我在清除/重繪圖形時遇到了使用JointStyle.MITER的不良後果。ActionScript - 使用JointStyle.MITER清除圖形Bug?

我的項目涉及用圓形和銳邊來管理自定義線條圖形,這就是爲什麼我想使用斜接頭的風格。

當線條的厚度大大增加時,即使是線條的圓形區域也受到斜角樣式的影響。雖然我覺得這不幸,但這是可以理解的,而不是我指的錯誤。當減少線條粗細並不能完全清除圖形時,會發生錯誤(?),每當厚度發生變化時,按照代碼的指示執行此操作,從而使線條圖形出現僞跡。文物還留下鋒利的邊緣,而不僅僅是圓角。

我在Mac OS X Snow Leopard(10.6.4)上使用Flash Player 10.1.53.64版。

你可以通過運行下面的示例代碼來測試。使用左右鍵盤箭頭更改圓形矩形的行程的粗細。

更新:圖形工件是膚淺的。在形狀出現後將形狀拖動到它們的位置將會移除它們。代碼使用拖動功能進行更新。

package 
{ 
import flash.display.CapsStyle; 
import flash.display.JointStyle; 
import flash.display.LineScaleMode; 
import flash.display.Sprite; 
import flash.events.Event; 
import flash.events.KeyboardEvent; 
import flash.events.MouseEvent; 
import flash.ui.Keyboard; 

public class StrokeWidth extends Sprite 
    { 
    private var roundRect:Sprite = new Sprite(); 
    private var strokeThickness:Number = 6; 

    public function StrokeWidth() 
     { 
     addEventListener(Event.ADDED_TO_STAGE, init); 
     } 

    private function init(evt:Event):void 
     { 
     removeEventListener(Event.ADDED_TO_STAGE, init); 
     stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownEventListener); 
     roundRect.addEventListener(MouseEvent.MOUSE_DOWN, mouseEventListener); 
     roundRect.addEventListener(MouseEvent.MOUSE_UP, mouseEventListener); 

     drawRoundRect(); 
     roundRect.x = roundRect.y = 100; 
     addChild(roundRect); 
     } 

    private function drawRoundRect():void 
     { 
     roundRect.graphics.clear(); 
     roundRect.graphics.lineStyle(strokeThickness, 0x000000, 1.0, true, LineScaleMode.NONE, CapsStyle.NONE, JointStyle.MITER); 
     roundRect.graphics.beginFill(0xFF0000); 
     roundRect.graphics.drawRoundRect(0, 0, 400, 200, 100); 
     } 

    private function mouseEventListener(evt:MouseEvent):void 
     { 
     switch (evt.type) 
       { 
       case MouseEvent.MOUSE_DOWN: roundRect.startDrag(); break; 
       case MouseEvent.MOUSE_UP: roundRect.stopDrag(); 
       } 
     } 

    private function keyDownEventListener(evt:KeyboardEvent):void 
     { 
     switch (evt.keyCode) 
       { 
       case Keyboard.LEFT:  strokeThickness -= 1;  break; 
       case Keyboard.RIGHT: strokeThickness += 1; 
       } 

     drawRoundRect(); 
     } 
    } 
} 

alt text

回答

1

有意思。該問題引起的,因爲線型的縮放模式設置爲none:

LineScaleMode.NONE 

其更改爲正常的解決了這個問題:

LineScaleMode.NORMAL 
+0

THANKYOU !!只是在尋找解決相同問題的方法。解決方案完美運作:-) – 2011-02-13 13:27:21

0

怎麼樣重新創建形狀?

+0

想象補間的線寬。我相信只要清除圖形並重新繪製,而不是從顯示列表中刪除先前的形狀,實例化新形狀,繪製形狀並將其添加到顯示列表,管理起來會更快更容易。我的意思是,這不是clear()函數的全部內容嗎? – TheDarkIn1978 2010-11-09 16:56:06

+0

@TheDarkInI1978:也許掩蓋? – www0z0k 2010-11-09 17:08:22

+0

這是一個想法,但在這一點上,我更感興趣知道這是否是一個實際的錯誤。此外,我不確定遮罩是否會起作用,因爲這些圖形工件是膚淺的。如果將形狀轉換爲精靈並使其可拖動,則當形狀移動到其上時,形狀就像是工件的橡皮擦。 – TheDarkIn1978 2010-11-10 04:50:16