Actionscript 3 AS3:如何从父对象访问变量?
我是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都不起作用 总之,我需要从父类访问一个变量,但每次尝试都会返回一个错误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位置,我尝试通
抱歉,如果这有点不清楚,任何帮助都将不胜感激!您需要了解什么是静态变量,什么不是静态变量。静态变量是类变量,静态变量不是实例变量。因此,如果我在名为“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;