gpt4 book ai didi

actionscript-3 - AS3将变量参数传递给通用功能菜单/子项

转载 作者:行者123 更新时间:2023-12-02 03:57:54 30 4
gpt4 key购买 nike

我不是代码天才,而是行动脚本爱好者。
你能帮我吗?

我有一个函数,根据选择的对象,该函数将事件监听器调用已经在舞台上的一组“子项目”(我想在单击时重新使用具有更改参数的子项目,而不是创建多个实例和代码)。

因此,对于每个选定的“案例”,我必须将不同的变量传递给那些“子项目”,如下所示:

function fooMenu(event:MouseEvent):void {
switch (event.currentTarget.name)
{
case "btUa1" :
trace(event.currentTarget.name);
// a bunch of code goes here
//(just cleaned to easy the view)
/*
HELP HERE <--
here is a way to pass the variables to those subitems
*/

break;
}
}

function fooSub(event:MouseEvent):void
{
trace(event.target.data);
trace(event.currentTarget.name);
// HELP PLEASE <-> How can I access the variables that I need here ?
}

btUa1.addEventListener(MouseEvent.CLICK, fooMenu);
btUa2.addEventListener(MouseEvent.CLICK, fooMenu);

btTextos.addEventListener(MouseEvent.CLICK, fooSub);
btLegislacao.addEventListener(MouseEvent.CLICK, fooSub);

有人帮我吗?
非常感谢。 :)

最佳答案

(我不确定我的问题是对的,而且我有一段时间没有在AS3中进行开发了。)

如果您只想创建带有将在单击(或其他事件)时调用的参数的函数,则可以使用以下命令:

btUa1.addEventListener(MouseEvent.CLICK, function() {
fooMenu(parameters);
});

btUa2.addEventListener(MouseEvent.CLICK, function() {
fooMenu(other_parameters)
}):

public function fooMenu(...rest):void {
for(var i:uint = 0; i < rest.length; i++)
{
// creating elements
}
}

如果要调用分配给其他对象的事件侦听器,则可以使用DispatchEvent
btnTextos.dispatchEvent(new MouseEvent(MouseEvent.CLICK))

请记住,您不能使用btTextos.addEventListener(MouseEvent.CLICK,carregaConteudo(“jocasta”));因为您在添加Eventlistener时传递的第二个参数将被视为函数本身-有两种使用addEventListener的正确方法:

1:
function doSomething(event:MouseEvent):void
{
// function code
}
element.addEventListener(MouseEvent.CLICK, doSomething); //notice no brackets

2:
element.addEventListener(MouseEvent.CLICK, function() { // function code });

所以:
function fooSub(event:MouseEvent, bla:String):void 
{
trace(event.currentTarget.name+" - "+bla);
// bla would be a clip name.
}

codebtTextos.addEventListener(MouseEvent.CLICK, function(e:MouseEvent) { fooSub(e, "jocasta") } );

如果您希望动态生成内容,请尝试以下方法:
btUa1.addEventListener(MouseEvent.CLICK, function() {
createMenu(1);
});

btUa2.addEventListener(MouseEvent.CLICK, function() {
createMenu(2);
});

function createMenu(id):void
{
// Switching submenu elements
switch (id)
{
case 1:
createSubmenu([myFunc1, myFunc2, myFunc3]); // dynamically creating submenus in case you need more of them than u already have
break;
case 2:
createSubmenu([myFunc4, myFunc5, myFunc6, myFunc7]);
break;
default:
[ and so on ..]
}
}

function createSubmenu(...rest):void {
for (var i:uint = 0; i < rest.length; i++)
{
var mc:SubItem = new SubItem(); // Subitem should be an MovieClip in library exported for ActionScript
mc.addEventListener(MouseEvent.CLICK, rest[i] as function)
mc.x = i * 100;
mc.y = 0;
this.addChild(mc);
}
}

关于actionscript-3 - AS3将变量参数传递给通用功能菜单/子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11726043/

30 4 0