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

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

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

Регистрация: Mar 2013
Сообщений: 290
По умолчанию Ошибки Мука. Не работает stop().

Всем привет.
Еще один базовый вопрос.

Читаю Мука, разбираю простейший пример из главы Programmatic Timeline Control.

Исходные данные:
Основной файл: Star_demo.fla.
В его библиотеке есть символ Star, и пять безымянных экземпляров на первом (и единственном) фрэйме.
К этому символу привязан файл Star.as содержащий програмную анимацию.

К Star_demo.fla привязан document class файл: Star_demo.as

Который содержит такой код:

Код AS3:
package
{
  import flash.display.MovieClip;
 
  public class Star_demo extends MovieClip
  {
		public function Star_demo ( )
		{
 
 
			 for (var i:int=0; i < numChildren; i++) 
			 {
 
                           getChildAt(i).stop(); //1061: Call to a possibly undefined
                                              //method stop through a reference 
                                             //with static type flash.display:DisplayObject.
 
			 }
 
 
		}
  }
}
И вот почему-то появляется такая ошибка. Хотя в книжке сказано, что все пучком должно быть.

Что не так? Вроде бы всё ОК, класс расширяет MovieClip, а значит и наследует его метод stop().

Причем, если эту строчку заменить на:
Код AS3:
trace(getChildAt(i).name);
То список экземпляров выдается, все ОК.
Свойство namе почему-то видно без проблем.

Старый 09.07.2013, 12:39
NoisyFlasher вне форума Посмотреть профиль Отправить личное сообщение для NoisyFlasher Найти все сообщения от NoisyFlasher
  № 2  
Ответить с цитированием
NoisyFlasher
 
Аватар для NoisyFlasher

Регистрация: Aug 2012
Сообщений: 70
Как я разумею, метод getChildAt() возвращает вам DisplayObject, у которого нет метода stop(). А вот свойство name у него есть - поэтому и возвращается без проблем)

Вы же здесь обращаетесь к методу объекта, который вам возвращается, а не к методу вашего класса, в котором работаете:
Код AS3:
getChildAt(i).stop()
UPD: а вы в чем пишите - во Flash или в нормальной IDE? Возможно дело в этом - у Мука там пример приведен для Flash Professional. У меня сейчас нет возможности проверить, к сожалению. А, пардон - не увидел. В любом случае, попробую вечером дома)


Последний раз редактировалось NoisyFlasher; 09.07.2013 в 12:42. Причина: Я буду внимательно читать исходное сообщение, я буду внимательно читать исходное сообщение...
Старый 09.07.2013, 12:42
Bletraut вне форума Посмотреть профиль Отправить личное сообщение для Bletraut Найти все сообщения от Bletraut
  № 3  
Ответить с цитированием
Bletraut
 
Аватар для Bletraut

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 566
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Код AS3:
(getChildAt(i) as MovieClip).stop()

Старый 09.07.2013, 12:59
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 4  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
NoisyFlasher, хм, про DisplayObject я как-то не подумал, весьма похоже что так.

Не, ну у меня тоже Adobe Flash CS3 Professional, хотя может его и не стоит считать нормальным IDE?
В чем кстати, оптимальнее всего работать, на ваш взгляд? Или это от задач зависит...

Bletraut, такой вариант ошибку не выдает, однако... анимация всё-равно продолжается.
Может так и должно быть? Видимо он делает stop() на один миг, но потом всё повторяется циклически...

Старый 09.07.2013, 13:29
NoisyFlasher вне форума Посмотреть профиль Отправить личное сообщение для NoisyFlasher Найти все сообщения от NoisyFlasher
  № 5  
Ответить с цитированием
NoisyFlasher
 
Аватар для NoisyFlasher

Регистрация: Aug 2012
Сообщений: 70
Ну вот Bletraut показал верный путь, на мой взгляд - привести к MovieClip, а у того уже есть нужный метод.
Вообще, не стоит писать во Flash Professional - по-хорошему, его следует только для подготовки графики использовать. Ну или для каких-то мелких вещей - банер там нарисовать) Я начинал с Eclipse с плагином Flash Development Tools. FDT платный, но есть и бесплатная версия - мне, правда не понравилась. Сейчас пользуюсь Flash Develop (http://www.flashdevelop.org/). Он бесплатный, гибко настраиваемый - мне нравится.
А по поводу того, что анимация продолжается - может это из-за того, что она программно задана?.. Можно код файла Star.as?

Старый 09.07.2013, 13:33
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 6  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
Класс Star.as выложите. Метод stop(); останавливает анимацию если она будет сделана на временной шкале, а так как у вас анимация написана через код (я думаю использованы твины) , то stop(); не остановит.А ошибка может быть из-за того ,что star это не MovieClip а Sprite , а у спрайта метода stop(); нет.

Старый 09.07.2013, 13:55
Mareg вне форума Посмотреть профиль Отправить личное сообщение для Mareg Найти все сообщения от Mareg
  № 7  
Ответить с цитированием
Mareg

Регистрация: Jul 2013
Сообщений: 9
Самый простой способ - через ссылку.

Код AS3:
package
{
  import flash.display.MovieClip;
 
  public class Star_demo extends MovieClip
  {
		public function Star_demo ( )
		{
 
 
			 for (var i:int=0; i < numChildren; i++) 
			 {
 
                           var temp=MovieClip(getChildAt(i)); 
                           temp.stop();
			 }
 
 
		}
  }
}

Старый 09.07.2013, 14:19
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 8  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
NoisyFlasher, А-ха, значит FlashDevelop, отлично, так и запишем.
Код сейчас выложу. Там юзается таймер, наверное в этом дело.

belv, Нет, в библиотеке у Star тип MovieClip. Код выложен ниже.

Mareg, Это какой-то трюк "динамического программирования"?
Хотя, по-сути тут тоже идет приведение к типу МувиКлип, насколько я понимаю.

Код Star.as:
Код AS3:
package
{
	  import flash.display.MovieClip;
	  import flash.utils.Timer;
	  import flash.events.TimerEvent;
 
	  public class Star extends MovieClip
	  {
		private var timer:Timer;
 
		public function Star ( )
		{
		  timer = new Timer(100, 0);
		  timer.addEventListener(TimerEvent.TIMER, timerListener);
		  timer.start( );
		}
 
		private function timerListener (e:TimerEvent):void
		{
		  randomFade( );
		}
 
		private function randomFade ( ):void
		{
 
		  alpha = Math.random();
 
		  var starscale:Number = Math.random() * 0.9;
 
		  scaleX = starscale;
		  scaleY = starscale;
 
		  x = 150 + 150 * Math.random();
		  y = 100 + 150 * Math.random();
		  rotation = Math.random() * 90;
 
		}
 
		public function dispose ( ):void
		{
		  timer.stop( );
		}
	  }
}

Старый 09.07.2013, 14:41
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 9  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
Вот так у меня останавливает анимацию
var mc = getChildAt(i);
mc.dispose();

Старый 09.07.2013, 15:09
Mareg вне форума Посмотреть профиль Отправить личное сообщение для Mareg Найти все сообщения от Mareg
  № 10  
Ответить с цитированием
Mareg

Регистрация: Jul 2013
Сообщений: 9
Собственно, да. mc.dispose(); Программная анимация и останавливается программно. Таймер, это не стандарт для MovieClip, он добавлен в дочернем классе. Можно конечно сделать таймер public переменной, и стопорить через mc.timer.stop(); , но инкапсуляцией будет правильней.

Я то подумал, что есть Мувклип созданный из-под IDE.

Насчет приема - это местная специфика, например можно код писать как и в AS2, через parent, только его нужно преобразовать в Object
Код AS3:
Object(parent).x+=10;
, хотя так лучше не делать, потому что это шикарнейший полигон для ошибок.

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

Теги
movieclip , stop() , Мук , ошибка 1061
Опции темы
Опции просмотра

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

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


 


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


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