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

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

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

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
По умолчанию displayObject must be a child of the caller

При попытке сделать расплывающиеся круги (код внизу сообщения) у меня в вывод выходит ошибка

Код:
ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта.
	at flash.display::DisplayObjectContainer/removeChild()
	at Function/<anonymous>()

Я не понимаю что с этой ошибкой делать, причина вроде
Код AS3:
removeChild(buffer);
но я не уверен.

Вот сам код:
Код AS3:
addEventListener(Event.ENTER_FRAME,
	function doIT(event:Event):void{
		var currentBall:ball=new ball;
		currentBall.x=Math.random()*550;
		currentBall.y=Math.random()*400;
		addChild(currentBall);
		currentBall.addEventListener(Event.ENTER_FRAME,
			function doIT(event:Event):void{
				var buffer:MovieClip=MovieClip(event.target);
				buffer.scaleX=buffer.scaleX-0.05;
				buffer.scaleY=buffer.scaleY-0.05;
				buffer.alpha=buffer.alpha-0.05;
 
				if(buffer.alpha<0.2){
					buffer.removeEventListener(Event.EXIT_FRAME, doIT);
					removeChild(buffer);
				}
			});
	}
);
Добавлено через 1 минуту
Если убрать строчку
Код AS3:
removeChild(buffer);
То всё прекрасно работает первое время. Но потом флешка тормозит и прекращает работать...

Добавлено через 4 минуты
Извините, нашёл ошибку. Вот так всегда, как напишешь - так найдёшь. В самом конце кода
Код AS3:
 buffer.removeEventListener(Event.EXIT_FRAME, doIT);
Надо написать ENTER_FRAME.

Но чтобы тема не пропадала, скажите как сделать, чтобы они не соприкасались с друг с другом


Последний раз редактировалось iNils; 08.12.2010 в 13:19.
Старый 08.12.2010, 13:37
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Зачем здесь вообще этот код?
Код AS3:
currentBall.addEventListener(Event.ENTER_FRAME, function doIT(event:Event):void{
				var buffer:MovieClip=MovieClip(event.target);
				buffer.scaleX=buffer.scaleX-0.05;
				buffer.scaleY=buffer.scaleY-0.05;
				buffer.alpha=buffer.alpha-0.05;
 
				if(buffer.alpha<0.2){
					buffer.removeEventListener(Event.EXIT_FRAME, doIT);
					removeChild(buffer);
				}
			});
У вас ентер фрейм добавляется в каждом кадре. Естественно все начнет тормозить

Старый 08.12.2010, 13:41
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 3  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
А каким образом надо написать код, чтобы не тормозило и работало?

Старый 08.12.2010, 13:44
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 4  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
нужно использовать не больше одного (по возможности) энтер фрейма. И в его обработчике выполнять весь нужный код

Старый 08.12.2010, 13:46
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 5  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
Сейчас попробую... Спасибо

Добавлено через 2 минуты
Код AS3:
addEventListener(Event.ENTER_FRAME,
				 function doIT(event:Event):void{
					 var currentBall:ball=new ball;
					 currentBall.x=Math.random()*550;
					 currentBall.y=Math.random()*400;
					 addChild(currentBall);
					   var buffer:MovieClip=MovieClip(event.target);
					buffer.scaleX=buffer.scaleX-0.05;
					buffer.scaleY=buffer.scaleY-0.05;
					buffer.alpha=buffer.alpha-0.05;
					if(buffer.alpha<0.2){
					buffer.removeEventListener(Event.ENTER_FRAME, doIT);
					removeChild(buffer)
					}
				 })
Если сделать такой код, то всё улетает в у гол в выдаёт ошибку:
ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта.
at flash.display:isplayObjectContainer/removeChild()
at Function/<anonymous>()

Добавлено через 12 минут
Мне кажется тут вообще нельзя обойтись без двух ENTER_FRAME...

Старый 08.12.2010, 14:09
petri вне форума Посмотреть профиль Отправить личное сообщение для petri Найти все сообщения от petri
  № 6  
Ответить с цитированием
petri
 
Аватар для petri

Регистрация: Dec 2009
Сообщений: 60
Ну для начала стоит обратить внимание на то что баффер нигде не добавляется в дисплей лист, откуда вы его удалить то пытаетесь?

Старый 08.12.2010, 14:12
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 7  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
И как же его добавить? Помогите пожалуйста, просто не всё удаётся сразу понять.

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

Регистрация: Dec 2009
Сообщений: 60
Я бы предложил вам пересмотреть подход к решению задачи. Сделайте класс Waterdrop к примеру и внутри опишите логику (уменьшение альфы + все что душе угодно и уничтожение) а в энтерфрейме создавайте только объекты. И еще мне кажется с таймером кошернее будет =)

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

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
Я не умею всего этого, я делал это по уроку, можете написать код или помочь в написании?

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

Регистрация: Dec 2009
Сообщений: 60
Оу, это что за уроки такие с кучей энтерфреймов? Берите Мука и читайте, все со временем поймете. Помогать в написании не буду. Не потому, что злой, а потому, что вам это не поможет скорее всего. Да и удовольствие получите когда самостоятельно сделаете куда большее)

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

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

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


 


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


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