Просмотр полной версии : ООП. Вызов метода.
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");
}
По неизвестной мне причине вызова не происходит :(
В конструкторе класса 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;
}
по этой части следующее
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);
}
это было по тем данным, которые вы сначала показали. проверьте содержания массиса после его заполнения и это посмотрите 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");
от моего класса ничего не остается.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.