Вопрос

Я столкнулся с нежелательным эффектом использования jobstyle.miter при очистке / перерисающей графике.

Мой проект включает в себя управление собственной графикой линии с круглыми и острыми краями, поэтому я хотел бы использовать стиль совместного использования MITER.

Когда толщина линии значительно повышена, даже круглые области линии влияют стиль 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

Это было полезно?

Решение

интересный. Проблема была вызвана, потому что режим масштаба Linestyle был установлен на None:

LineScaleMode.NONE

Изменение его в нормальные исправления проблемы:

LineScaleMode.NORMAL

Другие советы

Как насчет повторного создания формы?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top