【发布时间】:2015-05-29 21:58:46
【问题描述】:
我正在尝试制作一个小游戏,这需要使用几个“循环”。在我的例子中,首先向用户展示了两个字段和一个“连接”按钮。一旦他点击按钮,字段和按钮就会被移除,游戏会移动到另一个包含一个“断开连接”按钮的屏幕,这会将他再次带到第一个屏幕。这是我的幼稚实现(我简化了很多):
package Application {
import flash.display.Sprite;
import flash.events.Event;
import fl.controls.TextArea;
import fl.controls.Button;
import flash.events.MouseEvent;
public class Main extends Sprite {
var IPField:TextArea;
var PortField:TextArea;
var disconnectButton:Button;
var nickField:TextArea;
var passField:TextArea;
var loginButton:Button;
var network:NetworkHandler;
public function Main() {
IPField = new TextArea();
PortField = new TextArea();
disconnectButton = new Button();
// Snipped : positioning the Buttons and TextAreas
network = new NetworkHandler(this.stage, IPField, PortField);
network.addEventListener("connection_opened", onConnect);
network.addEventListener("connection_error", onError);
disconnectButton.addEventListener(MouseEvent.CLICK, network.doConnect);
addChild(IPField);
addChild(PortField);
addChild(disconnectButton);
}
private function onConnect(e:Event):void {
removeChild(IPField);
removeChild(PortField);
removeChild(disconnectButton);
disconnectButton.removeEventListener(MouseEvent.CLICK, network.doConnect);
network.removeEventListener("connection_opened", onConnect);
network.removeEventListener("connection_error", onError);
network.addEventListener("connection_closed", returnToConnect);
network.addEventListener("connection_error", returnToConnect);
disconnectButton.addEventListener(MouseEvent.CLICK, network.doDisconnect);
addChild(disconnectButton);
}
private function returnToConnect(e:Event):void {
loginButton.removeEventListener(MouseEvent.CLICK,network.doConnect);
removeChild(disconnectButton);
network.removeEventListener("connection_closed", returnToConnect);
network.removeEventListener("connection_error", returnToConnect);
disconnectButton.addEventListener(MouseEvent.CLICK, network.doConnect);
network.addEventListener("connection_opened", onConnect);
network.addEventListener("connection_error", onError);
addChild(IPField);
addChild(PortField);
addChild(disconnectButton);
}
private function onError(e:Event):void {
// Error management
}
}
}
作为记录,NetworkManager 是我设计的一个类,它基本上管理连接,每当连接建立/关闭/删除时调度事件。
所以,我有两个问题:
这不是我用来实现这种递归的方式吗?意思是,如果有人在哪里按连接、断开连接、连接等,最终会导致堆栈溢出吗? (假设页面上有更多的按钮,占用大量内存的东西等)
实现此功能的最佳方法是什么?最后,游戏中还会出现几个“循环”,所以我不确定这是否是一个好的解决方案。游戏开发者常用什么?
【问题讨论】:
标签: actionscript-3 flash loops events actionscript