Я столкнулся с нежелательным эффектом использования JointStyle.MITER при очистке / перерисовке графики.
Мой проект предусматривает управление пользовательской линейной графикой с закругленными и острыми краями, поэтому я бы хотел использовать стиль соединения под углом.
Когда толщина линии значительно увеличивается, стиль митры влияет даже на круглые области линии. Хотя я нахожу это неудачным, это понятно, а не ошибка, о которой я говорю. ошибка (?) возникает, когда уменьшение толщины линии не полностью очищает графику, как указано в коде при каждом изменении толщины, оставляя артефакты линейной графики там, где раньше была линия. Артефакты также оставлены острыми краями, а не просто закругленными углами.
Я использую Flash Player версии 10.1.53.64 в Mac OS X Snow Leopard (10.6.4).
Вы можете проверить это, запустив мой пример кода ниже. используйте стрелки влево и вправо для изменения толщины обводки круглого прямоугольника.
Обновление: Графические артефакты поверхностны. Перетаскивание фигуры по их местоположению после их появления удалит их. Код обновлен с возможностью перетаскивания.
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](https://i.stack.imgur.com/xjoTS.jpg)