Просмотр полной версии : Как обращаться к экземплярам классов?
Freeeeeeeman
02.12.2007, 22:48
Наверно один из глупых вопросов, но:
Как из одного экземпляра класса, созданного в одном мувике обратиться к экземпляру другого класса, созданного в другом мувике?
У меня не получается, хоть убейте!
Как обращаться?
CrazyFlasher
02.12.2007, 23:29
не надо создавать экземпляры классов в мувиках...это тоже самое, что писать код в мувиках...нет смысла тогда вообще классы использовать (имхо).
Как я обычно делаю (в кратце):
1. создаю главный класс.
2. в этом классе создаю экземпляры других классов, которые абосютно независимы. Общаются они с главным классом с помощью EventDispatcher.
3. При создании экземпляра класса, обычно передаю параметр контейнера (если надо).
Плюсы в том, что классы независимы друг от друга...не используют никаких сеттеров и можно с лёгкостью использовать в разных проектах абсолютно ничего не меняя.
Freeeeeeeman
03.12.2007, 00:17
я из тех, кто по делает по старинке- "всё в мувиках", НО ОЧЕНЬ ХОЧУ ПЕРЕУЧИТЬСЯ ПОСОВЕТУЙТЕ КНИГИ.
а теперь о классах,
1. как в классе реализовать onEnterFrame
2.EventDispatcher - синтаксис подскажите.
3.мувики создавать из экземпляра класса, используя библиотеку, или заранее в _root поместить?
4.почему код в классе не работает?
class mov {
var mc:<здесь наверно надо что-то написать>;
function = setPos(p_mc){ //передаём функции имя нужного клипа, находящегося в _root.
mc="_root."+p_mc; //mc - как-бы ссылка на мувик в руте(это конечно не правильно, но в мувике(actions) работает)
mc.x=100; //пытаемся переместить её
}
}
В итоге ошибки в outputs.
Как cделать ссылку на мувик? Желательно пример кода.
CrazyFlasher
03.12.2007, 00:27
в данном случае лучше юзать статический метод:
class Mov {
public static function setPos(mc:MovieClip, x:Number){
mc._x = x;
}
}
во фла:
Mov.setPos(this.mc, 500);
P.S. названия классов принято писать с большой буквы а методов с маленькой
import mx.transitions.BroadcasterMX;
import mx.transitions.OnEnterFrameBeacon;
//
class MyPseudoTween {
static var __initBeacon = OnEnterFrameBeacon.init();
static var __initBroadcaster = BroadcasterMX.initialize (MyPseudoTween.prototype, true);
public var addListener:Function;
public var removeListener:Function;
public var broadcastMessage:Function;
function MyPseudoTween() {
this.addListener (this);
_global.MovieClip.addListener(this);
}
function onEnterFrame():Void {
trace("I was subscribed to the clip event onEnterFrame!");
};
}
Краткое содержание класса Tween =)
А вообще - это шутка по большому счету (хоть и рабочая) %) Смысл в том, что чтобы реализовать в классе onEnterFrame, нужно чтобы существовал хотябы 1 клип (вообще, хоть где-нибудь), и уже к нему и привязываться.
Собственно, это уже реализовано в классе Tween, в пакете mx, который приходит (но не является обязательным) вместе с другими классами от Макромедии. Но это какое-то не самое удачное (хотя... даж не знаю, я их все равно люблю =) творение Макромедии (особенно в мануале CS3 совсем ничего про этот пакет нету...) Есть еще довольно популярная библиотека mcTween (вроде бы так называется - поискать в Гугле), но я не вдавался в подробности, так что не буду рекомендовать ее вместо.
Freeeeeeeman
05.12.2007, 14:42
Спасибо за пердыдущие ответы.
Вот ещё чтот с классами творится, вернее с ними всё в порядке, это я не могу что-то сделать.
класс A:
class A{
function A(){
}
function V(s){
trace(s);
}
}
класс B:
import A;
class B{
var as:A //экземпляр класса A
function B(){
}
function C(d){
as.V(d);
}
}
вызывающий код:
import B;
bs = new B();
bc.C(123);
Почемуто не работает, помоему не вызывается функция C()?
Freeeeeeeman
06.12.2007, 21:12
Да (бьет себя по голве) недоглядел. Но уже всё исправил.
работает всё норм спасибо.
CrazyFlasher
06.12.2007, 21:18
методы пишите с маленьких букв, а классы с больших! так же не забывайте про типизацию
Freeeeeeeman
06.12.2007, 21:41
ok, попробую приучить себя к этому.
DrugON, отредактируйте свой пост и оформите код тегами .
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.