Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   ООП передача параметра (http://www.flasher.ru/forum/showthread.php?t=115590)

ktotam 04.09.2008 00:44

ООП передача параметра
 
Здравствуйте!
В библиотеке есть символ с именем "_hello", он определен как наследник класса My_class.
Итак код фильма
Код:

_root.attachMovie('_hello','_hello',1)
код класса
Код:

class My_class extends MovieClip{
  public function My_class(_param:Number) {
        trace(_param+" hello world")               
  }
}

Вопрос: как передать в конструктор параметр "_param"?

wvxvw 04.09.2008 01:25

Поскольку вы никогда явно конструктор MovieClip'a не вызываете, то передать в него аргументы вы тоже не сможете. Выходом может быть класс-фабрика, который будет это делать примерно так:
[не рабочий код]
Код:

ClipFactory.createClassObject(parent, "linkage", TheClass, {argument, argument...}):MovieClip
{
var clip:MovieClip = parent.attachMovie("linkage", "linkage", parent.getNextHighestDepth(), {argument, argument...});
Object.registerClass(clip, TheClass);
return clip;
}

При условии, что в конструкторе вы ничего не передаете, а argument соответствует какому-нибудь полю в классе TheClass.

etc 04.09.2008 01:30

В конструктор — никак. Но у attachMovie есть четвертый аргумент.

Mnilionic 04.09.2008 01:32

Код:

_root.attachMovie('_hello','_hello',1, {_param: 'Mnilionic'});
Код:

class My_class extends MovieClip{
        var _param;
  public function My_class() {
        trace(_param+", hello world")
  }
}


udaaff 04.09.2008 01:39

Код:

var myClass:MyClass = this.attachMovie("myClass", "myClass", this.getNextHighestDepth(), { myVar: "asdf" });
Код:

class MyClass extends MovieClip
{
       
        private var _myVar:String;
       
        public function MyClass()
        {
                trace(_myVar);
        }
       
        public function get myVar():String
        {
                return _myVar;
        }
       
        public function set myVar(value:String):Void
        {
                _myVar = value;
        }
       
}


wvxvw 04.09.2008 01:49

Код:

class ClipFactory
{
        public static function createClassObject(parent:MovieClip,
                                                        linkage:String,
                                                        classAlias:Function,
                                                        initArguments:Object):MovieClip
        {
                var b:Boolean = Object.registerClass(linkage, classAlias);
                var clip:MovieClip = parent.attachMovie(linkage, linkage,
                                                        parent.getNextHighestDepth(),
                                                        initArguments);
                trace("called "+b);
                return clip;
        }
}

Код:

class Foo extends MovieClip
{
        public var test:String;
       
        public function Foo(){ trace("foo constructor: " + test); };
       
        public function traceTest():Void
        {
                trace(test);
        }
       
        public function toString():String { return "Foo"; };
}

Код:

import ClipFactory;
import Foo;
var foo:Foo = Foo(ClipFactory.createClassObject(this, "aaa", Foo, {test:"abcd"}));
trace(foo.toString())
foo.traceTest();

рабочий вариант =)
переменная была определена до выполнения конструктора, фактически то же самое, что и определить ее во время выполнения конструктора =)

ktotam 04.09.2008 17:45

Всем большое спасибо!
Выбрал вариант Mnilionic.


Часовой пояс GMT +4, время: 01:42.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.