如何从另一个类调用一个类中的函数? [英] How to call a function in a Class from another Class?

查看:217
本文介绍了如何从另一个类调用一个类中的函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

更新:修改标题以更好地反映我的问题



大家好:) 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆