PDA

Просмотр полной версии : Как передать у казатель на объект?


Coffein
22.04.2007, 19:19
Всем здрасти! Помогите пожулусто решить следующий вопрос:
Я описал класс для некоторого обекта танк:

class Tank extends MovieClip {
var Tw:Tower;
var type_t:String;
function Tank(parent:Object, param_id:String, param_type:String, param_x:Number, param_y:Number, param_rotation:Number, param_towerRotation:Number){
trace(parent);
parent.attachMovie("T-34", param_id, 1);
parent[param_id]._x = param_x;
parent[param_id]._y = param_y;
parent[param_id]._rotation = param_rotation;
this.type_t = param_type;
this.Tw = new Tower(?, param_towerRotation);
trace('Tank "'+this.type_t+'" created');
}
}

Конструктор этогокласса создает платформу. Теперь я хочу приаттачить к этой платформе башню. Для этого я в кострукторе описываю переменную данного типа(тоесть я отдельно описал класс "башня"):
var Tw:Tower;
...
После этого должен вызвать конструктор с парамметром указателя на платформу. (Это для того чтобы аттачить не к _root'у, а именно к платформе).
this.Tw = new Tower(?, param_towerRotation);
Подскажите как передать указатель, или возможно ли такое?

etc
22.04.2007, 19:23
Что есть Tower?

Coffein
22.04.2007, 19:24
Это класс:
class Tower extends MovieClip {

function Tower(parent1:Object, param_rotation:Number){
trace(parent1);
parent1.attachMovie("t34_tw", "mytower", 1);
//this._rotation = param_rotation;
//trace('rotation: '+this._rotation);
trace('Tower created');
}
}

etc
22.04.2007, 19:25
Мувиклипы не создаются через конструктор. В linkage у клипа в библиотеке должен быть указан соответствующий класс для клипа, в данном случае Tower.

Coffein
22.04.2007, 19:31
Все так и указано, но он не аттачится, потомучто как я понял он не понимает куда аттачить. Как быть?

etc
22.04.2007, 19:36
Нет, неправильный подход вообще и в целом.
Класс Tank наследуется от MovieClip => в библиотеке должен быть клип платформы танка, с описанным linkage id и классом Tank. Далее, там где требуется создать танк должны быть следующие строки:

var tank:Tank = Tank(this.attachMovie('TankLinkage','tank_mc',0,{_x:10,_y:20,_rotation:30}));

Аналогично должно быть описано в самом классе Tank для Tower.
Т.е. примерно так:

Класс Tank:
class Tank extends MovieClip {
private var tower:Tower;
private function Tank() {
this.tower = Tower(this.attachMovie('TowerLinkage','tower',0,{_x:5,_y:10,_rotation:40}));
}
}

Класс Tower в принципе ничего не должен знать о своих родителях, т.е. о классе Tank.

Coffein
22.04.2007, 20:02
__etc, в моем коде:
this.Tw = new Tower(?, param_towerRotation);
надо было передать парамметр parent[param_id]. Теперь все заработало.

Но __etc, поясни ламеру, почему мой подход не правельный?

etc
22.04.2007, 20:25
Либо твои классы не должны наследоваться от MovieClip (они не являются клипами), либо должны быть описаны, как я написал.

Coffein
22.04.2007, 20:36
Понятно, спасибо за помощь!