1

谢谢你看到我的帖子。我正在制作游戏。我在敌人班工作。如果距离足够近,我希望敌人跟随玩家。我这里有个问题。我无法获得 playerx 和 playy。这是我的课: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);
        }
    }
}

敌人.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);
        }
    }

}

播放器.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, Line 18 1119: Access of possible undefined property playerx through an reference with static type Class。D:\Testtestest\enemy.as,第 19 行 1119:通过静态类型 Class 的引用访问可能未定义的属性 playy。

对不起,因为我的英语不好。我是越南人,我是编码新手。我想像专业人士一样使用 Class 进行编码。非常感谢你。<3

4

1 回答 1

2

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

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

public static var me:Player;

然后在播放器类的构造函数(即名为 的方法Player)中,赋值thismevar:

me = this;

现在你有一个对你的播放器实例的静态引用,你可以在你的应用程序的任何地方访问它的公共属性和方法Player.me,例如Player.me.x

这样做的目的是,每当您创建一个新的 Player 实例时,它都会将该实例分配给 Player 类的mevar。假设您在任何给定时间都只有一个 Player 实例。

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

当然,还有很多其他方法可以获取您的 Player 实例,例如MovieClip(root).player(不是该语法的粉丝,但它有效)或使用 ( new Enemy(player)) 将其从公共父级注入到您的敌人中,或者拥有一个管理所有敌人的类和玩家在一起。如果您有时间,我会四处寻找一些游戏编程模式的最佳实践。

于 2018-10-12T15:19:13.837 回答