教我通过class获取变量

Teach me to get the variable through the class

感谢您看到我的 post。我正在制作游戏。我在敌人 class 工作。如果距离足够近,我希望敌人跟随玩家。我这里有问题。我无法获得 playerx 和 playery。这是我的 class: Main.as

package
{
    import flash.display.Stage;
    import flash.display.MovieClip;
    import flash.events.Event;

    public class Main extends MovieClip
    {
        public var player:Player;


        public function Main():void
        {
            player = new Player
            player.x=400;
            player.y=300;
            stage.addChild(player);
        }
    }
}

enemy.as

package  {

    import flash.display.MovieClip;
    import flash.events.Event;


    public class enemy extends MovieClip {

        public var enemyhp:Number=100;

        public function enemy() {
            // constructor code
            addEventListener(Event.ENTER_FRAME, enemyLoop);
        }
        function enemyLoop(e:Event):void
        {
            trace(Player.playerx);
            trace(Player.playery);
        }
    }

}

Player.as

package  {

    import flash.display.MovieClip;
    import flash.events.Event;

    public class Player extends MovieClip {

        public var playerx:Number;
        public var playery:Number;

        public function Player() {
            // constructor code
            addEventListener(Event.ENTER_FRAME, returnxy);
        }
        function returnxy(e:Event):void
        {
            playerx=x;
            playery=y;
        }
    }

}

这是我的错误: D:\Testtestest\enemy.as,第 18 行 1119:通过静态类型 Class 的引用访问可能未定义的 属性 playerx。 D:\Testtestest\enemy.as,第 19 行 1119:通过静态类型 Class.

的引用访问可能未定义的 属性 playery

抱歉,我的英语不好。我是越南人,我是 coding.I 的新人,想像专业人士一样用 Class 编码。非常感谢你。 <3

您正在尝试使用播放器的 playerxplayery 属性,就像它们是静态属性一样(也就是说,属于 class,而不是实例)。您需要获得对播放器实例的引用,或将属性设为静态。
实现此目的的方法很少,这是一种快速但不一定最干净的方法:

在您的播放器 class 中,创建一个静态变量来存储您的播放器的单例实例:

public static var me:Player;

然后在播放器class的构造函数中(即名为Player的方法),将this分配给me var:

me = this;

现在您有一个对播放器实例的静态引用,您可以通过执行 Player.me 在应用程序的任何位置访问它的 public 属性和方法,例如 Player.me.x

它的作用是,只要您创建一个新的 Player 实例,它就会将该实例分配给 Player class 的 me 变量。大概您在任何给定时间只有一个 Player 实例。

现在,应谨慎使用静态方法和变量,因为它们会在应用程序的整个生命周期中持续存在。一些开发人员努力尽可能少地使用静态(或仅用于常量和设置),我通常会同意他们的看法,也就是说,只要您自己清理一下,将一些静态属性放在显示对象上并没有那么糟糕适当地。 (例如,null me 参考,如果您不再需要内存中的播放器)

当然,还有许多其他方法可以获取您的 Player 实例,例如 MovieClip(root).player(不喜欢该语法但它有效)或使用 ( new Enemy(player)) 或者有一个 class 来管理所有的敌人和玩家。如果您有时间,我会四处寻找一些游戏编程模式的最佳实践。