Domanda

ho incontrato un effetto indesiderato di utilizzare JointStyle.MITER quando compensazione / ridisegnare la grafica.

Il mio progetto prevede la gestione grafica di linea personalizzati con entrambi i bordi rotondi e taglienti, che è il motivo per cui vorrei utilizzare uno stile giunto obliquo.

Quando lo spessore della linea è notevolmente aumentato, anche le aree circolari della linea sono colpiti dallo stile mitra. Mentre trovo questo sfortunato, è comprensibile e non il bug a cui mi riferisco. il bug (?) si verifica quando diminuendo lo spessore della linea non del tutto chiara la grafica, come indicato a farlo con il codice ogni volta che cambia di spessore, lasciando gli artefatti della grafica di linea dove la linea era una volta. Manufatti sono anche lasciati dai bordi taglienti, non solo angoli arrotondati.

Sto usando Flash Player versione 10.1.53.64 su Mac OS X Snow Leopard (10.6.4).

È possibile verificare ciò eseguendo il mio codice di esempio riportato di seguito. utilizzare i tasti freccia sinistra e destra cambiare lo spessore del tratto di un rettangolo rotondo.

Aggiornamento: artefatti la grafica è superficiale. Trascinando la forma sopra la loro posizione dopo che appaiono li rimuoverà. Codice aggiornato con il trascinamento funzionalità.

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

È stato utile?

Soluzione

interessante. il problema è stato causato perché la modalità di scala del lineStyle è stato fissato a nessuno:

LineScaleMode.NONE

a cambiarlo con correzioni normali il problema:

LineScaleMode.NORMAL

Altri suggerimenti

che dire di ricreare la forma?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top