цикл массива с экземплярами, as3 - PullRequest
0 голосов
/ 22 июня 2010

Есть 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 ]

1 голос
/ 22 июня 2010

Я немного смущен тем, что вы написали.во-первых, почему считается строка?во-вторых, если для счетчика установлено число мод 6, когда оно будет больше 6?Более того, в вашем массиве всего четыре вещи, так что вы не хотите использовать мод 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;

, который, я думаю, является довольно стандартным способом переключения всегонужно переключить.

0 голосов
/ 22 июня 2010

Вы нацеливаетесь на седьмой + больший элемент в массиве. Поскольку в массиве всего 4 элемента (включая первый пустой), нет элементов, которые не были бы розовыми [3]. Кроме того, если counting = timer.currentCount% 6, он будет между 0 и 5, поэтому он никогда не пройдет 6.

Кроме того, счет должен быть целым числом, а не строкой. Если вы используете его для определения больше и меньше чем и для индексации массива, это должно быть 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;
    }
}
0 голосов
/ 22 июня 2010

Вы устанавливаете счет в диапазоне от 0 до 5 (timer.currentCount% 6)

тогда вы только делаете видимым = 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...