代码之家  ›  专栏  ›  技术社区  ›  Chunky Chunk

ActionScript-清除带有JointStyle.MITER错误的图形?

  •  1
  • Chunky Chunk  · 技术社区  · 14 年前

    在清除/重绘图形时,我遇到了使用JointStyle.MITER的不良效果。

    当线的厚度大大增加时,即使是线的圆形区域也会受到斜接样式的影响。虽然我觉得这很不幸,但这是可以理解的,而不是我所指的bug。虫子(?)在减小线条粗细并没有完全清除图形时发生,每次粗细更改时代码都会指示这样做,使线条图形的伪影保留在线条原来的位置。文物也留下了尖锐的边缘,而不仅仅是圆角。

    您可以通过运行下面的示例代码来测试这一点。使用左右键盘箭头更改圆形矩形笔划的粗细。

    更新:

    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

    2 回复  |  直到 13 年前
        1
  •  1
  •   Chunky Chunk    14 年前

    很有趣。导致此问题的原因是线型的缩放模式设置为“无”:

    LineScaleMode.NONE
    

    将其更改为“普通”可解决问题:

    LineScaleMode.NORMAL
    
        2
  •  0
  •   www0z0k    14 年前

    重新创建形状怎么样?