PDA

Просмотр полной версии : Обращение к элементу массива, как к объекту


Denis_Pryanikov
12.09.2011, 11:46
Здравствуйте.

Собственно, код:


package {

import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.display.Sprite;
import flash.ui.MouseCursor;
import flash.ui.Mouse;


public class MainClass extends Sprite {
public var cells : Array = new Array();
public function MainClass() {

for (var i=0; i <= 3; i++) {
var b : Sprite = new Sprite();
cells.push(b);
b.graphics.beginFill(0x000000, 0.2);
b.graphics.drawRect(0,0,50,50);
b.graphics.endFill();
b.x = (50 * i);
b.y = 50;
b.alpha = 0.4*(i+1);
addChild(b);
}
addChild(it);
it.addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEvent) {
it.startDrag();
});
it.addEventListener(MouseEvent.MOUSE_UP, function (e:MouseEvent) {
it.stopDrag();
for (var i = 0; i <= cells.length; i++) {
if (cells[i].hitTestPoint(mouseX, mouseY, true)) {
it.x = cells[i].x+25;
it.y = cells[i].y+25;
}
}
});

}
}

}

Ругается (Error #1010: Термин не определен и не имеет свойств) на cells[i].hitTestPoint(mouseX, mouseY, true). Я так понял, нужно обращаться не просто к элементу массива, а как к объекту? Хотя cells[i] это и есть уже отрисованый спрайт... В принципе, все работает как мне нужно, но все же как избежать ошибки?

goodguy
12.09.2011, 11:49
здесь причина ошибки в том, что вызывается индекс массива, на котором отсутствует объект.
Вот этот код не правильный:
for (var i = 0; i <= cells.length; i++)
нужно так:
for (var i = 0; i < cells.length; i++)

А вообще, я бы использовал здесь такую конструкцию цикла

for (var i:String in cells)

Denis_Pryanikov
12.09.2011, 12:07
Успех) Все работает как нужно.
Спасибо за помощь, goodguy