我正在制作一款用户可以赢得按钮/徽章作为奖励的游戏。我估计总共会有大约500个奖项。
我想允许用户向银行出售他们的重复/不需要的徽章,并从银行购买新的徽章。
我展示了多个奖项框架中的徽章。在徽章下面,我显示了计数,以及"买入"one_answers"卖出"按钮。
我的问题是:处理这么多购买的最好方法是什么?出售按钮?是否有编码1000个事件监听器和1000个事件处理程序的方法?
一个可能的解决方案是给我的按钮命名,增量,像"buy_mc1","buy_mc2",等等。然后执行一个循环,为this["buy_mc" + i]创建侦听器。然而,我必须非常确保我正确地将这些链接回奖项。
目前,我在数据库中有一个"award_mc"字段,它存储了我的.fla中的电影剪辑的名称。从那里,我可以访问相关的资产,如count字段,如:this[db]。Award_mc + "_count"].txt。
不幸的是,这种方法不适合循环访问。
也许我可以创建一个与buy/sell按钮同步的电影剪辑名称数组。例如:
myArray = {aMissionAward, anotherAward, unberessaward};
我的按钮是:Buy_0, buy_1, buy_2等
当有人点击按钮时,我可以将buy_2链接到"ubbernessaward",然后在数据库中查找"ubbernessaward"。
我怎样才能从按钮上得到号码呢?即使我可以循环设置eventlistener,我是否必须设置单独的eventandler来处理正确的索引号?
我愿意听取其他方法的建议。
-------------------------- 编辑 ----------------------------
这是我的解决方案。感谢Jens Struwe为我指明了正确的方向。
我无法让这个与舞台上的按钮一起工作。显然,按钮是一个静态类。MovieClips是动态的,所以我能够通过使用MovieClips让这个工作。我是这样做的:
在舞台上增加了3个影片剪辑。分别命名为"mc0", "mc1"one_answers"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;
}
}
从这里,我可以将awardKey绑定到一个MovieClip名称数组。然后,我可以使用MovieClip名称来读取我的数据库。
这就是为什么当我遇到问题时,我首先来Stack Overflow的原因。:)
您只需要一个可以处理所有按钮的侦听器:
-
让你的买卖按钮点击事件气泡
-
给每个按钮一个唯一的标识符,如
myButton.awardKey = "uberness";
-
为所有按钮的容器注册一个事件监听器
-
使用
event.target
确定实际点击的按钮,使用MyButton(event.target).awardKey
确定奖励类型。
有几种方法可以处理这个问题。
你没有说你是使用自定义事件还是原生Flash事件。如果你正在监听一个本地的Flash事件冒泡(检查你的事件文档),或者你正在生成一个自定义事件冒泡,你可以简单地监听包含所有按钮的父DisplayObjectContainer。然后,使用event。目标,以确定实际生成事件的按钮。
处理这个问题的另一种方法是监听ADDED_TO_STAGE事件,然后在处理程序中执行类似的操作:protected function checkNewObject(e:Event):void {
if (e.target is YourButtonSubclass) {
var btn:YourButtonSubclass = e.target as YourButtonSubclass;
btn.addEventListener('SomeEvent', theHandler);
}
}
HTH;艾米