Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Flash > разборы c PROTOTYPE


Автор: PROCESSOR 30.8.2005, 00:19
Хочу сделать наследника от TEXTFIELD.

Код

proscroll.prototype=new TextField() 

function proscroll (){
    this._x=200
    this._y=200    
    this._width=200
    this._height=200
}


типа вот так. Правильно ? А как его на экран то вывести ?

Автор: AntonioBanderaz 30.8.2005, 04:29
Код

TextField.prototype.proscroll = function() {
    this._x=200    
    this._y=200     
    this._width=200    
    this._height=200
}

скорее так... smile smile smile
А выводится это как обычно созданием нового текстфиелда, а потом можешь обращаться к своему прототипу... smile smile

Автор: Jlekc 30.8.2005, 10:20
Код

proscroll.prototype.__proto__ = TextField.prototype

Автор: PROCESSOR 30.8.2005, 16:30
А в этой книге вот так делалось :

proscroll.prototype=new TextField()

помоему вполне логично:

теперь прототипы proscroll=textfield
и к proscroll можно добавлять методы и конструктор переписывать ( как в моем примере )

вот только на экран его createTextField не вынуть. А MovieClip можно... тока очень мудно. Используя Object.registerClass и Linkage в библиотеке. Короче лево както.

Вообще не особо врубаюсь что делает registerClass() - вот это обьясните.

P.S.

Вообщем-то я уже сделал чо хотел:

- терь у мя все textField ( DYNAMIC и INPUT даже во время ввода ) со скроллами - подибие IFRAME. Следовательно списки, меню тоже ( см.ниже) smile

- и вообще все динамические данные ( меню, списки всех типов, формы ) чрезвычайно удобно выводить черех Dynamic поле с HTML включенным. Особенно когда в XML все данные. И нажатие проверять через ASFUNCTION.

УРРА ! Полностью перехожу на ООП ( на уровне function пока еще ). Правда код больше становиться. Но намного легче и универсальнее.

Автор: AlDev 30.8.2005, 17:54
Цитата(PROCESSOR @ 30.8.2005, 21:30)
Вообще не особо врубаюсь что делает registerClass() - вот это обьясните.


если кодить под mtasc - там нет понятия библиотеки, и для того, чтобы сделать attachMovie надо прописать класс, наследующий от MovieClip, в нём прописать registerClass, а затем уже можно делать attachMovie, обращаясь к классу.

Автор: AntonioBanderaz 31.8.2005, 01:55
registerClass - выделяет новые видеоклипы в подкласс, т.е предварительно регистрирует видеоклипы как члены определённого класса, о как. А если понятней, то допустим начнём с AttachMovie, ты ведь можешь написать clip.attachMovie("ID","name",_level0.getN...Depth(),Obj); и у тебя твой проаттаченый клип будет обладать всеми свойствами объекта Obj, так... А если мы сделаем не объект а функцию, допустим reg = function() { this.vari = _global.ObjN++;}
а теперь мы смело можем написать такой код:

reg = function() {
this.vari = _global.ObjN++;
}

_global.ObjN = 0;
for(var i=0;i<3;i++) {
this.attachMovie("ID","name"+i.toString(),this.getN...Depth(),new reg());
trace(this["name"+i.toString()].vari);
}

Теперь все клипы унаследовали свойства (локальные) которыми обладают экземпляры "класса" reg.

Ну а теперь должно быть всё намного понятней и с registerClass...

object.registerClass("ID", reg);

И уже не обязательно писать каждый раз при аттаче что он наследует такой-то класс, всё будет происходить автоматически, даже при дупликации. Объект с linkegeID = ID, станет членом сласса reg, без потери всех присущих ему свойств и содержания... Ну просто разжевал как мог, точнее как сам это дело понимаю, если что поправьте...

P.S. Про mtasc не знаю, собираюсь изучать, но все никак.... =)

Автор: AlDev 31.8.2005, 03:47
AntonioBanderaz,
а там примерно то-же самое, только покрасивее написано:
Код

class some_class extends MovieClip
{
        public static var SymbolName:String = "__Packages.some_class";
        public static var SymbolOwner:Object = some_class;
        public static var SymbolLinked = Object.registerClass(SymbolName, SymbolOwner);
}
//usage:
import some_class
...
_root.attachMovie(some_class.SymbolName,'some_class_instance',_root.getNextHighestDepth());

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)