![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Oct 2009
Сообщений: 40
|
Добрый вечер.
Идея заключается в следующем: есть главный код и внешний. Во внешнем создал новый класс Button_color с функцией. Эта функция сама создаёт кнопку "button" с координатами "corX" и "corY", при её нажатии работает функция fadeInClick которая должна вывести на сцену мувик "mc" из библиотеки Проблема в следующем. Не хочет вопроизводить свойство "mc", а так как таких мувиков будет много и хотелось бы просто в основном файле при вызове класса указывать какой мувик мне нужен. Если подгружать мувик напрямую а не задавать его как свойство, то всё работает шикарно. Соответсвенно подозреваю что я его неправильно "преподаю" для главного кода . Ошибка "1067: Implicit coercion of a value of type Class to an unrelated type String." Код внешнего класса: package { import flash.display.MovieClip; import flash.events.MouseEvent; import flash.events.Event; public class Button_color extends MovieClip { public function Button_color (corX:Number = 200, corY:Number =200, color:uint = 0xffffff, mc:String){ var ex = new mc(); var button:MovieClip = new MovieClip(); button.graphics.beginFill(color); button.graphics.drawRoundRect(corX,corY,40,40,20,20); button.graphics.endFill(); addChild(button); button.addEventListener(MouseEvent.CLICK, fadeInClick); function fadeInClick(e:MouseEvent):void{ ex.alpha = 0; ex.x = 834,45; ex.y = 265,45; addEventListener(Event.ENTER_FRAME, fadeIn); function fadeIn (e:Event): void { ex.alpha += .05; addChild(ex); } } } } } Последний раз редактировалось bettyshort; 17.10.2012 в 17:03. |
|
|||||
|
1. Для офрмления кода есть теги AS3
2. Касательно вашей проблемы. Вы передаёте обыкновенную строку, а хотите от неё экземпляра класса. Решение: 1. Либо передавать класс в качестве аргумента (где у вас mc:String - сделать mc:Class) 2. Либо воспользоваться getDefinitionByName() UPD: Рекомендации в целом: 1. Типизируйте переменные. На это есть огромная масса причин. 2. Button_color - не следует называть так класс, т.к. каждое слово в именах классов должно начинаться с заглавной буквы. Подчёркивания обычно используются в именах констант. 3. Имя этого класса толком ничего не говорит о его назначении... Лучше было-бы что-нибудь вроде: ColoredButton или ColorizedButton 4. Несмотря на то, что компилятор сам сделает метод fadeInClick приватным, всё же следует ручками наделяет его атрибутом private. 5. В чём смысл вложенности метода fadeIn?? О боже.. у вас там всё вложено... Последний раз редактировалось FlashRus; 17.10.2012 в 17:15. |
|
|||||
|
ОфОРМЛЯЙТЕ КОД ТЕГАМИ!!
А если по делу - это что? Вы из переданной в функцию строки экземпляр класса хотите создать? Передавайте мувик как параметр, судя по всему для вас это будет проще всего. То есть: и дальше делайте с ним все что хотите. Добавлено через 47 секунд опоздал ((( |
|
|||||
|
Регистрация: Oct 2009
Сообщений: 40
|
Пробовал и mc:Class и mc:MovieClip еще до обращения сюда, проблема не исчезла.
Цитата:
Обязательно обращу своё внимание на изучение данной проблемы, после того как решу эту, ибо боюсь сейчас что либо трогать в коде. |
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
вот эта строка не понятна
в конструктор передается экземпляр класса MovieClip замените ее на должно заработать. а вообще переменную ex создавать не нужно, а работать сразу напрямую: то есть заменить все ex на mc |
|
|||||
|
Регистрация: Oct 2009
Сообщений: 40
|
Цитата:
я думал так можно вызвать экземпляр классов (А, В, С, D, и т д), но с возможностью самому указывать какой именно мне нужен в данный момент, в главном коде подставив вместо mc название нужного класса. |
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
в конструктор можно передавать только экземпляры класса, но никак ни сам класс.
тут убираем mc:String так создаем экземпляр экспортированного мувиклипа, который находится в библиотеке var ex:A = new A(); //new B(); new C(); смотря какой класс вас интересует var button:MovieClip = new MovieClip(); button.graphics.beginFill(color); button.graphics.drawRoundRect(corX,corY,40,40,20,20); button.graphics.endFill(); addChild(button); тогда нужно делать так и так далее |
|
|||||
|
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
Если вы хотите задать строку в конструктор, и получить ссылку на класс, используйте getDefinitionByName() (как вам уже написал FlashRus)
Вместо |
|
|||||
|
Регистрация: Oct 2009
Сообщений: 40
|
Isfet ваши заметки понял. Единственное, думаю таким методом я получу внешний скрипт огромных размеров. Но всёравно сначала попробую так как вы посоветовали.
Ребята, спасибо что отозвались на мою проблему. |
|
|||||
|
зачем тут getDefinitionByName()??
Если мувики в библиотеке импортированы в AS, то все прекрасно работает и так: пример накидал в кадре, MyName - класс мувика в библиотеке. Все работает, мувик появляется на сцене. |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:44. |
|
|
« Предыдущая тема | Следующая тема » |
|
|