Frage

Ich bin gekommen, über eine unerwünschte Wirkung der Verwendung von JointStyle.MITER wenn Clearing / Nachziehen Grafiken.

Mein Projekt umfasst mit beiden runden und scharfen Kanten benutzerdefinierte Linien Grafiken verwalten, weshalb ich möchte eine Gehrung Stil verwenden.

Wenn die Linienstärke stark erhöht, auch die runden Bereiche der Linie durch den Mitra Stil beeinflusst. Während ich diese unglückliche finden, ist es verständlich, und nicht der Fehler, den ich mich beziehe. der Fehler (?) tritt auf, wenn die Linienstärke Verringerung die Grafik nicht vollständig klar, wie angewiesen, so durch den Code jedes Mal der Dickenänderungen zu tun, Artefakte der Liniengrafik zu verlassen, wo die Linie einmal war. Artefakte werden auch durch scharfe Kanten hinterlassen, nicht nur abgerundeten Ecken.

Ich bin mit Flash Player Version 10.1.53.64 auf Mac OS X Snow Leopard (10.6.4).

Sie können dies testen, indem mein Beispielcode unten ausgeführt wird. Verwenden Sie die linken und rechten Pfeiltasten, die Dicke des Strichs eines runden rect ändern.

Update: Die Grafik-Artefakte oberflächlich sind. Ziehen der Form über ihre Lage, nachdem sie sie entfernen wird angezeigt. Code aktualisiert mit Funktionalität ziehen.

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

War es hilfreich?

Lösung

interessant. das Problem verursacht wurde, weil die linestyle-Skala Modus auf none gesetzt wurde:

LineScaleMode.NONE

es normal behebt das Problem zu ändern:

LineScaleMode.NORMAL

Andere Tipps

was ist neu zu erstellen, die die Form?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top