![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2010
Адрес: Казань)
Сообщений: 18
|
Здравствуйте)
У меня такая проблема: у меня есть класс Main Main : 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"; } } } } 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; } } } Вообщем. У меня каждую секунду генерируются шары и летят с разной скоростью. При клике на них они должны удаляться. Но есть глюк. При нажатии на некоторые шары, удаляются совсем другие шары, но не тот, на который я жму. В чем дело?! |
|
|||||
|
.
|
Угу. По правилам хорошего тона
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, можно даже с обратной связью. А сейчас получается, что дите бегает само по себе. Но, если так и задумано, то нет вопросов. Последний раз редактировалось dimarik; 07.10.2010 в 01:41. |
|
|||||
|
Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
|
Вам уже все объяснили, добавлю лишь то, что вы создаете каждый раз шар, переписывая поле класса (то, которое public var shar:Bubble; ). А потом его и удаляете, но там находится ссылка уже совсем на другой шар.
|
|
|||||
|
Регистрация: Mar 2010
Адрес: Казань)
Сообщений: 18
|
Я вас не совсем понял.
Что значит event.target и почему у меня вылезает ошибка, когда я так пишу? 1120: Access of undefined property event. |
|
|||||
|
Регистрация: Mar 2007
Сообщений: 545
|
artur1995g
Потому, что надо немного думать при копипасте event.target это если function remove(event:MouseEvent) у вас же function remove(e:MouseEvent) значит для вашего случая не event.target, а e.target |
|
|||||
|
Регистрация: Mar 2010
Адрес: Казань)
Сообщений: 18
|
Он не работает, я проверял)
Не буду же я вслепую копировать) |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:41. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| мувиклип , удаление |
|
|