我有一个我遵循的登录教程的代码。
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;
}
}
}我不确定在哪里放置我的按钮电影剪辑和文本字段的所有这些实例,但当我运行我的程序时,我得到了这个错误。
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()我试着寻找我能理解的答案,但一无所获。任何帮助都将不胜感激,谢谢。
发布于 2016-04-10 15:31:18
您得到了Stack overflow错误,因为您在其构造函数中使用var login_form:login = new login();创建了一个实例化login类的无限循环,因此该类的每个实例都将创建另一个实例。
应仅在要插入类的时间/位置实例化该类,例如,在主时间轴或文档类中...,或仅通过将其直接拖放到舞台上。
但是在实例化login类之前,您应该正确地创建它。为此,您可以添加您的对象(Button、MovieClips、TextFields等)通过将它们拖放到MovieClip的舞台上,或通过使用以下命令的代码手动完成:
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);这个操作通常只做一次,然后你可以像这样使用你的对象,例如:
var user_name:String = username.text;
if(password.text != ''){ /* ... */ }
login_button.x = 30;由于您是初学者,因此可以启动Learning ActionScript 3 here。
希望这能有所帮助。
发布于 2016-04-10 15:28:35
您似乎是在创建login类的一个实例,并将其添加到其自身中,这导致了登录构造函数中的无限递归。
var login_form:login = new login();
您应该从另一个对象初始化登录类,然后将其添加到舞台上一次。
https://stackoverflow.com/questions/36525454
复制相似问题