Границы в API рисования Flash рисуются внутри или снаружи фигуры? - PullRequest
2 голосов
/ 03 мая 2010

Когда я рисую прямоугольники и т. Д. В ActionScript, используя API-интерфейс рисования Flash Player (т. Е. Класс Graphics), линия границы этой фигуры рисуется снаружи или внутри фигуры? Т.е. какая из следующих диаграмм правильно изображает прямоугольник, нарисованный на границе области содержимого в пользовательском компоненте?

Flash drawing question

Я просмотрел документацию для Graphics класса и не смог найти никаких подсказок.

1 Ответ

2 голосов
/ 03 мая 2010

Я написал короткий тест, используя пользовательский компонент с фиксированным размером, рисуя несколько линий в качестве ссылки, затем рисуя прямоугольник с рамкой шириной 30 пикселей на белом фоне. Вот как это выглядит, см. Код ниже:

Flash graphics test

Итак, ссылаясь на картинку в вопросе, вторая диаграмма («по центру») правильно отображает способ рисования Flash Player.

Также обратите внимание, как внутренние линии (в 45 пикселей) находятся прямо внутри прямоугольника, тогда как внешние линии (в 15 пикселей) совпадают с внешними пределами прямоугольника.

Это код для тестового приложения:

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:test="*">
    <test:TestCanvas horizontalCenter="0" verticalCenter="0" id="canvas" />
</mx:Application>

А это TestCanvas компонент:

public class TestCanvas extends UIComponent
{
    public function TestCanvas()
    {
        super();
    }

    override protected function measure():void
    {
        super.measure();
        this.measuredWidth = this.minWidth = 300;
        this.measuredHeight = this.minHeight = 300;
    }

    override protected function updateDisplayList(w:Number, h:Number):void
    {
        super.updateDisplayList(w, h);
        this.graphics.clear();

        this.graphics.lineStyle(undefined);
        this.graphics.beginFill(0xffffff);
        this.graphics.drawRect(0, 0, w, h);
        this.graphics.endFill();

        this.graphics.lineStyle(0, 0xff0000, 0.5);
        this.graphics.moveTo(0, 15);
        this.graphics.lineTo(300, 15);
        this.graphics.moveTo(0, 45);
        this.graphics.lineTo(300, 45);
        this.graphics.moveTo(15, 0);
        this.graphics.lineTo(15, 300);
        this.graphics.moveTo(45, 0);
        this.graphics.lineTo(45, 300);

        this.graphics.lineStyle(0, 0xff0000, 0.75);
        this.graphics.moveTo(0, 30);
        this.graphics.lineTo(300, 30);
        this.graphics.moveTo(30, 0);
        this.graphics.lineTo(30, 300);

        this.graphics.lineStyle(30, 0x0000ff, 0.25, false, "normal", null, JointStyle.MITER);
        this.graphics.drawRect(30, 30, 240, 240);
    }
...