给每个共享同一个类的对象,他们自己的个体变量不会影响其他变量

时间:2014-04-10 00:46:41

标签: arrays actionscript-3 flash flashdevelop

晚上好/早上好。

这是与游戏相关的问题。

我面临一个问题,即我有三个对象,(三个哥布林)数据输入到同一个类。

这三个对象在一个数组中,数据类型为该类,并初始化为数组。

    private var goblin1:Goblin = new Goblin();
    private var goblin2:Goblin = new Goblin();
    private var goblin3:Goblin = new Goblin();

所以上面的变量然后被放入一个数组中。

    private var aGoblinArray = new Array(container.goblin1, container.goblin2, container.goblin3);

将对象放入数组后,我已经遍历了所有的妖精。

    for (var i:int = 0; i < aGoblinArray.length; i++)
    {
        var goblin:Goblin = aGoblinArray[i];
    }

现在我在for循环中有一个hitTest,而hitTest是:

                if (goblin.hitTestPoint(_character.x + 100, _character.y - 45, true))
                {
                    goblinCanMove = false; 
                    trace("lance hits");
                    //hitOnce
                    if (!hitOnce)
                    {
                        hitOnce = true;
                        trace("take on damage");
                    }
                    goblin.moveBack();
                    goblin.minusHealth();
                }

这意味着如果这个玩家击中任何一个地精,他们就会完成这个功能。

在妖精班里怎么样?

    public static var goblinLife; int;

    goblinLife = 2;//put in main constructor 

    public function minusHealth():void 
    {
        goblinLife --;
        checkDeath();
    }

    private function checkDeath():void 
    {
        if (goblinLife == 0)
        {
            parent.removeChild(this);
        }
    }

问题是,如果我击中goblin1,那么goblinLife将= 1.这意味着所有其他地精(goblin2和3)将有1个生命。因为他们共享同一个班级。

如果goblin1死亡,他将被移除并且var goblinLife将= 0; 现在我可以将它重置为2,但这将解决问题的一半。

我的问题是,有没有办法确定每个妖精是否拥有自己的个人生命系统。先感谢您。

1 个答案:

答案 0 :(得分:1)

非常感谢潘和马蒂!

静态意味着可以从任何类和任何函数更改它。

私人意味着它将受到每个恶鬼的保护。

自改变

    public static var goblinLife; int;

    private var goblinLife; int;

这意味着每个单独的妖精都有自己的变量,同一类的其他类或对象都不能改变。

谢谢Pan和Martyn。我想我需要阅读AS3 101: Quick Tip – When to Use Static Properties and Methods和其他编码书籍!