更新:修改标题以更好地反映我的问题
大家好嗨:)
今天我的问题围绕着一个我正试图从一个子类发送到另一个子类的CustomEvent。
我已经使用我的CustomEvent类将子类中的事件传递给我的主类,但我不确定在子类之间应该做什么。
我的自定义事件类
package src.events {
import flash.events.Event;
public class CustomEvent extends Event
{
public static const CHANGE:String="onChange";
public static const COMPLETE:String="onComplete";
public static const IMAGE_LOADED:String="onImageLoaded";
public static const SWF_LOADED:String="onSWFLoaded";
public static const SWF_UNLOAD:String="onSWFUnload";
public static const CLICK:String="onClick";
public static const PAUSE_MOVIE:String="onPause";
public static const INTRO_CLICKED:String="introClicked";
public var params:Object;
public function CustomEvent(type:String, params:Object, bubbles:Boolean = false, cancelable:Boolean = false)
{
super(type, bubbles, cancelable);
this.params=params;
}
public override function clone():Event
{
return new CustomEvent(type, this.params, bubbles, cancelable);
}
public override function toString():String
{
return formatToString("CustomEvent","params","type","bubbles","cancelable");
}
}
子类INTRO - 调度事件
package src.display {
import gs.easing.*;
import gs.TweenLite;
import flash.text.*;
import flash.events.*;
import flash.display.*;
import flash.geom.Matrix;
import flash.geom.ColorTransform;
// ☼ ----------------------------------------- Imported Custom Classes
import src.events.CustomEvent;
// ☼ ----------------------------------------- Intro Class
public class Intro extends Sprite
{
private var playBtn:MovieClip;
// ☼ ----------------------------------------- Constructor
public function Intro():void
{
this.addEventListener(Event.ADDED_TO_STAGE, init);
}
// ☼ ----------------------------------------- Init
public function init(event:Event):void
{
draw();
}
public function draw():void
{
playBtn = new PlayThumb;
playBtn.buttonMode = true;
playBtn.x = 582;
playBtn.y = 259;
playBtn.alpha = 1;
addChild(playBtn);
playBtn.addEventListener(MouseEvent.MOUSE_UP, clicked);
}
private function clicked(e:MouseEvent):void
{
trace("clicked big play");
dispatchEvent (new CustomEvent(CustomEvent.INTRO_CLICKED, {}));
trace("event = "+CustomEvent.INTRO_CLICKED);
}
}
子类导航 - 我正在侦听事件 需要在Navigation类中调用此函数:
function introPlayButtonClick(e:CustomEvent):void
{
trace("introPlayButtonClick called");
TweenLite.to(buttons[0], 1, {y:20, ease:Strong.easeOut});
TweenLite.to(buttons[1], 1, {y:navBtnY, ease:Strong.easeOut});
TweenLite.to(introTab, 1, {y:60, ease:Strong.easeOut});
TweenLite.to(scrollerMov, 1, {y:60, ease:Strong.easeOut});
$btn1 = true;
$btn2 = false;
trace("introPlayButtonClick called --- end");
}
好的,所以我相信我的问题在于导航类,我如何在这里正确添加addEventListener?我没有在我的introPlayButtonClick函数中获得任何痕迹。
如何在我的Main class 中使用PAUSE_MOVIE事件,我是通过变量名称nv将eventListener附加到Navigation类:
nv.addEventListener("onPause", pauseMovie); // Inside of MAIN class
但是因为我在导航类中为INTRO_CLICKED事件添加了事件监听器,我认为我所需要的只是(这个。),但是到目前为止我还没有得到那个事件触发。
任何想法,提示,想法?
答案 0 :(得分:3)
侦听器附加到调度任何给定事件的类的实例,因此要从Navigation类的实例中的Intro对象侦听事件,需要将“addEventListener”添加到该Intro对象,这意味着你需要引用要附加到的Intro类的实例。
对于您的设置不够了解以提供更详细的答案,这里是一个说明性的小例子:
public class Navigation extends WhateverClassYourSubClassing
{
public var intro:Intro;
public function attachListenerForIntro(introToCheckForClick:Intro){
intro = introToCheckForClick;
intro.addEventListener("onIntro", introPlayButtonClick);
}
public function introPlayButtonClick(e:CustomEvent):void
{
trace("introPlayButtonClick called");
TweenLite.to(buttons[0], 1, {y:20, ease:Strong.easeOut});
TweenLite.to(buttons[1], 1, {y:navBtnY, ease:Strong.easeOut});
TweenLite.to(tabNum1, 1, {y:60, ease:Strong.easeOut});
TweenLite.to(scrollerMov, 1, {y:60, ease:Strong.easeOut});
$btn1 = true;
$btn2 = false;
trace("introPlayButtonClick called --- end");
intro.removeEventListener("onIntro", introPlayButtonClick);
}
}
编辑:基于评论的更新示例:
因此,您需要将事件侦听器附加到指向导航对象中的事件处理函数的INTRO OBJECT。因此,如果您在主类中引用了这两个,请执行以下操作:
var navigator:Navigator;
var intro:Intro;
intro.addEventListener("onIntro", navigator.introPlayButtonClick);
因此,在Navigation类中,您需要引用Intro类来附加事件侦听器,这是attachListenerForIntro函数的要点。因此,从您的主类,我假设您有对Intro和Navigation实例的引用。如果在主类中你有类似var nv:Navigation; var intr:简介;
答案 1 :(得分:2)
我使用了 public static var ,所以我可以引用我试图直接调用函数的类,而不是使用事件调度程序。
第一部分: 导航类
public class Navigation extends MovieClip
{
private var // where I put many private vars
private var intro:Intro;
public var // where I put many public vars
public static var instance:Navigation;
// ☼ --------------------------------- Constructor
public function Navigation():void
{
instance = this; //<- so I can reference this Class from another
//other code
简介类按钮操作:
private function clicked(e:MouseEvent):void
{
trace("clicked play -> launch function in Navigation");
Navigation.instance.introPlayButtonClick(); //Class targeted
}
现在我可以在简介类中,在我的导航类中调用此函数:
public function introPlayButtonClick():void
{
TweenLite.to(buttons[0], 1, {y:20, ease:Strong.easeOut});
TweenLite.to(buttons[1], 1, {y:navBtnY, ease:Strong.easeOut});
TweenLite.to(introTab, 1, {y:60, ease:Strong.easeOut});
TweenLite.to(scrollerMov, 1, {y:60, ease:Strong.easeOut});
$btn1 = true;
$btn2 = false;
}
答案 2 :(得分:1)