0

スクリプトを停止して「Enter」キーが押されるまで待ってから続行する必要があります。要件が満たされていない場合は、戻ってもう一度待ちます。

私が取り組んでいるゲームへのログイン画面です。ユーザーがEnterキーを押すのを待ってから、提供された資格情報を確認し、それらの評価を許可/拒否する必要があります。

        //log-in screen
        loginframe = new Login_Frame();
        addChild(loginframe);

        LoginToServer();

        function LoginToServer():Boolean
            {

                inputname = new TextField;
                inputname.type = TextFieldType.INPUT;
                inputname.border = true;
                inputname.x = 200;
                inputname.y = 200;
                inputname.height = 35;
                inputname.width = 545;
                inputname.multiline = false;
                inputname.text = "example";
                loginframe.addChild(inputname);


                inputpass = new TextField;
                inputpass.type = TextFieldType.INPUT;
                inputpass.border = true;
                inputpass.x = 200;
                inputpass.y = 300;
                inputpass.height = 35;
                inputpass.width = 545;
                inputpass.multiline = false;
                inputpass.text = "example";
                loginframe.addChild(inputpass);



                loginframe.addEventListener(KeyboardEvent.KEY_UP, hwndLogKeyboard);

                while (!loginsucsess)
                    {
                        //do nothing *this halts the compiler, takes 30+ seconds for window to appear after execution*
                        //and causes the debugger to shut off (due to delay fault)
                        //so i have three problems
                        //1. this is clearly not an accepable way to do this
                        //2. this code dosnt work, without my debugger i cant fix it
                        //3. even if the code did work, this is a huge project, i cant be goin without my debugger
                    }


                    return true;
            }

        function hwndLogKeyboard(evt:KeyboardEvent):void
            {
                if (evt.keyCode == 13)
                    {
                        if ((inputname.text == "tyler") && (inputpass.text == "shadowcopy"))
                            loginsucsess = true;
                    }
            }

私はC++のバックグラウンドを持っており、このソリューションは問題なく機能しますが、フラッシュには親指をいじるのに問題があるようです。

もちろん、私はグーグルに尋ねようとしました、しかし検索結果は必要なトピックにさえ近いものを何でもしませんでした(私:AS3はキーが押されるのを待ちます-グーグル:フラッシュOOPを学びます!)<-いいえ、悪いグーグル。

事前にt​​hx; タイラー

4

1 に答える 1

3

テキストコンソールアプリケーションを作成している場合を除き、UIのブロックはどの言語でも最適ではありません。

while()スクリプトの最大実行タイムアウトに達するまで、実装はステートメント内で無限にループします。

代わりに、非同期デザインパターンを使用してください。

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;

    [SWF(percentWidth = 100, percentHeight = 100, backgroundColor = 0xefefef, frameRate = 60)]
    public class LoginForm extends Sprite
    {

        protected var username:TextField;
        protected var password:TextField;

        public function LoginForm()
        {
            super();

            // construct view
            username = new TextField();
            addChild(username);

            password = new TextField();
            addChild(password);

            // listen for change events from the text fields
            username.addEventListener(Event.CHANGE, loginChangeHandler);
            password.addEventListener(Event.CHANGE, loginChangeHandler);
        }

        protected function loginChangeHandler(event:Event):void
        {
            if ((username.text == "tyler") &&
                (password.text == "shadowcopy"))
            {
                // authentication verified - continue
            }
        }

    }
}

いずれかのテキストフィールドの値が変更されると、指定した認証資格情報についてテストされます。会ったら、続行できます。それ以外の場合、アプリケーションはオーバーヘッドなしでアイドル状態になります。

ログインボタンがあると、ユーザーエクスペリエンスとより一致する可能性があります。

デバッグごとに、Flash Professionalから[デバッグ]メニューに移動し、[ムービーのデバッグ]を選択します。

Flash Builderから、プロジェクトアプリケーションを右クリックして[名前を付けてデバッグ]を選択するか、ツールバーのデバッグボタンを押します。Eclipse上に構築されているため、コードの編集、デバッグ、およびプロファイリングに対してより堅牢であることがわかります。

于 2012-08-02T05:37:09.753 に答える