PDA

Просмотр полной версии : Длина массива и "-1"


noode
11.12.2009, 03:54
Всем привет, после просмотра урока о эффекте для движения курсора, задался вопросом в коде..
Буду признателен тем кто объяснит...

onClipEvent(load){
Mouse.hide();
trail = new Array();
trailNum = 0;
speed = 4;

}

onClipEvent(enterFrame){
var m:MovieClip = _root.attachMovie('mc', 'mc'+trailNum, trailNum);
m._x = _root._xmouse;
m._y = _root._ymouse;

trail.push(m);
trailNum++;

for(i=trail.length-1;i>=0;i--){
trail[i]._alpha-=speed;
trail[i]._xscale-=speed;
trail[i]._yscale-=speed;
trace(i)
if(trail[i]._alpha<=0){
trail.splice(0,1);
trail[i].removeMovieClip();
}
}


}

Непонятен именно этот момент:
i=trail.length-1

iflamberg
11.12.2009, 04:13
это цикл от последнего элемента к первому. length - длина. Если в массиве один элемент, то length = 1, но индекс первого элемента - [0], если в массиве n эелементов, то индекс последнего элемента в массиве - [length-1].

noode
11.12.2009, 09:13
это то все ясно...
но зачем "-1"

etc
11.12.2009, 10:02
Ключевое слово во втором посте — «индекс».

noode
11.12.2009, 10:35
тоесть в массиве первый элемент всегда должен быть с индексом 0 ?

Zik.
11.12.2009, 10:45
Допустим есть массив
var a:Array = [10, 20, 30, 40, 50, 60, 70, 80, 90]
Длина массива - 9
Индекс последнего элемента - 8
Потому что отсчет идет с нуля

10 - [0]
20 - [1]
30 - [2]
40 - [3]
50 - [4]
60 - [5]
70 - [6]
80 - [7]
90 - [8]

Собственно, если мы напишем просто .length, то в цикле произойдет ошибка, так как последнего элемента не будет существовать, так как мы будем обращаться к девятому индексу (length = 9), а конечный индекс = 8

noode
11.12.2009, 17:49
"Потому что отсчет идет с нуля"
этого ответа было достаточно!))