Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.10.2012, 16:53
bettyshort вне форума Посмотреть профиль Отправить личное сообщение для bettyshort Найти все сообщения от bettyshort
  № 1  
Ответить с цитированием
bettyshort

Регистрация: Oct 2009
Сообщений: 40
По умолчанию Передача свойства из abc.as в главную

Добрый вечер.

Идея заключается в следующем: есть главный код и внешний. Во внешнем создал новый класс Button_color с функцией. Эта функция сама создаёт кнопку "button" с координатами "corX" и "corY", при её нажатии работает функция fadeInClick которая должна вывести на сцену мувик "mc" из библиотеки

Проблема в следующем. Не хочет вопроизводить свойство "mc", а так как таких мувиков будет много и хотелось бы просто в основном файле при вызове класса указывать какой мувик мне нужен. Если подгружать мувик напрямую а не задавать его как свойство, то всё работает шикарно. Соответсвенно подозреваю что я его неправильно "преподаю" для главного кода .

Ошибка "1067: Implicit coercion of a value of type Class to an unrelated type String."

Код внешнего класса:

Код AS3:
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);
}
}
} 
}
}
Код главный:

Код AS3:
var button_color:Button_color = new Button_color(30, 760, 0xf1d200, SignalYellow);
addChild(button_color);


Последний раз редактировалось bettyshort; 17.10.2012 в 17:03.
Старый 17.10.2012, 17:00
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 2  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 921
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
1. Для офрмления кода есть теги AS3
2. Касательно вашей проблемы. Вы передаёте обыкновенную строку, а хотите от неё экземпляра класса.
Решение:
1. Либо передавать класс в качестве аргумента (где у вас mc:String - сделать mc:Class)
2. Либо воспользоваться getDefinitionByName()


UPD:
Рекомендации в целом:
1. Типизируйте переменные. На это есть огромная масса причин.
Код AS3:
var ex
2. Button_color - не следует называть так класс, т.к. каждое слово в именах классов должно начинаться с заглавной буквы. Подчёркивания обычно используются в именах констант.
3. Имя этого класса толком ничего не говорит о его назначении... Лучше было-бы что-нибудь вроде: ColoredButton или ColorizedButton
4. Несмотря на то, что компилятор сам сделает метод fadeInClick приватным, всё же следует ручками наделяет его атрибутом private.
5. В чём смысл вложенности метода fadeIn?? О боже.. у вас там всё вложено...


Последний раз редактировалось FlashRus; 17.10.2012 в 17:15.
Старый 17.10.2012, 17:01
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 3  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
ОфОРМЛЯЙТЕ КОД ТЕГАМИ!!
А если по делу -
Код AS3:
var ex = new mc();
это что? Вы из переданной в функцию строки экземпляр класса хотите создать? Передавайте мувик как параметр, судя по всему для вас это будет проще всего.
То есть:
Код AS3:
(corX:Number = 200, corY:Number =200, color:uint = 0xffffff, mc:MovieClip){
и дальше делайте с ним все что хотите.

Добавлено через 47 секунд
опоздал (((

Старый 17.10.2012, 17:37
bettyshort вне форума Посмотреть профиль Отправить личное сообщение для bettyshort Найти все сообщения от bettyshort
  № 4  
Ответить с цитированием
bettyshort

Регистрация: Oct 2009
Сообщений: 40
Пробовал и mc:Class и mc:MovieClip еще до обращения сюда, проблема не исчезла.


Цитата:
5. В чём смысл вложенности метода fadeIn?? О боже.. у вас там всё вложено...
Обучаюсь по официальной книге Adobe, довольно недавно. Только начинаю вникать в AS3.
Обязательно обращу своё внимание на изучение данной проблемы, после того как решу эту, ибо боюсь сейчас что либо трогать в коде.

Старый 17.10.2012, 17:47
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 5  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
вот эта строка не понятна
Код AS3:
 var ex = new mc();
в конструктор передается экземпляр класса MovieClip
замените ее на
Код AS3:
 var ex:MovieClip = mc;
должно заработать.
а вообще переменную ex создавать не нужно, а работать сразу напрямую:
то есть заменить все ex на mc

Старый 18.10.2012, 17:23
bettyshort вне форума Посмотреть профиль Отправить личное сообщение для bettyshort Найти все сообщения от bettyshort
  № 6  
Ответить с цитированием
bettyshort

Регистрация: Oct 2009
Сообщений: 40
Цитата:
это что? Вы из переданной в функцию строки экземпляр класса хотите создать?
представьте что в библиотеке 200 мувиклипов (А, В, С, D, и т д), каждый в настройках, экспортировал для ЭкшнСкрипт, соответственно для каждого создались классы А, В, С, D, и т д.

Код AS3:
 var ex = new mc();
я думал так можно вызвать экземпляр классов (А, В, С, D, и т д), но с возможностью самому указывать какой именно мне нужен в данный момент, в главном коде подставив вместо mc название нужного класса.

Старый 18.10.2012, 17:49
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 7  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
в конструктор можно передавать только экземпляры класса, но никак ни сам класс.
тут убираем mc:String
Код AS3:
public function Button_color (corX:Number = 200, corY:Number =200, color:uint = 0xffffff){
так создаем экземпляр экспортированного мувиклипа, который находится в библиотеке
Код AS3:
  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);
я так понял что вы хотите в конструктор передавать имя класса , от которого нужно создать экземпляр?
тогда нужно делать так
Код AS3:
 public function Button_color (corX:Number = 200, corY:Number =200, color:uint = 0xffffff, className:String){
var ex:MovieClip;
    if(className=="classA"){
        ex = new A():
    }
    else if(className=="classB"){
        ex = new B():
    }
}
и так далее

Старый 18.10.2012, 17:56
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 8  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Если вы хотите задать строку в конструктор, и получить ссылку на класс, используйте getDefinitionByName() (как вам уже написал FlashRus)
Вместо
Код AS3:
var ex = new mc();
Код AS3:
var ClassReference:Class = getDefinitionByName(mc) as Class;
var ex:Object = new ClassReference();

Старый 18.10.2012, 18:45
bettyshort вне форума Посмотреть профиль Отправить личное сообщение для bettyshort Найти все сообщения от bettyshort
  № 9  
Ответить с цитированием
bettyshort

Регистрация: Oct 2009
Сообщений: 40
Isfet ваши заметки понял. Единственное, думаю таким методом я получу внешний скрипт огромных размеров. Но всёравно сначала попробую так как вы посоветовали.

Ребята, спасибо что отозвались на мою проблему.

Старый 18.10.2012, 18:58
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 10  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
зачем тут getDefinitionByName()??
Если мувики в библиотеке импортированы в AS, то все прекрасно работает и так:
Код AS3:
createExampleOfClass (MyName);
 
function createExampleOfClass (className:Class):void
{
	var probe = new className ();
	addChild (probe);
}
пример накидал в кадре, MyName - класс мувика в библиотеке. Все работает, мувик появляется на сцене.

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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