Actionscript 3 AS3中If语句中的事件侦听器
我有一个(也许很奇怪)问题要问你,有经验的ActionScript大师: 从逻辑上讲,我可能遗漏了一些东西,但情况如下:我在MovieClip的不同帧上嵌套了按钮,在MovieClip的附加类上,我有一个if语句,为嵌套在适当帧上的按钮添加事件侦听器;然而,当我运行代码时,无论运行所述代码的条件是否为真,flash似乎都在按顺序执行代码。我只是好奇是否有一种特殊的方法可以更好地处理这种情况Actionscript 3 AS3中If语句中的事件侦听器,actionscript-3,flash,Actionscript 3,Flash,我有一个(也许很奇怪)问题要问你,有经验的ActionScript大师: 从逻辑上讲,我可能遗漏了一些东西,但情况如下:我在MovieClip的不同帧上嵌套了按钮,在MovieClip的附加类上,我有一个if语句,为嵌套在适当帧上的按钮添加事件侦听器;然而,当我运行代码时,无论运行所述代码的条件是否为真,flash似乎都在按顺序执行代码。我只是好奇是否有一种特殊的方法可以更好地处理这种情况 public function Die1() { // constructor code trac
public function Die1() {
// constructor code
trace("Roll 1 D1 is:", MainGame.valueRoll1);
if (MainGame.valueRoll1 == 1){
gotoAndStop(1);
die1Sd1_btn.addEventListener(MouseEvent.CLICK, Side1process);
}
if (MainGame.valueRoll1 == 2){
gotoAndStop(2);
die1Sd2_btn.addEventListener(MouseEvent.CLICK, Side2process);
}
if (MainGame.valueRoll1 == 3){
gotoAndStop(3);
die1Sd3_btn.addEventListener(MouseEvent.CLICK, Side3process);
}
if (MainGame.valueRoll1 == 4){
gotoAndStop(4);
die1Sd4_btn.addEventListener(MouseEvent.CLICK, Side4process);
}
if (MainGame.valueRoll1 == 5){
gotoAndStop(5);
die1Sd5_btn.addEventListener(MouseEvent.CLICK, Side5process);
}
if (MainGame.valueRoll1 == 6){
gotoAndStop(6);
die1Sd6_btn.addEventListener(MouseEvent.CLICK, Side6process);
}
}
提前感谢所有回复这篇文章的人,我想世界上所有的语法知识都不能帮助程序逻辑…你最好在整个骰子上使用一个事件监听器,而不是使用大量依赖骰子当前帧的监听器。像这样:
function Die() {
this.addEventListener(MouseEvent.CLICK,processDie);
}
// instead of that entire 'if'!
// Also, this approach will allow you making more dies without spawning classes
function processDie(e:MouseEvent):void {
switch (currentFrame) {
case 1: side1Process(); break;
case 2: side2Process(); break;
case 3: side3Process(); break;
case 4: side4Process(); break;
case 5: side5Process(); break;
case 6: side6Process(); break;
}
}
在你的main游戏中
你会这样做:
var dice:Array=[];
public function MainGame {
for (var i:int=0;i<maxDice;i++) {
var die:Die=new Die();
// make a new die. It'll automatically have an event listener attached
die.x=i*50;
die.y=20; // place somewhere
addChild(die);
dice.push(die);
}
// rest of code follows
}
for (var i:int=0;i<dice.length;i++)
if (mayIRollTheDie(i)) // provide a correct condition here
dice[i].gotoAndStop(1+Math.floor(Math.random()*6));
var-dice:Array=[];
公共职能博弈{
对于(var i:int=0;暂不说-你不能像那样直接引用给定帧上的对象-你必须先等待帧被构建。谢谢!我会研究一下,谷歌不是很方便吗?!哇,我从来没有想过要这么做,这很有意义!在我的情况下,我正在制作一种“扑克牌骰子”游戏,我很好奇将每个骰子放入一个数组是否会更复杂。但这确实给了我一个极好的跳转点!非常感谢您的洞察力!~干杯!