我是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,它们都不起作用。
总而言之,我需要从父类访问变量,但我尝试过的每一种方式都只会返回错误。
对不起,如果这有点不清楚,任何帮助将不胜感激!
答案 0 :(得分:1)
您需要了解静态变量是什么以及它不是什么。静态变量是一个Class变量,一个静态变量IS不是一个实例变量。因此,如果我创建一个名为" playerX"的静态变量在一个名为" Level"的课程中我现在可以这样做:
Level.playerX = 0;
因为Level是一个类,而playerX是该类的变量。
我不能这样做:
Object(parent).playerX
因为父母'不是一个类,并且没有名为' playerX'的变量,parent可能是该类的一个实例' Level'但是课程的水平'没有名为' playerX'的变量,该类本身" Level"是那个有变量的人。
答案 1 :(得分:1)
听起来您正在使用FlashPro时间轴,并且有两个兄弟对象(它们具有相同的父MovieClip /时间线),并且您希望能够引用另一个(请告诉我这是否适当)总结你的问题)。
由于您的Arrow
和Player
类附带了类文件,因此您需要确保引用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