有没有办法用较少的代码写这个?因为如果我在菜单中添加更多按钮,我会的 需要更多的事件执行者和功能,感觉还有其他方法来实现这一点。
代码:
private function addMenu():void
{
var menu:Sprite = new Sprite();
var resumeButton:Sprite = new Sprite();
var exitFullscreenButton:Sprite = new Sprite();
var exitButton:Sprite = new Sprite();
resumeButton.addEventListener(MouseEvent.CLICK, resumeButtonHandeler);
exitFullscreenButton.addEventListener(MouseEvent.CLICK, exitFullscreenButtonHandeler);
exitButton.addEventListener(MouseEvent.CLICK, exitButtonHandeler);
menu.addChild(exitFullscreenButton);
menu.addChild(exitButton);
stage.addChild(menu);
menu.x = stage.stageWidth / 2 - menu.width / 2;
menu.y = stage.stageHeight / 2 - menu.height / 2;
}
private function resumeButtonHandeler(e:MouseEvent):void
{
trace("Im the resumeButton");
}
private function exitFullscreenButtonHandeler(e:MouseEvent):void
{
trace("Im the exitFullscreenButton");
}
private function exitButtonHandeler(e:MouseEvent):void
{
trace("Im the exitButton");
}
答案 0 :(得分:0)
您可以封装按钮创建,例如:
private function addButton(menu:Sprite, clickHandler:Function):void {
var button:Sprite = new Sprite();
button.addEventListener(MouseEvent.CLICK, clickHandler);
menu.addChild(button);
}
此外,您可以使用这样的匿名函数:
button.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void {
doStuff();
});
但我不建议使用匿名功能。也许它会保存一些代码行,但源代码将更难读(imho)并且它可能会发生一些内存泄漏。
一般来说,我建议你不要忘记你可以将逻辑分成不同的类。
答案 1 :(得分:0)
保留设置功能(addMenu),但删除侦听器并添加新行:
private function addMenu():void
{
var menu:Sprite = new Sprite();
var resumeButton:Sprite = new Sprite();
var exitFullscreenButton:Sprite = new Sprite();
var exitButton:Sprite = new Sprite();
//you are missing the resume button? intentional?
menu.addChild(exitFullscreenButton);
menu.addChild(exitButton);
stage.addChild(menu); // !!!
menu.addEventListener(MouseEvent.CLICK, handleMenuClick); //added line
menu.x = stage.stageWidth / 2 - menu.width / 2;
menu.y = stage.stageHeight / 2 - menu.height / 2;
}
然后只需创建一个handleMenuClick函数,该函数将负责处理菜单上的每次点击(其子项):
private function handleMenuClick(e:MouseEvent):void {
switch(e.target) {
case exitFullscreenButton:
trace("exitFullscreenButton click");
break;
case exitButton:
trace("exitButton click");
break;
}
}
请注意,您需要将按钮作为类变量,而不是局部变量!否则你将无法比较参考文献。或者,您可以为其分配.name
属性,然后对其进行比较(e.target.name
)
我劝你把你的物品添加到舞台上,顺便说一句。始终将它们添加到您的舞台所有者(也就是您的主/文档/类)。 (我在代码中将其标记为//!!!