Pregunta

Me he encontrado con un efecto no deseado de utilizar JointStyle.MITER cuando se desmonte / volver a dibujar los gráficos.

Mi proyecto consiste en la gestión de gráficos de línea personalizados con ambos bordes redondeados y afilados, por lo que me gustaría utilizar un estilo de junta a inglete.

Cuando el grosor de la línea se incrementa en gran medida, incluso las zonas redondas de la línea se ven afectados por el estilo de inglete. Mientras Me parece lamentable, es comprensible y no el error que me refiero. el error (?) se produce cuando la disminución del grosor de la línea, no se borran por completo los gráficos, ya que se lo indique el código cada vez que los cambios de espesor, dejando artefactos de los gráficos de línea, donde fue una vez la línea. Los artefactos también son dejados por los bordes afilados, no sólo las esquinas redondeadas.

Estoy usando la versión de Flash Player 10.1.53.64 en Mac OS X Snow Leopard (10.6.4).

Puede probarlo al ejecutar el código de ejemplo a continuación. utilizar las flechas del teclado izquierda y derecha cambian el espesor de la carrera de un rect ronda.

Actualización: artefactos Los gráficos son superficiales. Arrastrando la forma sobre su ubicación después de que aparezcan los quitará. Código actualizado con funcionalidad arrastrar.

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();
        }
    }
}

text alt

¿Fue útil?

Solución

interesante. el problema fue causado porque el modo de escala de lineStyle se establece en ninguno:

LineScaleMode.NONE

cambiándolo a correcciones normales el problema:

LineScaleMode.NORMAL

Otros consejos

¿qué pasa con la recreación de la forma?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top