this.width внутри класса всегда возвращает одно и то же значение - PullRequest
1 голос
/ 13 февраля 2010

В моем классе AS3 я звоню this.width, и возвращаемое им значение всегда равно 1, хотя это невозможно, учитывая содержимое объекта.

Это стандартное поведение для AS3?

Простая версия класса размещена ниже. Он прикреплен к символу MovieClip, который содержит простой шестиугольник.

package {

    import flash.display.*;
    import flash.utils.*;
    import flash.events.*;

    public class Hexagon extends MovieClip
    {
        var startWidth:Number;
        var startHeight:Number;

        public function Hexagon() 
        {
            var myTimer:Timer = new Timer(2000);
            myTimer.addEventListener(TimerEvent.TIMER, timerFunction);
            myTimer.start();

            startWidth = this.width;
            startHeight = this.height;

            trace("startWidth:" + " " + startWidth);
            trace("startHeight:" + " " + startHeight);
        }

        function timerFunction (evt:TimerEvent):void
        {

        }
    }
}

1 Ответ

0 голосов
/ 20 февраля 2010

Да, это стандартно, это потому, что вы запрашиваете ширину и высоту в конструкторе, и в этот момент настройки свойства / средства доступа не устанавливаются. Подождите, пока свойства не будут установлены официально, что наиболее надежно после Event.ADDED_TO_STAGE. Это работает для меня:

package
{
    import flash.display.*;
    import flash.events.*;
    import flash.utils.*;

    public class Movie extends MovieClip
    {
        public var startWidth:Number;
        public var startHeight:Number;

        public function Movie() 
        {
            var myTimer:Timer = new Timer(2000);
            myTimer.addEventListener(TimerEvent.TIMER, timerFunction);
            myTimer.start();

            startWidth = this.width;
            startHeight = this.height;

            trace("startWidth:" + " " + startWidth);
            trace("startHeight:" + " " + startHeight);
            addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
        }

        public function addedToStageHandler(event:Event):void
        {
            startWidth = this.width;
            startHeight = this.height;

            trace("new startWidth:" + " " + startWidth);
            trace("new startHeight:" + " " + startHeight);
        }

        public function timerFunction(evt:TimerEvent):void
        {

        }
    }
}

Дайте мне знать, если это поможет, Lance

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...