AS3 рисует больше спрайта, чем я установил (отступ / маржа?) - PullRequest
0 голосов
/ 30 марта 2012

Я создал свою собственную кнопку, которая просто простирается от Sprite. Он способен показывать 3 различных текста, появляющихся и исчезающих с помощью таймера. В моей функции рисования я сначала рисую прямоугольник с графическим объектом Sprites, представляющим фон кнопки.

Я добавил функцию для установки ширины кнопки. Это свойство используется для рисования прямоугольника. Я знаю, что размер спрайтов обновляется после рисования прямоугольника. Но по какой-то причине ширина спрайта всегда больше, чем я установил с помощью функции setButtonWidth.

Теперь у меня есть простой спрайт, выполняющий функцию кнопки, имеющей часть graphics.drawRectangle, рисующую простой прямоугольник. скажем, шириной 500 пикселей. Но когда я отслеживаю ширину этой кнопки, она всегда примерно на 10% больше. Откуда эти 10%?

Я читал о вызове validateNow (). Но это только для ярлыков или флажков. По какой-то причине я не могу получить доступ к библиотеке для Label. Это должно как-то работать с TextFields. Но как?

// this function is part of MyButtonClass.as file
function drawButton()
{
  this.graphics.clear();
  this.graphics.beginFill( currentBackColor);
  this.graphics.drawRoundRect(0, 0, int(this.buttonWidth)+20, 30, 10, 10);
  this.graphics.endFill();
}

// this code is in main action code frame
// the buttonWidth is set this way
stage.addEventListener( Event.RESIZE, updateBtn);
function updateBtn( event:Event)
{
  // access the container in which the buttons are in like ...
  for( var i = 0; i < buttonContainer.numChildren; i++) {
    var btn = buttonContainer.getChildAt( i) as MyButtonClass;
    // MyButtonClass is the class which extends from Sprite drawing my button
    // and using buttonWidth to draw the backgrounds width.
    btn.setButtonWidth( (stage.stageWidth / 2) - 20);
    // i set half of stageWidth because i have two columns with a list of buttons
    // after setButtonWidth is called in MyButtonClass, the draw function is called
    // which does the graphics stuff above.
  }
}

this.buttonWidth имеет значение 500. На этом спрайте ничего особенного не делается. Не нужно добавлять детей, только этот материал для рисования. Но это устанавливает ширину спрайта в 550 или что-то в этом роде.

1 Ответ

0 голосов
/ 30 марта 2012

Определить Button как это

package {

    import flash.display.Sprite;

    public class Button extends Sprite {

        private var _buttonWith: int = 0;
        private var _buttonHeight: int = 0;

        public function Button() {
            // constructor code
        }

        public function set buttonWidth(w: int): void {
            _buttonWith = w;
            updateButton();
        }

        public function get buttonWidth(): int {
            return _buttonWith;
        }

        public function set buttonHeight(h: int): void {
            _buttonHeight = h;
            updateButton();
        }

        public function get buttonHeight(): int {
            return _buttonHeight;
        }

        protected function updateButton() {
            graphics.clear();
            graphics.beginFill(0xff00ff);
            graphics.drawRoundRect(0, 0, buttonWidth, buttonHeight, 10, 10);
            graphics.endFill();
        }
    }
}

И создайте экземпляр как этот

var button:Button = new Button();
addChild(button);

button.buttonWidth = 100;
button.buttonHeight  = 30;
...