Просмотр полной версии : Как обратится из субкласса к массиву суперкласса ?
Chuck607
19.11.2009, 16:04
Не получается обратится к массиву. Есть вот такая штука:
class Bullet {
var speed:Number;
public var glubina:Number;
var pula_move:MovieClip;
var pula:String;
var myClip:MovieClip;
var rott:Number;
var weap:Number;
public var bullet_array:Array;
var len:Number;
var id:Number;
public function Bullet(attMovie:String, Strelok:MovieClip, skorost:Number, glubina:Number, weapon:Number) {
pula = attMovie;
myClip = Strelok;
speed = skorost;
this.glubina = glubina;
bullet_array.push(_root.attachMovie(pula, pula+this.glubina, _root.getNextHighestDepth()));
pula_move = _root[pula+this.glubina];
pula_move._rotation = myClip._rotation;
pula_move.rott = myClip._rotation;
pula_move.speed = speed;
pula_move._x = myClip._x;
pula_move._y = myClip._y;
pula_move.weap = weapon;
pula_move.onEnterFrame = function() {
this._x = this._x+this.speed*(Math.sin(Math.PI*this.rott/180));
this._y = this._y-this.speed*(Math.cos(Math.PI*this.rott/180));
if (this._x<0 || this._x>800 || this._y<0 || this._y>600) {
removeMovieClip(this);
bullet_array.splice(0, 1);
}
}
Не получается обратиться к массиву bullet_array из субкласса, пишет undefined в чем ошибка ?Метод super();не в моем случае не хочет работать.
Chuck607
19.11.2009, 20:50
Я создаю массив this.bullet_array = new Array();, но его не видно из субкласса, как к нему обратится ? Смысл в том, чтобы субкласс проверял на пересечение Хит тестом члены массива bullet_array и массива с юнитами, который аналогично создается в субклассе.
Где вы его создаете? Не видно что-то
Chuck607
20.11.2009, 07:08
this.bullet_array = new Array(); это не то разве ? он же должен создать пустой массив
У вас в коде нет такой строчки.
Chuck607
20.11.2009, 08:33
А ну это тут нет, я не написал. просто у меня с этой строчкой тоже не работает.
class Bullet {
var speed:Number;
public var glubina:Number;
var pula_move:MovieClip;
var pula:String;
var myClip:MovieClip;
var rott:Number;
var weap:Number;
public var bullet_array:Array;
var len:Number;
var id:Number;
public function Bullet(attMovie:String, Strelok:MovieClip, skorost:Number, glubina:Number, weapon:Number) {
pula = attMovie;
myClip = Strelok;
speed = skorost;
this.glubina = glubina;
this.bullet_array = new Array();
this.bullet_array.push(_root.attachMovie(pula, pula+this.glubina, _root.getNextHighestDepth()));
pula_move = _root[pula+this.glubina];
pula_move._rotation = myClip._rotation;
pula_move.rott = myClip._rotation;
pula_move.speed = speed;
pula_move._x = myClip._x;
pula_move._y = myClip._y;
pula_move.weap = weapon;
pula_move.onEnterFrame = function() {
this._x = this._x+this.speed*(Math.sin(Math.PI*this.rott/180));
this._y = this._y-this.speed*(Math.cos(Math.PI*this.rott/180));
if (this._x<0 || this._x>800 || this._y<0 || this._y>600) {
removeMovieClip(this);
this.bullet_array.splice(0, 1);
}
}
Выложите ваш субкласс. extends Bullet написали? )
замените public var bullet_array:Array; на public var bullet_array:Array=new Array; перед функцией, тогда этот массив создастся пустым и его будет видно везде
Chuck607
20.11.2009, 15:12
Ага только это еще заготовка
class AttachEnemy extends Bullet {
var Enemy:Array;
var enemyClip:String;
var MasTest:Array;
var Enemy_added:MovieClip;
var Depth:Number;
public function AttachEnemy(attMovie:String,dep:Number) {
this.Enemy = new Array();
this.Depth = dep;
enemyClip = attMovie;
Enemy.push(_root.attachMovie(enemyClip, enemyClip+this.Depth, _root.getNextHighestDepth()));
Enemy_added = _root[enemyClip+this.Depth];
Enemy_added._x = Math.random()*500;
Enemy_added._y = Math.random()*400;
this.Depth++;
Enemy_added.onEnterFrame = function() {
trace(Bullet_array()) // и тут он пишет undefined он не видет этого массива из класса Bullet
};
}
}
Добавлено через 9 минут
замените public var bullet_array:Array; на public var bullet_array:Array=new Array; перед функцией, тогда этот массив создастся пустым и его будет видно везде
я так тоже пробовал не получается
Enemy_added.onEnterFrame = function() {
trace(this.Bullet_array());
};
this в данном случае будет ссылаться на Enemy_added. Используйте Delegate (http://www.flasher.ru/forum/showpost.php?p=717938&postcount=4)
Chuck607
20.11.2009, 16:03
Спасибо, буду разбираться как это работает;)
Добавлено через 8 минут
Хм.. не могу понять как мне передать мой массив с помощью этого класса субклассу
Вот
Enemy_added.onEnterFrame = Delegate.create(this, this.enterFrameHandler);
private function enterFrameHandler():Void
{
trace(this.Bullet_array());
}
теперь this'ом будет объект AttachEnemy.
То же самое нужно проделать и с pula_move.onEnterFrame = function() в Bullet'e. Заметьте Bullet не наследует MovieClip, а вы пишите _x, _y в pula_move.onEnterFrame
Chuck607
20.11.2009, 17:17
Да Bullet не наследует MovieClip, но _x и _y работает =) Большое Спасибо за помощь!!!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.