首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flash AS3堆栈溢出

Flash AS3堆栈溢出
EN

Stack Overflow用户
提问于 2016-04-10 11:33:49
回答 2查看 175关注 0票数 0

我有一个我遵循的登录教程的代码。

代码语言:javascript
复制
package {

    /*
    always extend a class using movieclip instead of sprite when using flash.
    */

    import flash.display.MovieClip;
    import flash.events.*;
    import flash.net.*;
    import flash.text.*;


    /*
    create our class
    */



public class login extends MovieClip {

;


public function login ():void {

            var login_form:login = new login(); 
            addChild(login_form);
            var username:TextField = new TextField();
            addChild(username);
            var password:TextField = new TextField();
            addChild(password);
            var login_button:MovieClip = new MovieClip();
            addChild(login_button);

             /*
            buttonMode gives the submit button a rollover
            */

            login_button.buttonMode = true;

            /*
            what this says is that when our button is pressed, the checkLogin function will run
            */

            login_button.addEventListener(MouseEvent.MOUSE_DOWN, checkLogin);

            /*
            set the initial textfield values
            */

            username.text = "";
            password.text = "";

        }

public function checkLogin (e:MouseEvent):void {

            var username:TextField = new TextField();
            addChild(username);
            var password:TextField = new TextField();
            addChild(password);

    /*
    check fields before sending request to php
    */

    if (username.text == "" || password.text == "") {

        /*
        if username or password fields are empty set error messages
        */

        if (username.text == "") {

        username.text = "Enter your username";

        } 

        if (password.text == "") {

        password.text = "Enter your password";

        }

    } else {

        /*
        init function to process login
        */

        processLogin();

    }

}

public function processLogin ():void {

            var username:TextField = new TextField();
            addChild(username);
            var password:TextField = new TextField();
            addChild(password);

    /*
    variables that we send to the php file
    */

    var phpVars:URLVariables = new URLVariables();

    /*
    we create a URLRequest  variable. This gets the php file path.
    */

    var phpFileRequest:URLRequest = new URLRequest("php/controlpanel.php");

    /*
    this allows us to use the post function in php
    */

    phpFileRequest.method = URLRequestMethod.POST;

    /*
    attach the php variables to the URLRequest
    */

    phpFileRequest.data = phpVars;

    /*
    create a new loader to load and send our urlrequest
    */

    var phpLoader:URLLoader = new URLLoader();
    phpLoader.dataFormat = URLLoaderDataFormat.VARIABLES;   
    phpLoader.addEventListener(Event.COMPLETE, showResult);

    /*
    now lets create the variables to send to the php file
    */

    phpVars.systemCall = "checkLogin";
    phpVars.username = username.text;
    phpVars.password = password.text;

    /*
    this will start the communication between flash and php
    */

    phpLoader.load(phpFileRequest);

}

     public function showResult (event:Event):void {


                    var result_text:TextField = new TextField();
            addChild(result_text);


    /*

    this autosizes the text field

    ***** You will need to import flash's text classes. You can do this by adding: 

    import flash.text.*;

    ...to your list of import statements 

    */

    result_text.autoSize = TextFieldAutoSize.LEFT;

    /*
    this gets the output and displays it in the result text field
    */

    result_text.text = "" + event.target.data.systemResult;

}

}
}

我不确定在哪里放置我的按钮电影剪辑和文本字段的所有这些实例,但当我运行我的程序时,我得到了这个错误。

代码语言:javascript
复制
Error: Error #1023: Stack overflow occurred.
    at flash.display::DisplayObject()
    at flash.display::InteractiveObject()
    at flash.text::TextField()
    at flash.display::Sprite/constructChildren()
    at flash.display::Sprite()
    at flash.display::MovieClip()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()
    at login()

我试着寻找我能理解的答案,但一无所获。任何帮助都将不胜感激,谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-04-10 15:31:18

您得到了Stack overflow错误,因为您在其构造函数中使用var login_form:login = new login();创建了一个实例化login类的无限循环,因此该类的每个实例都将创建另一个实例。

应仅在要插入类的时间/位置实例化该类,例如,在主时间轴或文档类中...,或仅通过将其直接拖放到舞台上。

但是在实例化login类之前,您应该正确地创建它。为此,您可以添加您的对象(Button、MovieClips、TextFields等)通过将它们拖放到MovieClip的舞台上,或通过使用以下命令的代码手动完成:

代码语言:javascript
复制
var username:TextField = new TextField();
addChild(username);

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

// LoginButton here is the AS linkage of a MovieClip/Button in the library  
var login_button:LoginButton = new LoginButton();
addChild(login_button);

这个操作通常只做一次,然后你可以像这样使用你的对象,例如:

代码语言:javascript
复制
 var user_name:String = username.text;

 if(password.text != ''){ /* ... */ }

 login_button.x = 30;

由于您是初学者,因此可以启动Learning ActionScript 3 here

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2016-04-10 15:28:35

您似乎是在创建login类的一个实例,并将其添加到其自身中,这导致了登录构造函数中的无限递归。

var login_form:login = new login();

您应该从另一个对象初始化登录类,然后将其添加到舞台上一次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36525454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档