Function ActionScript 3单击七个按钮后转到下一场景
我有七个按钮(btn_1,btn_2,btn_3,…),当所有按钮都被单击时(不是一行,只是随机),我想转到下一个场景中的第一帧。我的代码应该是什么样子 谢谢大家!Function ActionScript 3单击七个按钮后转到下一场景,function,actionscript-3,button,Function,Actionscript 3,Button,我有七个按钮(btn_1,btn_2,btn_3,…),当所有按钮都被单击时(不是一行,只是随机),我想转到下一个场景中的第一帧。我的代码应该是什么样子 谢谢大家! const buttons:Array = [btn_one, btn_two, btn_three, btn_four, btn_five, btn_six, btn_seven]; // dictionary to keep clicks state const clicked:Dictionary = new Dictio
const buttons:Array = [btn_one, btn_two, btn_three, btn_four, btn_five, btn_six, btn_seven];
// dictionary to keep clicks state
const clicked:Dictionary = new Dictionary();
function buttonClickHandler(event:Event):void {
// record specific button's click to a dictionary
clicked[event.currentTarget] = true;
// true, if all the dict keys have true values
const allButtonsClicked:Boolean = buttons.every(
function(button:Object, ...rest):Boolean {
return clicked[button];
});
if (allButtonsClicked) {
// remove all listeners
for each (var button:DisplayObject in buttons) {
button.removeEventListener(MouseEvent.CLICK, buttonClickHandler);
}
//do whatever action you need. For example:
gotoAndStop(/*neededFrame*/);
}
}
// initialize dictionary values, and add listeners
for each (var button:DisplayObject in buttons) {
clicked[button] = false;
button.addEventListener(MouseEvent.CLICK, buttonClickHandler);
}
还没有测试,但应该可以工作。无论如何,这个计划应该是有效的
stop();
const buttons:Array = [btn_one, btn_two, btn_three, btn_four, btn_five, btn_six, btn_seven];
// dictionary to keep clicks state
const clicked:Dictionary = new Dictionary();
function buttonClickHandler(event:Event):void {
// record specific button's click to a dictionary
clicked[event.currentTarget] = true;
// true, if all the dict keys have true values
const allButtonsClicked:Boolean = buttons.every(
function(button:Object, ...rest):Boolean {
return clicked[button];
});
if (allButtonsClicked) {
// remove all listeners
for each (var button:DisplayObject in buttons) {
button.removeEventListener(MouseEvent.CLICK, buttonClickHandler);
}
//do whatever action you need. For example:
gotoAndStop(2);
}
}
// initialize dictionary values, and add listeners
for (var button:DisplayObject in buttons) {
clicked[button] = false;
btn_one.addEventListener(MouseEvent.CLICK, buttonClickHandler);
btn_two.addEventListener(MouseEvent.CLICK, buttonClickHandler);
btn_three.addEventListener(MouseEvent.CLICK, buttonClickHandler);
btn_four.addEventListener(MouseEvent.CLICK, buttonClickHandler);
btn_five.addEventListener(MouseEvent.CLICK, buttonClickHandler);
btn_six.addEventListener(MouseEvent.CLICK, buttonClickHandler);
btn_seven.addEventListener(MouseEvent.CLICK, buttonClickHandler);
}
我测试了leetwinski的代码,并为我的按钮添加了eventlisteners,但它不起作用。我得到了错误“1067:将Class类型的值隐式强制到一个不相关的flash.display:DisplayObject类型”我做错了什么?到目前为止你有什么问题?不仅仅是每个按钮的eventlistener和btn_one的第一个函数(gotoAndPlay(1,“Scene2”)。我不知道该如何开始。直到现在我才做了简单的函数。;-)非常感谢你,leetwinski。如果按钮是MovieClips(动态),你可以在其上设置一个动态属性(单击)并放弃字典。如果我知道该做什么,我就不必问了。你是如何创建这些按钮的?看起来这些btn_一个,。。。是类名。您应该在代码中使用实例名称。应该为舞台上的每个按钮设置实例名称。对不起。我忘了告诉你我使用了MovieClips而不是按钮,因为这样我可以在单击这些“按钮”时更改颜色或形状-->在frame1中开始;单击ShowFrame2。很抱歉。是否可以使用您的代码并使用“单击时-->显示第2帧”扩展按钮ClickHandler,例如按钮“MovieClip(btn_one)。gotoAndPlay(2)”?在该区域的“…rest”中我必须输入什么?[…]const allButtonsClicked:Boolean=buttons.every(函数(按钮:对象,…rest):Boolean[…]顺便说一句,感谢您的耐心。不必关心这个
…rest
的事情。它是as3中函数签名变体的一部分。