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

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

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

Регистрация: Mar 2010
Адрес: Казань)
Сообщений: 18
По умолчанию Удаление экземпляра класса.

Здравствуйте)

У меня такая проблема: у меня есть класс Main

Main :
Код AS3:
package {
	import flash.display.*;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
	import flash.text.*;
	import flash.events.MouseEvent;
	public class Main extends Sprite {
		public var shar:Bubble;
		public var i:int;
		public var t:TextField = new TextField();
 
		public function Main() {
			var timer:Timer = new Timer(1000, 0);
			timer.addEventListener(TimerEvent.TIMER, newbubble);
			timer.start();
 
		}
		function newbubble(e:TimerEvent):void {
			shar=new Bubble();
			shar.x=0;
			shar.y=Math.random()*440;
			addChild(shar);
			this.addEventListener (MouseEvent.CLICK, remove);
			this.addChild(t);
			}
 
 
 
 
 
 
 
		function remove(e:MouseEvent):void {
		this.removeChild(shar);
		i+=1;
		trace(i);
		if (i<10) {
		t.text=String(i);
		}
		else {
			t.text="УРАААА!!!!11";
		}
		}
 
 
 
 
 
	}
}
и класс Bubble:
Код AS3:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	public class Bubble extends MovieClip {
		var speed=Math.random()*20;
		public function Bubble() {
			this.addEventListener(Event.ENTER_FRAME, handler_enterFrame);
		}
		function handler_enterFrame(e:Event):void {
			this.x+=speed;
		}
 
	}
}
.

Вообщем. У меня каждую секунду генерируются шары и летят с разной скоростью. При клике на них они должны удаляться. Но есть глюк. При нажатии на некоторые шары, удаляются совсем другие шары, но не тот, на который я жму. В чем дело?!

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Наверное так
Код AS3:
removeChild(e.currentTarget);
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 07.10.2010, 01:37
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 3  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Угу. По правилам хорошего тона

Код AS3:
function remove(event:MouseEvent):void {
    if (
        event.target is Bubble 
        && event.target.parent === this
    ) {
        super.removeChild(event.target);
    }
}
А то при клике можно попасть на дитя, которое совсем не шарик. Или шарик, но не наш. )


А в классе Bubble нужно предусмотреть отписку от Event.ENTER_FRAME при удалении bubble со Stage. И я вообще вижу сомнительным перенос родительской бизнес-логики в детей. Лучше укажите явно, что дите работает под руководством родителя. Поставьте ему какую-нибудь GoF-Strategy, можно даже с обратной связью. А сейчас получается, что дите бегает само по себе. Но, если так и задумано, то нет вопросов.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 07.10.2010 в 01:41.
Старый 07.10.2010, 18:33
Hidest вне форума Посмотреть профиль Отправить личное сообщение для Hidest Найти все сообщения от Hidest
  № 4  
Ответить с цитированием
Hidest
 
Аватар для Hidest

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
Вам уже все объяснили, добавлю лишь то, что вы создаете каждый раз шар, переписывая поле класса (то, которое public var shar:Bubble; ). А потом его и удаляете, но там находится ссылка уже совсем на другой шар.

Старый 08.10.2010, 00:28
artur1995g вне форума Посмотреть профиль Отправить личное сообщение для artur1995g Найти все сообщения от artur1995g
  № 5  
Ответить с цитированием
artur1995g

Регистрация: Mar 2010
Адрес: Казань)
Сообщений: 18
Я вас не совсем понял.

Что значит event.target и почему у меня вылезает ошибка, когда я так пишу?

1120: Access of undefined property event.

Старый 08.10.2010, 00:53
andrew911 вне форума Посмотреть профиль Отправить личное сообщение для andrew911 Найти все сообщения от andrew911
  № 6  
Ответить с цитированием
andrew911

Регистрация: Mar 2007
Сообщений: 545
artur1995g
Потому, что надо немного думать при копипасте

event.target это если function remove(event:MouseEvent)
у вас же function remove(e:MouseEvent)

значит для вашего случая не event.target, а e.target

Старый 09.10.2010, 09:42
artur1995g вне форума Посмотреть профиль Отправить личное сообщение для artur1995g Найти все сообщения от artur1995g
  № 7  
Ответить с цитированием
artur1995g

Регистрация: Mar 2010
Адрес: Казань)
Сообщений: 18
Он не работает, я проверял)

Не буду же я вслепую копировать)

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

Теги
мувиклип , удаление
Опции темы
Опции просмотра

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

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


 


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


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