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

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

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

Регистрация: Feb 2011
Адрес: Омск
Сообщений: 6
Question Как удалить объект со сцены по окончанию Tween?

Помогите, пожалуйста, новичку. Не получается удалить объект со сцены, в таком случае:
Код AS3:
var bar2:bar1=new bar1();
stage.addChild(bar2);
barX = new Tween(bar2,"x",Back.easeOut,2,100,1,true);
barX.addEventListener(TweenEvent.MOTION_FINISH,bbb);
 
function bbb(e:TweenEvent) {
	stage.removeChild(DisplayObject(bar2));
}
bar1 - это MovieClip экспортированный в Action Script.
Выдаёт ошибку
Код:
ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта.
	at flash.display::DisplayObjectContainer/removeChild()
	at array_remove_fla::MainTimeline/aaa()
	at flash.events::EventDispatcher/dispatchEventFunction()
	at flash.events::EventDispatcher/dispatchEvent()
	at fl.transitions::Tween/set time()
	at fl.transitions::Tween/nextFrame()
	at fl.transitions::Tween/onEnterFrame()
Колин Мук прочитан, форум обыскан, но решение не найдено, возможно из-за невнимательности. Не удаляет именно из-под функции твина. Как правильно прописать removeChild() в таком случае?
Удаления типа bar2.parent.removeChild(DisplayObject(bar2)) не работает и проверка с помощью contains() также.


Последний раз редактировалось iNils; 05.02.2011 в 20:19.
Старый 05.02.2011, 19:38
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Код AS3:
function bbb( e:TweenEvent ):void
{
    if( stage && stage.contains( bar2 as DisplayObject ) )
        stage.removeChild( bar2 as DisplayObject );
}

Старый 05.02.2011, 20:00
Lazura вне форума Посмотреть профиль Отправить личное сообщение для Lazura Найти все сообщения от Lazura
  № 3  
Ответить с цитированием
Lazura
 
Аватар для Lazura

Регистрация: Feb 2011
Адрес: Омск
Сообщений: 6
Спасибо, что откликнулись, но к сожалению не работает, ошибка та же.

Старый 05.02.2011, 20:26
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Что показывает?
Код AS3:
function bbb(e:TweenEvent) {
	trace (bar2);
}
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Feb 2011
Адрес: Омск
Сообщений: 6
i.o., прошу прощения этот вариант работает! Огромное спасибо за помощь!

Код AS3:
function bbb( e:TweenEvent ):void
{
    if( stage && stage.contains( bar2 as DisplayObject ) )
        stage.removeChild( bar2 as DisplayObject );
}
iNils, думаю в таком случае вопрос не актуален, но выдаёт [object bar1]

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Аварийное решение заключается в том, чтобы удалять объект из его родителя, не важно, кто это. Т.е., примерно так:

Код AS3:
function anyObjectRemover(obj:DisplayObject) : void
{
   var parentObj:DisplayObject = obj.parent as DisplayObject;
   parentObj.removeChild(obj);
}
Но вообще-то, я не советую так поступать.

Старый 05.02.2011, 22:41
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 7  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Lazura, всегда пожалуйста
mikhailk, а такое разве скомпилируется?

Старый 05.02.2011, 22:55
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
i.o., а почему такое не должно скомпилироваться?
Другое дело, что это бросит RTE =)

Старый 05.02.2011, 22:59
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 9  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
ок, напутал с классом

вот рабочий код:

Код AS3:
package 
{
	import flash.display.*;
	import flash.events.*;
 
	public class Main extends Sprite 
	{
 
		private var sprite1:Sprite;
		private var sprite2:Sprite;
		private var sprite3:Sprite;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			sprite1 = new Sprite();
			setRandomRectangle(sprite1);
			addChild(sprite1);
 
			sprite2 = new Sprite();
			setRandomRectangle(sprite2);
			sprite1.addChild(sprite2);
 
			sprite3 = new Sprite();
			setRandomRectangle(sprite3);
			sprite2.addChild(sprite3);
 
			addEventListener(MouseEvent.CLICK, onMouseClick);
		}
 
		private function onMouseClick(e:MouseEvent) : void
		{
			anyObjectRemover(sprite3);
			anyObjectRemover(sprite2);
			anyObjectRemover(sprite1);			
		}
 
		private function anyObjectRemover(obj:Sprite) : void
		{
			var parentObj:Sprite = obj.parent as Sprite;
			parentObj.removeChild(obj);
		}
 
		private function setRandomRectangle(sprite:Sprite) : void
		{
			sprite.graphics.beginFill(Math.random() * 10000000);
			sprite.graphics.drawRect(Math.random() * 100, Math.random() * 100, Math.random() * 300, Math.random() * 300);
			sprite.graphics.endFill();
		}
 
	}
 
}


Последний раз редактировалось mikhailk; 05.02.2011 в 23:02.
Старый 05.02.2011, 23:03
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 10  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
i.o., а почему такое не должно скомпилироваться?
если мне не изменяет память, то потому что DisplayObject не имеет метода removeChild
mikhailk, в принципе достаточно было указать DisplayObjectContainer. Однако не поленился целый пример написать


Последний раз редактировалось i.o.; 05.02.2011 в 23:05.
Создать новую тему Ответ Часовой пояс GMT +4, время: 14:13.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
removeChild , tween
Опции темы
Опции просмотра

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

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


 


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


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