Доступ к этапу из произвольного места - PullRequest
1 голос
/ 03 сентября 2011

Скажем, у меня есть служебный класс, в котором я хотел бы получить доступ к сцене (чтобы получить frameRate).

Я особо не хочу заставлять пользователя переходить на этапе к каждому методу или устанавливать статическое свойство в моем классе перед его использованием.

Есть ли способ удержать сцену, не пройдя ее? Все, что мне нужно, это frameRate!

Ответы [ 2 ]

0 голосов
/ 03 сентября 2011

Если у вас нет планов по изменению времени выполнения кадров, было бы неплохо использовать класс Settings, содержащий все глобальные значения, которые вы можете использовать в вашем проекте.

Settings.as

package
{
    public class Settings
    {

        public static const FRAMERATE : int = 30;
        public static const BUILD : String = "build 0.12";
        public static const APPLICATION_WIDTH : int = 800;
        public static const APPLICATION_HEIGHT : int = 800;

    }
}

Main.as

package
{
    import flash.display.Sprite;

    public class Main extends Sprite
    {

        public function Main()
        {
            stage.frameRate = Settings.FRAMERATE;
        }

    }
}
0 голосов
/ 03 сентября 2011

установите частоту кадров как общедоступную статическую переменную или общедоступную константу в вашем основном классе документов (или, если когда-либо доступна ссылка на сцену), затем вызовите эту статическую переменную из вашего служебного класса:

Класс документа

package
{
    //Imports
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;

    //Class
    [SWF(width = "1000", height = "500", BackgroundColor = "0x555555")]
    public class DocumentClass extends Sprite
    {
        //Static Variables
        public static var FRAME_RATE:uint;

        //Constructor
        public function DocumentClass()
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            stage.frameRate = FRAME_RATE = 60;

            //...
        }
    }
}

Класс полезности

package
{
    //Imports
    import flash.events.EventDispatcher;

    //Class
    public class UtilityClass extends EventDispatcher
    {
        //Constructor
        public function UtilityClass()
        {
            trace("SWF Frame Rate: " + DocumentClass.FRAME_RATE);
        }
    }
}

[EDIT]:


в вашем случае, когда у вас нет прямого доступа к стадии, ваши пользователи могут передать значение stage.frameRate конструктору вашего служебного класса, но я уверен, что вы согласитесь, что этот подход не очень элегантный. я думаю, что ваша идея измерить интервалы между событиями ENTER_FRAME - лучшее решение.

...