Мой drawRoundRect не рисует скругленный прямоугольник :( [Flash] - PullRequest
1 голос
/ 07 января 2010

Я только что написал класс Background для нового проекта. Фон в основном будет представлять собой 2 скругленных прямоугольника с простым штрихом и цветом заливки, накладываемым друг на друга.

В любом случае, сейчас я просто пытаюсь нарисовать 1 скругленный прямоугольник, но по какой-то причине я нигде не вижу его на сцене :( Никаких ошибок и мои трассировки не отображаются правильно. Это пример Я следил. Я также включил код из моего класса Document, который рисует фон.

Background.as

package src.display{

import flash.display.DisplayObject;
import flash.display.Graphics;
import flash.display.JointStyle;
import flash.display.LineScaleMode;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;

public class Background extends Sprite {

    private const position:Number = 0;

    private var child:Shape       = new Shape();
    private var bgColor:uint      = 0xE8E7E7;
    private var borderColor:uint  = 0xCCCCCC;
    private var borderSize:uint   = 1;
    private var cornerRadius:uint = 3;
    private var sizeW:uint;
    private var sizeH:uint;

    public function Background():void {
        if (stage) {
            init();
        } else {
            addEventListener(Event.ADDED_TO_STAGE, init);
        }
    }

    private function init(e:Event = null):void {
        removeEventListener(Event.ADDED_TO_STAGE, init);
    }

    public function draw(w, h):void {
        sizeW=w; //w & h are passed from Document class
        sizeH=h;

        child.graphics.beginFill(bgColor);
        child.graphics.lineStyle(borderSize, borderColor);
        child.graphics.drawRoundRect(position, position, sizeW-1, sizeH-1, cornerRadius);
        child.graphics.endFill();

        addChild(child);

        trace("child.x = "+child.x);
        trace("child.x = "+child.y);
        trace("child.w = "+child.width);
        trace("child.h = "+child.height);

    }
}

}

Все мои следы отображаются правильно:

child.x = 0
child.x = 0
child.w = 520
child.h = 510

Вот код из моего класса Document, который устанавливает класс Background:

private function drawBackground():void
    {
        trace("\r"+"drawBackground called");

        bg = new Background();
        bg.draw(globalWidth, globalHeight);

        trace("drawBackground end");
    }

1 Ответ

3 голосов
/ 07 января 2010

Вы должны добавить свой bg где-нибудь в список отображения флэш-памяти, например, на сцену:

bg = new Background();
bg.draw(globalWidth, globalHeight);
stage.addChild(bg);

Еще одно примечание: вам не нужно добавлять дочерний элемент при каждом вызове функции рисования, добавьте его в функцию init:

private function init(e:Event = null):void {
 removeEventListener(Event.ADDED_TO_STAGE, init);
 addChild(child);
}
...