带有实例的数组循环,as3

时间:2010-06-22 15:27:24

标签: flash actionscript

我正在使用计时器索引3个盒子。它们按顺序消失。如何重新出现?
谢谢

框在序列1-3中消失

var pink:Array = ["","boxInstance1","boxInstance2","boxInstance3"];
var timer:Timer = new Timer(555);
timer.addEventListener(TimerEvent.TIMER, onTimer);
timer.start();
function onTimer(evt:TimerEvent):void {
var counting:*;
counting = String(timer.currentCount %10);
trace(counting);
//TIMER LOOPS THROUGH MY ARRAY
this[pink[counting]].visible = false;
}

我试过这个'它不起作用'

//THIS IS OK
if(counting> 0){
this[pink[counting]].visible = false;
}
//'null object ref #1010'
if(counting> 6){
this[pink[counting]].visible = true;
}

我不是特别关注它们消失和出现的序列,但它需要继续循环。

3 个答案:

答案 0 :(得分:1)

我对你发布的内容感到有点困惑。首先,为什么要计算一个字符串?第二,如果计数设置为模数6,何时计数大于6?此外,你的数组中只有四个东西,所以你不想使用mod 6,对吧?另外,如果你试图访问这个[“”],那不会给你带来某种错误吗?

要让它们循环,我只会在每次出现问题时切换可见性,而不是

this[pink[counting]].visible = false;

我会用:

this[pink[counting]].visible = this[pink[counting]].visible ? false : true;

或写出:

if(this[pink[counting]].visible)
    this[pink[counting]].visible = false;
else
    this[pink[counting]].visible = true;
我认为,这是切换需要切换的任何东西的一种非常标准的方法。

答案 1 :(得分:0)

您将计数设置在0到5之间(timer.currentCount%6)

然后你只做你的visible = true如果计算> 6。

计数永远不会是> 6:)

尝试检查它是> = 3:)

这样的事情应该有用(NB没有测试,从内存写入)

var pink:Array = ["boxInstance1","boxInstance2","boxInstance3"];
var timer:Timer = new Timer(555);
timer.addEventListener(TimerEvent.TIMER, onTimer);
timer.start();

function onTimer(evt:TimerEvent):void {
  var counting:uint = timer.currentCount % this[pink].length;
  this[pink[counting]].visible = !this[pink[counting]].visible;
}

答案 2 :(得分:0)

您要定位数组中的第七个+更多项目。由于数组只有4项(包括空白的第一项),因此没有粉红色的项目[3]。此外,如果计数= timer.currentCount%6,它将介于0和5之间,因此它永远不会超过6。

此外,计数应该是int,而不是字符串。如果您使用它来确定大于和小于和索引数组,则它应该是一个int。

// these variables should have been created somewhere else in your code, 
// or on the stage if you are coding in the timeline
var boxInstance1:Sprite = new Sprite();
var boxInstance2:Sprite = new Sprite(); 
var boxInstance3:Sprite = new Sprite(); 
// create an array of the boxInstance display objects, not an array of strings.
// note: remove the first array item, 
// unless you need it to be blank for some other reason.
var pink:Array = [boxInstance1, boxInstance2, boxInstance3];
var timer:Timer = new Timer(555);
timer.addEventListener(TimerEvent.TIMER, onTimer);
timer.start();
//TIMER FUNCTION
function onTimer(evt:TimerEvent):void {
    var counting:int = timer.currentCount % 6;
    trace(counting); // should output 0 through 5
    if (counting > 2) {
        // if greater than 2, hide an item (3,4,5)
        pink[counting - 3].visible = false;
    } else {
        // else counting is equal or less than 2, show an item (0,1,2)
        pink[counting].visible = true;
    }
}