PDA

Просмотр полной версии : ООП. Вызов метода.


vecalion
15.05.2006, 16:53
День добрый,
имеется 2 класса: Grid и Block - наследники от MovieClip. В конструкторе класса Grid, в цикле в массив забиваются экземпляры класса Block:
this._grid[i][j] = _base.attachMovie("Block", "block" + i + j, _base.getNextHighestDepth(), {Grid:this});

Затем, в ответ на некоторые действия пользователя, необходимо вызвать для каждого объекта класса Block некоторый метод.

private function onMoveStopped():Void
{

for (var i:Number = 0; i < this._w; i++)
for (var j:Number = 0; j < this._h; j++)
{
var bl:Block = this._grid[i][j];
//trace(bl);
bl.onMoveStopped();
}

trace("Move stopped");
}

По неизвестной мне причине вызова не происходит :(

AlexSol
15.05.2006, 16:58
В конструкторе класса Grid, в цикле в массив забиваются экземпляры класса Block:

покажи цикл полностью

vecalion
15.05.2006, 17:00
покажи цикл полностью

for (var i = 0; i < _w; i++)
for (var j = 0; j < _h; j++)
{
this._grid[i][j] = _base.attachMovie("Block", "block" + i + j, _base.getNextHighestDepth(), {Grid:this});
this._grid[i][j].loadMovie((j + 1) + ".jpg");
this._grid[i][j]._x = i * 250;
this._grid[i][j]._y = j * 250;
}

AlexSol
15.05.2006, 17:04
по этой части следующее

var grid:Array = new Array();
for (var i = 0; i<2; i++) {
grid[i]=[]
for (var j = 0; j<5; j++) {
grid[i][j] = "i"+i+"j"+j;
}
}
trace(grid);

vecalion
15.05.2006, 17:09
А можно подробнее? Почему вышенаписанное по этой части?

Массивы у меня инициализируются следующим образом:
this._grid = new Array(_w);

for (var i = 0; i < _w; i++)
{
this._grid[i] = new Array(_h);
}

AlexSol
15.05.2006, 17:18
это было по тем данным, которые вы сначала показали. проверьте содержания массиса после его заполнения и это посмотрите http://flasher.ru/forum/showthread.php?t=79743

Бармалей
15.05.2006, 17:21
Любой метод экземпляра класса вызывается следующим образом:
имяЭкземпляра.имяМетода();
Метод класса вызывается вот так:
ИмяКласса.имяМетода();
Из того кода, что ты привел, невозможно понять каким образом организованы у тебя классы, следовательно указать на конкретную ошибку я не могу.

private function onMoveStoppe - если этот метод является обработчиком события присылаемого внешним объектом, то он должен быть объявлен как открытый.

vecalion
15.05.2006, 17:32
это было по тем данным, которые вы сначала показали. проверьте содержания массиса после его заполнения и это посмотрите http://flasher.ru/forum/showthread.php?t=79743

Экземпляры класса Block создаются успешно (вызывается конструктор + загружаемые картинки видны на ролике). Массив заполняется успешно (trace так говорит). Метод onMoveStopped() класса Grid вызывается успешно. Массив this._grid виден в данном методе. А вот методы не вызываются... Причем если заменить имя метода на несуществующее, либо поменять в классе Block модификатор доступа на private, то, как и положено, флеш ругается.

vecalion
15.05.2006, 17:47
Разобрался. После вызова
this._grid[i][j].loadMovie((j + 1) + ".jpg");
от моего класса ничего не остается.