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

Actionscript 3 AS3:如何从父对象访问变量?,actionscript-3,flash,Actionscript 3,Flash,我是AS3新手,我的代码可能看起来有点不对劲 基本上,我的程序是如何工作的,我在舞台上有一个“Level”的实例,它是一个MovieClip,包含几个其他对象,这些对象也是MovieClip,有自己的文档类。在“Level”类中,我可以从“Player”实例访问X和Y位置,但在我的“Arrow”类中,它也是Level的子类,我无法访问“Player”的X和Y位置。我试图做的是在Level类中设置一个名为playerX和playerY的公共静态变量,并在每一帧将其分配给播放器的x和y位置,我尝试通

我是AS3新手,我的代码可能看起来有点不对劲

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

总之,我需要从父类访问一个变量,但每次尝试都会返回一个错误


抱歉,如果这有点不清楚,任何帮助都将不胜感激!

您需要了解什么是静态变量,什么不是静态变量。静态变量是类变量,静态变量不是实例变量。因此,如果我在名为“Level”的类中创建名为“playerX”的静态变量,我现在可以执行以下操作:

Level.playerX = 0;
因为Level是一个类,playerX是该类的变量

我不能这样做:

Object(parent).playerX

由于“parent”不是一个类,也没有一个名为“playerX”的变量,parent可能是类“Level”的实例,但类“Level”的实例没有一个名为“playerX”的变量,因此类本身的“Level”就是具有该变量的类。

听起来像是在使用FlashPro时间线,并且有两个兄弟对象(它们有相同的父MovieClip/timeline)并且您希望能够从另一个引用其中一个(如果这不能正确总结您的问题,请告诉我)

由于听起来像是将类文件附加到
箭头
播放器
类中,因此您需要确保在将项添加到显示列表后,才运行引用
父级
阶段
变量的任何代码,因为这些变量仅在项目已放在舞台上。(这不是时间线代码的问题)

比如说:

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;
        }
    }
}
现在,如果您想改用静态var(可能比parent关键字更简单),并且只有一个player实例,您可以执行以下操作:

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
(不考虑上下文)从应用程序中的任何位置访问player实例


如果您的
Arrow
Player
实例是同级实例,那么您可以从您的Arrow类(添加到后台后)执行以下操作:
var Player:Player=MovieClip(parent).playerInstance;
-其中playerInstance是实例名称(或var名称)你弄明白了吗?是的,我真的让它工作了。它工作了!谢谢你的帮助!
Player.me.x = 5;