Просмотр полной версии : Как программно связать мувиклип с экземпляром пользовательского класса?
orcpochta
01.10.2008, 22:18
Есть, например, в библиотеке мувиклип mcDog с идентификатором связывания, изображающий собаку, и есть класс Dog(), описывающий собаку.
Как программно "приклеить" mcDog к экземпляру класса Dog()?
var mc:MovieClip = attachMovie('mcDog', 'mcDog', getNextHighestDepth());
var dog:Dog = Dog(mc);
orcpochta
01.10.2008, 22:34
var mc:MovieClip = attachMovie('mcDog', 'mcDog', getNextHighestDepth());
var dog:Dog = Dog(mc);
т.е. в классе должен быть "забит" какой-то контейнер для этих целей, в который конструктор будет помещать необходимый мувиклип?
А вот если у меня класс Dog() - расширение класса MovieClip(), почему не получается аттачить клип в уже созданный экземпляр класса Dog()?
т.е. в классе должен быть "забит" какой-то контейнер для этих целей, в который конструктор будет помещать необходимый мувиклип?
Да нет, но класс должен наследоваться от MovieClip
А вот если у меня класс Dog() - расширение класса MovieClip(), почему не получается аттачить клип в уже созданный экземпляр класса Dog()?
Ну не знаю, как я могу сказать? покажите код
var mc:MovieClip = attachMovie('mcDog', 'mcDog', getNextHighestDepth());
Вот и все дела
orcpochta
01.10.2008, 22:50
не понимаю как это может работать: var dog:Dog = Dog(mc); - если я не описываю что-то в конструкторе класса.
вот есть класс UfoShip():
class UfoShip extends MovieClip {
var velocityX:Number = 0;
var velocityY:Number = 0;
function UfoShip() {
Key.addListener(this);
}
function onKeyDown():Void {
var keyCode:Number = Key.getCode();
switch (keyCode) {
case Key.LEFT:
thrustX(-1);
break;
case Key.RIGHT:
thrustX(1);
break;
case Key.UP:
thrustY(-1);
break;
case Key.DOWN:
thrustY(1);
break;
}
}
function thrustX(direct:Number):Void {
velocityX += direct;
}
function thrustY(direct:Number):Void {
velocityY += direct;
}
function onEnterFrame():Void {
velocityX *= 0.95;
velocityY *= 0.95;
_x += velocityX;
_y += velocityY;
}
}
Ufo - мувиклип с идентификатором "UfoSymbol".
пытался сделать так:
var ufo1:UfoShip = new UfoShip();
ufo1.attachMovie("UfoSymbol", "mcImage", 1);
не сработало.
ваш вариант:
var mc:MovieClip = attachMovie('UfoSymbol', 'mcImage', getNextHighestDepth());
var ufo1:UfoShip =UfoShip(mc);
тоже не работает
UPD:
вот что прочитал на silin.fatal.ru:
Приспособа для создания мувиков и тестфилдов
обычная ситуация: мувики и текстфилды нужны на каждом шагу и чаще всего ни имя, ни глубина особо не волнуют (лишь бы не на чужом месте), зато сильно не хватает возможности создать мувик 'своего' класса, не засовывая его предварительно в библиотеку, текстфилд пользовательского класса и вовсе стандартными методами не создать..
другой нюанс в том, что если в проекте есть компоненты v.2, то getNextHighestDepth() отправляет на запредельные уровни, с которых удаление экземпляра уже невозможно, так же как и с отрицательных..
в общем хотелось по простому создавать мувики/текстфилды, особо не задумываясь о глубине, ну и цеплять к инстансам класс тоже..: не знаю что и важнее, обе фичи нужны..
Я так понимаю, что это конкретно про мой случай и тогда без InctanceManager-а мне не обойтись?
Мда, мой вариант не рабочий. Извиняюсь, погнал.
Вообщем вы хотите, как я понял, не создавать для каждого мувика свой класс, а использовать один класс для всех. Можно передавать нужный мувик в конструктор класса, вот так например
import mx.utils.Delegate;
class UfoShip extends MovieClip {
var velocityX:Number = 0;
var velocityY:Number = 0;
var _mc:MovieClip;
function UfoShip(mc:MovieClip) {
_mc = mc;
Key.addListener(_mc);
_mc.onKeyDown = Delegate.create(this, _onKeyDown);
_mc.onEnterFrame = Delegate.create(this, _onEnterFrame);
}
function _onKeyDown():Void {
var keyCode:Number = Key.getCode();
switch (keyCode) {
case Key.LEFT:
thrustX(-1);
break;
case Key.RIGHT:
thrustX(1);
break;
case Key.UP:
thrustY(-1);
break;
case Key.DOWN:
thrustY(1);
break;
}
}
function thrustX(direct:Number):Void {
velocityX += direct;
}
function thrustY(direct:Number):Void {
velocityY += direct;
}
function _onEnterFrame():Void {
velocityX *= 0.95;
velocityY *= 0.95;
_mc._x += velocityX;
_mc._y += velocityY;
}
}
var mc:MovieClip = attachMovie('UfoSymbol', 'mcImage', getNextHighestDepth());
var ufo1:UfoShip = new UfoShip(mc);
А можно конечно и воспользоваться классом silin'a он плохого не напишет...
Сейчас для интереса посмотрю, что за класс
orcpochta
02.10.2008, 00:07
Спасибо! Нечто подобное я и предполагал.
А где найти инфу про import mx.utils.Delegate; и с чем его едят?
upd:
нашел!)))
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.