嘿所以我看了一些其他的帖子,但我仍然没有到达任何地方。
我有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");
}
}
}
为澄清,这里是scenerio
我有一个ticketPurchaserFSlider类,用于保存我的ticketsSelected var。我在TicketPurchaserFSlider类中有其他方法可以增加和减少ticketsSelected var,它一切正常,然后我使用文档类addChild(ticketPurchaser)等等。
然后我需要票证,这些票证也需要也可以点击,并且还可以增加和减少ticketPurchaserFSlider类中的ticketsSelected var。要显示票证,我首先创建Ticket_mc并导出actionsctript。然后我创建了一个空的MovieClip,并为它提供了一个名为Ticket_Group的类,该类包含一个创建6个故障单实例的Array。然后我创建了另一个空的movieclip并创建了另一个类并将其命名为Ticket_Batch,它还包含一个Array并创建更多票证实例(以6的倍数表示),它创建的票证数量存储在ticketPurchaserFSlider类中,并称为maxTickets。我通过使用ticketPurchaserFSlider的一个实例并使用。来访问此数字。语法(ticketPurchaser.maxTickets)然后我使用Document类中的Ticket_Batch类的实例来添加孩子(门票),所以我从文档类中显示了所有的门票。
现在我不确定这是否是显示门票的最佳方式,但这对我来说是合乎逻辑的,并且门票将被单独选择并且可以被选择为6的倍数(使用单独的按钮)并且在我需要的两种情况下能够访问ticketPurchaserFSlider类中的ticketsSelected var。
它可以从clickTicket函数中激活。
我希望这已经解决了问题。如果您认为我需要更好的方法来设置我的课程,那么请说出来。
我已经在这里发布了这些文件:www.samuelpay.com/BingoClient.zip所以看看你是否也想要。
答案 0 :(得分:0)
仅当目标位于显示列表中时才调用鼠标事件侦听器。您需要在显示列表中添加票证:
ticket = new Ticket_mc();
ticket.addEventListener("selectFromList",addTicket , false,0,true);
addChild(ticket);
答案 1 :(得分:0)
在你的这个功能中加入一个跟踪:
public function clickTicket(event:MouseEvent){
dispatchEvent(new Event("selectFromList"));
gotoAndStop(2);
}
让我们知道它是否会触发,即是否正在处理鼠标点击。然后我们会更多地了解问题所在。
干杯, 蒂莫
答案 2 :(得分:0)
是的,听起来这里有实例问题,你必须在特定实例上监听事件。一种解决方案可能是将Ticket_mc实例的数组传递给TicketPurchaserFSlider,以便为每个实例添加事件侦听器。另一种可能更好的方法是让Ticket_Batch监听点击,然后重新发送到TicketPurchaserFSlider。
答案 3 :(得分:0)
我就是这样做的(代码未测试,可能是拼写错误):
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");
//}
}
}