如何从另一个类调用一个类中的函数? [英] How to call a function in a Class from another Class?
问题描述
更新:修改标题以更好地反映我的问题
大家好:) b
$ b
我的问题今天围绕一个CustomEvent我试图从一个子类发送到另一个。
CustomEvent类将一个事件从一个子类传递给我的主类很好,但我不知道在子类之间做什么。
我的自定义事件类
包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可取消);
}
}
子类INTRO - dispries event
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;
//☼--------------------------------------- - 导入的自定义类
import src.events.CustomEvent;
//☼--------------------------------------- - Intro类
public class Intro extends Sprite
{
private var playBtn:MovieClip;
//☼--------------------------------------- - 构造函数
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 - 我要监听事件
需要在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类中如何工作与PAUSE_MOVIE事件,是我通过变量名nv将eventListener附加到Navigation类:
nv.addEventListener(onPause,pauseMovie); // in MAIN class
但是因为我在Navigation类中添加事件监听器INTRO_CLICKED事件我认为我需要的是(this。)添加,但到目前为止我没有触发该事件。
我使用 public static var ,因此我可以引用Class我试图直接调用函数,而不是使用事件分派器。
第一部分:
导航类 >
public class Navigation extends MovieClip
{
private var //其中我放了很多私有变量
private var intro:Intro;
public var //其中我放了很多public vars
public static var instance:Navigation;
//☼---------------------------------构造函数
public function Navigation():void
{
instance = this; // < - 所以我可以从另一个引用这个类
//其他代码
Intro类按钮操作:
点击的私人函数(e:MouseEvent):void
{
trace(clicked play - > launch function in Navigation);
Navigation.instance.introPlayButtonClick(); // Class targeted
}
现在我可以从 Intro 类,请在我的导航类中调用此函数:
public function introPlayButtonClick
{
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
}
Update: Modified title to better reflect my question
Hi everybody :)
My question today revolves around a CustomEvent I'm trying to send from one sub Class to another.
I've used my CustomEvent class to pass an event from a sub Class to my main class fine, but I'm not sure who to do that between sub classes.
My Custom Event Class
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");
}
}
Sub Class INTRO - dispatches event
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);
}
}
Sub Class NAVIGATION - where I'm listening for the event Need to call this function inside of the Navigation class:
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");
}
Ok so I believe my problem lies in the Navigation Class, how do I correctly add the addEventListener here? I'm not getting any of the traces in my introPlayButtonClick function.
How it worked in my Main class with the PAUSE_MOVIE event, was I attached the eventListener to the Navigation class via the variable name nv:
nv.addEventListener("onPause", pauseMovie); // Inside of MAIN class
But since I'm adding the event listener inside of the Navigation class for the INTRO_CLICKED event I thought all I needed was (this.) added, but so far I'm not getting that event to trigger.
Any ideas, tips, thoughts?
I used public static var so I could reference the Class I was trying to call a function in directly, instead of using event dispatchers.
First part: Navigation class
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
Intro class button action:
private function clicked(e:MouseEvent):void
{
trace("clicked play -> launch function in Navigation");
Navigation.instance.introPlayButtonClick(); //Class targeted
}
Now I can from inside the Intro class, call this function in my Navigation class:
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;
}
这篇关于如何从另一个类调用一个类中的函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!