Question

Je suis tombé sur un effet indésirable d'utiliser JointStyle.MITER lorsque Clearing / redessiner graphiques.

Mon projet consiste à gérer les graphiques de ligne personnalisé avec les deux bords ronds et pointus, ce qui est la raison pour laquelle je voudrais utiliser un style joint à onglet.

Lorsque l'épaisseur de la ligne est fortement augmentée, même les zones autour de la ligne sont affectés par le style d'onglet. Bien que je trouve cela regrettable, il est compréhensible et non le bug que je fais allusion. le bug (?) se produit lors de la diminution de l'épaisseur de ligne ne disparaît pas complètement les graphiques, selon les instructions de le faire par le code à chaque fois que les changements d'épaisseur, ce qui laisse des objets graphiques en ligne où la ligne était une fois. Les artefacts sont également laissés par des arêtes vives, et pas seulement des coins arrondis.

J'utilise la version de Flash Player 10.1.53.64 sous Mac OS X Snow Leopard (10.6.4).

Vous pouvez tester en exécutant mon code exemple ci-dessous. utiliser les flèches du clavier gauche et droite changent l'épaisseur de la course d'un tour rect.

Mise à jour: Les objets graphiques sont superficiels. Faire glisser la forme sur leur emplacement après leur apparition les enlèvera. Code mis à jour avec la fonctionnalité glisser.

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

Était-ce utile?

La solution

intéressant. le problème a été causé parce que le mode d'échelle de lineStyle a été définie sur none:

LineScaleMode.NONE

changer de corrections normales, le problème:

LineScaleMode.NORMAL

Autres conseils

Qu'en est-il de recréer la forme?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top