AS3:如何从父对象访问变量?

时间:2015-11-30 18:51:35

标签: actionscript-3 flash

我是AS3的新用户,我的代码可能看起来有些偏差。

基本上,我的程序是如何工作的,我有一个" Level"在舞台上,它是一个包含其他几个对象的MovieClip,这些对象也是具有自己文档类的MovieClip。在" Level" class,我可以从" Player"的实例访问X和Y位置,但是在我的" Arrow" class,也是Level的孩子,我无法访问" Player"的X和Y.我试着做的是在Level类中设置一个名为playerX和playerY的公共静态变量,并将其分配给每个帧的播放器的sx和y位置,并尝试通过执行&#34来访问Arrow类中的变量。 ; var x:Number = Object(parent).playerX,我还试过MovieClip(父).playerX和parent.playerX,只是玩家X,它们都不起作用。

总而言之,我需要从父类访问变量,但我尝试过的每一种方式都只会返回错误。

对不起,如果这有点不清楚,任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您需要了解静态变量是什么以及它不是什么。静态变量是一个Class变量,一个静态变量IS不是一个实例变量。因此,如果我创建一个名为" playerX"的静态变量在一个名为" Level"的课程中我现在可以这样做:

Level.playerX = 0;

因为Level是一个类,而playerX是该类的变量。

我不能这样做:

Object(parent).playerX

因为父母'不是一个类,并且没有名为' playerX'的变量,parent可能是该类的一个实例' Level'但是课程的水平'没有名为' playerX'的变量,该类本身" Level"是那个有变量的人。

答案 1 :(得分:1)

听起来您正在使用FlashPro时间轴,并且有两个兄弟对象(它们具有相同的父MovieClip /时间线),并且您希望能够引用另一个(请告诉我这是否适当)总结你的问题)。

由于您的ArrowPlayer类附带了类文件,因此您需要确保引用parent或{{1}的任何代码}或stage vars运行项目已添加到显示列表后,因为这些变量仅在项目放入舞台后填充。 (这不是时间线代码的问题)。

所以,像这样:

root

现在,如果您想使用静态var(可能不如父关键字那么繁琐),并且只有1个播放器实例,您可以执行以下操作:

public class Arrow extends MovieClip {
    public var player:Player; //a var to hold a local reference to the player

    public function Arrow():void {
        //right now parent/stage/root are null
        //listen for the added to stage event, so you know when it's safe to use the parent and stage and root keywords
        this.addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
    }

    private function addedToStageHandler(e:Event):void {
        player = MovieClip(parent).playerInstanceName;
        //where player instance name is the instance name of your player on the parent timeline
    }

    private function doSomethingWithPlayer():void {
        if(player){
            player.x = 5;
        }
    }
}

现在,您可以通过执行public class Player extends MovieClip { //create a static var to hold a reference to the player instance public static var me:Player; public function Player():void { me = this; //now assign the instance to the static var. } } (无论上下文)从应用中的任何位置访问播放器实例

Player.me