use*_*519 0 flash event-handling actionscript-3
我正在开发一款游戏,用户可以在这款游戏中获得按钮/徽章作为奖励.我估计总共会有大约500个奖项.
我想允许用户将他们的重复/不需要的徽章出售给银行并从银行购买新的徽章.
我在多个奖项框架中展示徽章.在徽章下方,我会显示计数,以及"买入"和"卖出"按钮.
我的问题是:处理SO MANY买卖按钮的最佳方法是什么?有没有办法编写1000个eventListeners和1000个eventHandlers?
一种可能的解决方案是逐步命名我的按钮,如"buy_mc1","buy_mc2"等.然后执行循环为此创建侦听器["buy_mc"+ i].但是,我必须非常确定我将这些正确地链接到奖项.
目前,我的数据库中有一个"award_mc"字段,它在我的.fla中存储了movieclip的名称.从那里,我可以访问相关的资产,比如count字段,例如:this [db.award_mc +"_ count"] .txt.
不幸的是,这种方法不适合循环访问.
也许我可以创建一系列与买/卖按钮同步的动画片段名称.例如:
myArray = {aMissionAward,anotherAward,ubernessAward};
我的按钮是:buy_0,buy_1,buy_2等.
当有人点击按钮时,我可以将buy_2链接到"ubernessAward",然后在数据库上查找"ubernessAward".
但是如何从按钮获取号码呢?即使我可以循环设置eventListeners,我是否必须设置个别事件的eventHandlers来处理正确的索引号?
我愿意接受其他方式的建议.
--------------------------编辑----------------------- -----
这是我的解决方案.Jens Struwe的道具指向我指向正确的方向.
我无法使用舞台上的按钮.显然,按钮是静态类.MovieClip是动态的,所以我可以通过使用MovieClip来实现这一点.这是我做的:
在舞台上添加了3个MovieClip.将它们命名为"mc0","mc1"和"mc2".
添加此AS3代码:
for (var i:Number=0; i<3; i++)
{
this["mc" + i].addEventListener( MouseEvent.CLICK, onMcClick );
this["mc" + i].awardKey = i;
}
function onMcClick( evt:MouseEvent ):void
{
trace("MC ID = " +(evt.target).awardKey);
switch ((evt.target).awardKey)
{
case 0:
trace(" Do stuff for 0");
break;
case 1:
trace(" Do stuff for 1");
break;
case 2:
trace(" Do stuff for 2");
break;
}
}
Run Code Online (Sandbox Code Playgroud)
从这里开始,我可以将awardKey绑定到一组MovieClip名称.然后,我可以使用MovieClip名称来读取我的数据库.
这就是我遇到问题时首先来到Stack Overflow的原因.:)
您只需要一个可以处理所有按钮的侦听器:
让您的买入和卖出按钮点击事件泡沫.
给每个按钮一个唯一的标识符,例如 myButton.awardKey = "uberness";
将单个事件侦听器注册到所有按钮的容器中.
确定使用点击的实际按钮event.target和使用的奖励类型MyButton(event.target).awardKey.