Вызов функции в пакете AS3

Ниже приведен код MXML, созданный из Flash Builder 4.5 с AIR SDK 3.0. Используя фреймворк Starling для создания 2D-анимации и задаетесь вопросом, как вызвать функцию addText без создания нового экземпляра Game?

main.mxml - это основное приложение:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       applicationComplete="windowedapplication1_applicationCompleteHandler(event)"
                       backgroundAlpha="0" showStatusBar="false" height="700" frameRate="60" width="800">
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;
            import starling.core.Starling;

            private var mStarling:Starling;

            protected function windowedapplication1_applicationCompleteHandler(event:FlexEvent):void
            {

                stage.scaleMode = StageScaleMode.NO_SCALE;
                stage.align = StageAlign.TOP_LEFT;
                this.y=0;

                mStarling = new Starling(Game, stage);
                mStarling.start();
            }

            private function gaa():void {
                //How to access addText() in Games.as?
            }

        ]]>
    </fx:Script>
    <s:Button x="693" y="19" label="Add Text" click="gaa()"/>

</s:WindowedApplication>

Games.as - это пакет, создающий спрайты:

package 
{
    import scenes.Scene;
    import starling.display.Button;
    import starling.display.Image;
    import starling.display.Sprite;
    import starling.events.Event;
    import starling.textures.Texture;

    public class Game extends Sprite
    {
        private var mMainMenu:Sprite;
        private var mCurrentScene:Scene;

        public function Game()
        {
            var bg:Image = new Image(Assets.getTexture("Background"));
            addChild(bg);

            mMainMenu = new Sprite();   //create new sprite
            addChild(mMainMenu);

        }
        public function addText():void {
            var logo:Image = new Image(Assets.getTexture("Logo"));  //add logo
            logo.x = int((300 - logo.width) / 2);
            logo.y = 50;
            mMainMenu.addChild(logo);
        }
    }
}

person James Lei    schedule 08.10.2011    source источник


Ответы (1)


как вызвать функцию addText без создания нового экземпляра Game?

Вам необходимо использовать статические методы для вызова метода класса без создания его экземпляра. Что-то вроде этого:

    public static function addText():void {
        var logo:Image = new Image(Assets.getTexture("Logo"));  //add logo
        logo.x = int((300 - logo.width) / 2);
        logo.y = 50;
        mMainMenu.addChild(logo);
    }

Затем вы можете вызвать метод следующим образом:

Games.addText()

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

person JeffryHouser    schedule 08.10.2011