J'ai rencontré un effet indésirable d'utiliser JointStyle.MITER lors de l'effacement/redessiner des graphiques.ActionScript - Effacement des graphiques avec un bogue JointStyle.MITER?
Mon projet consiste à gérer des graphiques linéaires personnalisés avec des arêtes arrondies et des arêtes vives, c'est pourquoi je voudrais utiliser un style de joint d'onglet.
Lorsque l'épaisseur de ligne est fortement augmentée, même les zones rondes de la ligne sont affectées par le style d'onglet. Bien que je trouve cela regrettable, c'est compréhensible et pas le bug dont je parle. le bogue (?) se produit lorsque la diminution de l'épaisseur de la ligne n'efface pas complètement les graphiques, comme indiqué par le code chaque fois que l'épaisseur change, laissant des artefacts des graphiques de ligne où la ligne était autrefois. Les artefacts sont également laissés par des arêtes vives, pas seulement des coins arrondis. J'utilise la version 10.1.53.64 de Flash Player sur Mac OS X Snow Leopard (10.6.4).
Vous pouvez tester cela en exécutant mon exemple de code ci-dessous. utilisez les flèches gauche et droite du clavier pour modifier l'épaisseur du contour d'un rect rectangle.
Mise à jour: Les artefacts graphiques sont superficiels. Faites glisser la forme sur leur emplacement après leur apparition pour les supprimer. Code mis à jour avec la fonctionnalité de 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();
}
}
}
MERCI !! Cherchait juste la solution au même problème. La solution a fonctionné parfaitement! :-) –