AS3 DispatchedEvent не прослушивается слушателем - PullRequest
0 голосов
/ 14 марта 2011

Эй, я посмотрел другие посты, но я все еще никуда не попал.

У меня есть 2 класса, один из которых Ticket_mc (), а другой - TicketPurchaserFSlider (). в TicketPurchaserFSlider () хранится число с именем ticketsSelected, которое содержит количество выбранных мной билетов. Теперь я хочу увеличить это число на единицу из класса Ticket_mc (). и как я настроил это, чтобы создать dispatchEvent (новое событие ("selectFromList")), а затем слушатель и функцию, подключенную к этому слушателю. Во всяком случае, это не работает. Вот мой код:

    package com.spay.ticketpurchaser {

    import com.spay.ticketpurchaser.TicketPurchaserFSlider;
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.events.EventDispatcher;


    public class Ticket_mc extends MovieClip{
        public function Ticket_mc(){
            addEventListener(MouseEvent.CLICK, clickTicket);
        }

        public function clickTicket(event:MouseEvent){
            dispatchEvent(new Event("selectFromList"));
            gotoAndStop(2);
        }
    }
}

.

    package com.spay.ticketpurchaser{

    import com.spay.ticketpurchaser.Ticket_mc;
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.text.TextField;    

    public class TicketPurchaserFSlider extends MovieClip{

        public var ticketsSelected:Number = 0;
        private var ticket:Ticket_mc;

        public function TicketPurchaserFSlider(){           
            ticket = new Ticket_mc();
            ticket.addEventListener("selectFromList",addTicket , false,0,true);
            }

        private function addTicket(event:Event){
            ticket.removeEventListener("selectFromList", addTicket);
            ticketsSelected ++;
            trace("it works");
        }
   }
}

Для пояснения вот сценарий

У меня есть класс ticketPurchaserFSlider, в котором хранятся мои выбранные заявки. У меня есть другие методы внутри класса TicketPurchaserFSlider, который увеличивает и уменьшает переменную ticketsSelected, и все это прекрасно работает, затем я использую класс документа для addChild (ticketPurchaser) и т. Д.

Затем мне понадобились билеты, и эти билеты также должны были быть активными, а также увеличивать и уменьшать переменную ticketsSelected в классе ticketPurchaserFSlider. Для отображения билетов я сначала создаю Ticket_mc и экспортирую для actionsctript. Затем я создал пустой MovieClip и дал ему класс Ticket_Group, этот класс содержит массив, который создал 6 экземпляров билетов. Затем я создал еще один пустой мувиклип, создал еще один класс и назвал его Ticket_Batch. Он также содержит массив и создает больше экземпляров билетов (кратных 6). Количество создаваемых билетов хранится в классе ticketPurchaserFSlider и называется maxTickets. Я получаю доступ к этому номеру, используя экземпляр ticketPurchaserFSlider и используя. синтаксис (ticketPurchaser.maxTickets) Затем я использую экземпляр класса Ticket_Batch в классе Document для добавления addChild (tickets), поэтому у меня отображаются все мои заявки из класса документа.

теперь я не уверен, что это был лучший способ отобразить билеты, но для меня это было логично, и билеты будут выбираться и выбираться однократно, кратно 6 (с помощью отдельной кнопки), и в обоих случаях мне нужно чтобы иметь возможность получить доступ к выбранным билетам в классе ticketPurchaserFSlider.

Хорошо срабатывает из функции clickTicket.

Я надеюсь, что это прояснилось. Если вы думаете, что мне нужен лучший способ организовать мои занятия, тогда скажите об этом.

Я разместил файлы здесь: www.samuelpay.com/BingoClient.zip, так что посмотрите, если хотите, тоже.

Ответы [ 4 ]

0 голосов
/ 16 марта 2011

Вот как я бы это сделал (код не проверен, могут быть опечатки):

package com.spay.ticketpurchaser
{

    import com.spay.ticketpurchaser.Ticket_mc;
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.text.TextField;    

    public class TicketPurchaserFSlider extends MovieClip
    {

        //public var ticketsSelected:Number = 0;
        //private var ticket:Ticket_mc;
        private var _tickets:Array;

        public function TicketPurchaserFSlider(tickets:Array)
        {     
            _tickets = tickets;  
            setUpTicketListeners();  
            //ticket = new Ticket_mc();
            //ticket.addEventListener("selectFromList",addTicket , false,0,true);
            }

        private function setUpTicketListeners():void
        {
           for(var i:int = 0; i<_tickets.length; i++)
           {
               _tickets[i].addEventListener(MouseEvent.CLICK, onTicketClick);
           }
        }       

        private function onTicketClick(event:MouseEvent):void
        {
           var currentTicket:Ticket_mc = Ticket_mc(event.currentTarget);
           //do your stuff
        }

        //private function addTicket(event:Event)
        //{
           // ticket.removeEventListener("selectFromList", addTicket);
           // ticketsSelected ++;
           // trace("it works");
        //}
   }
}
0 голосов
/ 14 марта 2011

Поместите трассировку в эту вашу функцию:

public function clickTicket(event:MouseEvent){
    dispatchEvent(new Event("selectFromList"));
    gotoAndStop(2);
}

Дайте нам знать, если она срабатывает, т.е. обрабатывается ли щелчок мыши.Тогда мы узнаем больше о том, в чем проблема.

Ура, Тимо

0 голосов
/ 15 марта 2011

Да, похоже, у вас есть проблема с экземплярами здесь, вы должны прослушивать событие в конкретном экземпляре.Одним из решений может быть передача массива экземпляров Ticket_mc в TicketPurchaserFSlider, чтобы вы могли добавить прослушиватели событий для каждого экземпляра.Другой, возможно, лучший способ - позволить Ticket_Batch прослушивать щелчки, а затем повторно отправлять их в TicketPurchaserFSlider.

0 голосов
/ 14 марта 2011

Прослушиватели событий мыши вызываются, только если их цель находится в списке отображения. Вам необходимо добавить билет в список отображения:

ticket = new Ticket_mc();
ticket.addEventListener("selectFromList",addTicket , false,0,true);
addChild(ticket);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...