Просмотр полной версии : attachMovie в классе (Class)
Народ такая проблема. Помогите плиз.. Читал форум может не дочитал чего... :rtfm:
код класса:
class buttonery extends MovieClip {
static var levelx =50;
function buttonery (pictype:String, px:Number, py:Number)
{
var P:MovieClip;
P.attachMovie ( pictype, "picc", levelx++ );
P.picc._x=px;
P.picc._y=py;
}
}
//// код на первом кадре
//// var B1:buttonery = new buttonery ("coffee", 30,100 );
//// var B2:buttonery = new buttonery ("orange", 200,100);
Проблема, как добится появления клипа? с названиями coffee и orange которые в библиотеке и линкейджнуты стеми ж именами.???? :rtfm: КАРАУЛ!!!!
На _root - ложатся... ( _root.attachMovie ( pictype, "picc", levelx++ ); ) но ето не дело... чё тут делать???
Вы где-нибудь видели стандартный класс, у которого имя с маленькой буквы начинается? Так с какого перепоя вы называете классы с маленькой буквы?
В AS1/AS2 наследники MovieClip не создаются через оператор new.
Fernando Costa
20.12.2007, 18:25
надо привязать мувик в библиотеке к классу buttonery - в поле Class укажите buttonery.
В поле identifier обзывайте как хотите и потом аттачте этот ваш мувик как обычно по его идентификатору
ЗЫ: классы пишутся с большой буквы
ну, или еще вариант:
клип, к которому аттачится клип из библиотеки (Р) должен существовать до того как вы вызываете на нем аттачМуви. Т.е. его нужно либо в класе либо вне, но создать и либо передавать классу ссылку на него либо ссылку на клип, в котором нужно его создать соответственно.
Ларчик открыл таким кодом
class Buttonery extends MovieClip {
function Buttonery (pictype:String, px:Number, py:Number, sx:Number, sy:Number)
{
var nameclip = _root.getNextHighestDepth();
var nmm = "Buttonery_container"+nameclip;
_root.createEmptyMovieClip( nmm , nameclip);
eval(nmm).attachMovie (pictype , "picc", nameclip++ );
eval(nmm).picc._x=px;
eval(nmm).picc._y=py;
eval(nmm).picc._xscale =sx;
eval(nmm).picc._yscale =sy;
//trace (eval(nmm));
}
}
Код заработал....
а помог мне тут еще и trace (eval(nmm));
он выдал
_level0.Buttonery_container1
_level0.Buttonery_container0
....
а я дописывал еще _root... и флеш, зараза, не глотнул
Ларчик открылся!
СПАСИБО ВСЕМ!!!!
attachMovie между прочим возвращает ссылку на созданный клип, как и createEmptyMovieClip, а вы извращаетесь в eval, да ещё в AS2. Ужас.
Извращение...
class MyClass {
private var __mc:MovieClip;
public function myFunction(mc:MovieClip){
__mc = mc; // #1
__mc = mc.attachMovie("blah","blah",1234); // #2
__mc = mc.createEmptyMovieClip("blah",1234); // #3
__mc = mc.createEmptyMovieClip("blah",1234).attachMovie("blah","blah",1234); // #4
}
}
не понял...
об"ясните тупоголовому процедурщику...
в своем варианте я принимаю (передаю) аргументы
function Buttonery (pictype:String, px:Number, py:Number, sx:Number, sy:Number)
а тут вы принимаете (передаете) как аргумент мувик... как ето работает? если так написан код вроде как понимаю логику... но мне нужно передать в функцию-конструктор параметры имя клипа, ширинаX, ширинаY....
Разжуйте для тормоза .. код в создания екземпляра и код класса...
А то фрагменты одни.... Ну начинал я с eval... ниче не сделать...
Спасибо!
Передается не клип, а ссылка на него. Т.е. все сложные объекты (не строки\числа\константы) не дублируются при операциях с ними.
Пример:
var a:Object = {_a:100};
var b:Object = a;
b._a = 50;
trace(a._a); // output 50
eval - функция не рекомендованая к употреблению. И ее использование может привести к ошибкам, которые тяжело отследить.
В твоем случае есть 2 нормальных пути реализации:
1. Залинковать класс к клипу в библиотеке, как предложил Fernando Costa
2. Создавать экземпляр класса с помощью оператора new.
Я просто не люблю первый вариант. Но все равно попробую в двух словах объяснить. Дело в том, что MovieClip и все потомки этого класса не могут быть созданы с помощью оператора new потому что должны обязательно быть привязаными к родителю, и привязку эту никак в последствии поменять нельзя (что, слава богу, было изменено в АС3).
Т.е. чтобы создать новый клип - есть методы класса MovieClip - .attachMovie(), .createEmptyMovieClip(), .duplicateMovieClip() - все они требуют в агрументах указывать на родителя, либо родитель находится по умолчанию в определенном месте по отношению к клипу, чей метод был вызван.
Первый вариант (линкование класса к клипу в библиотеке) используется для: создания компонентов (по-другому просто не возможно). Или если дизайнер принес уже готовый UI, и нужно его только оживить (и не вдаваться в подробности где что находится, какой клип послке какого создавать и т.п. Т.е. програмер вообще не занимается графикой - она вся уже существует, нужно только добавить функционала. Если проект небольшой, графики не много, и уклон на красивости оформления, а не на функционал - это вплоне хороший способ. Так примерно и создается 90% всего, что вообще делается на флеш.
Второй вариант - предпочтительнее для проектов, где нужна сложная програмная графика.
Эволюция %)
class Buttonery extends MovieClip {
private var nameclip:Number = 0;
private var nmm:Number = "";
function Buttonery(pictype:String, px:Number, py:Number, sx:Number, sy:Number) {
nameclip = _root.getNextHighestDepth();
nmm = "Buttonery_container"+nameclip;
createEmptyMovieClip(nmm , nameclip);
var picc:MovieClip = attachMovie(pictype , "picc", getNextHighestDepth());
picc._x=px;
picc._y=py;
picc._xscale=sx;
picc._yscale=sy;
trace(this);
}
} Этот нужно аттачить из библиотеки
class Buttonery {
private var nameclip:Number = 0;
private var nmm:Number = "";
private var buttonery_mc:MovieClip;
function Buttonery(pictype:String, px:Number, py:Number, sx:Number, sy:Number) {
nameclip = _root.getNextHighestDepth();
nmm = "Buttonery_container"+nameclip;
buttonery_mc = _root.createEmptyMovieClip(nmm , nameclip);
buttonery_mc.attachMovie(pictype , "picc", buttonery_mc.getNextHighestDepth());
buttonery_mc.picc._x=px;
buttonery_mc.picc._y=py;
buttonery_mc.picc._xscale =sx;
buttonery_mc.picc._yscale =sy;
trace (buttonery_mc);
}
} Этот можно создать через new, но не красиво.
class Buttonery {
private static var __instanceCounter:Number = 0;
public static function createTypeClip(mc:MovieClip, pictype:String):MovieClip {
return mc.attachMovie(pictype, pictype+(++__depthCounter), mc.getNextHighestDepth());
}
} Создаем "библиотеку" статических методов создающих клипы "на заказ" %)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.