0

我正在创建一个矿工游戏(有金子,你必须用钩子抓住它们)。我修改了 Main 类以获取名为“Gold”的 MovieClip(root) 的所有子类,并将它们放在一个 Array(boulders[]) 中,稍后检查碰撞(我设计并在舞台上为每个等级)。当玩家收集所有金币时(当巨石 array.length <= 0)然后 goToAndStop(nextLevel),它再次从舞台上获取金币 MovieClips,如果它的名称是 ==“Gold”,则将其放入巨石 [ ]。发生了什么:在第一级(第 2 帧,因为第 1 帧是预加载器)一切都很好 - 我在舞台上有 2 个金色电影剪辑(在设计模式下),所有 2 个金色都放入数组中并显示。在第二层,我有 4 个金币,其中只有 2 个被放入阵列中并显示。在第三层,我在舞台上设计了 7 枚金币,但只有 3 枚被展示并放入巨石阵中。从下一帧黄金影片剪辑的计数中减去几乎之前的黄金计数(在前一帧上)。有人知道吗?

我正在放置 Main.as 代码:

public function createLevel(){
                nextLevel = this.currentFrame + 1;
                for (var i:uint = 0; i < MovieClip(root).numChildren; i++){
                if(MovieClip(root).getChildAt(i).name=="Gold")
                {
                    this.addChild(MovieClip(root).getChildAt(i));
                    boulders.push(MovieClip(root).getChildAt(i));
                }
                }
                placePod();
                stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPress);
                stage.addEventListener(KeyboardEvent.KEY_UP, onKeyRelease);
                addEventListener(Event.ENTER_FRAME, updateStatus);
            }

在这里,我将所有名为“Gold”的孩子添加到巨石阵列中,并将它们放在舞台上。然后添加 Pod 和 Rod。

 private function placePod():void {
                pod = new Pod();
                addChild(pod);
                pod.createRod();
            }

这是侦听按键并移除巨石的函数,然后如果 boulder.length <= 0 移除所有侦听器并 goToAndStop(nextLevel) 并再次调用 createLevel() 函数以再次加载下一帧的金色 MovieClips。我上面描述的问题来了。

private function updateStatus(e:Event):void {
                if (!left && !right) {
                    pod.setSpeed(0);
                } else if (left && right) {
                    pod.setSpeed(0);
                } else if (left) {
                    pod.setSpeed(-4);
                } else {
                    pod.setSpeed(4);
                }

                for (var i in boulders) {
                    boulders[i].updateStatus();
                    if (boulders[i].remove) {
                        removeBoulder(boulders[i]);
                        boulders.splice(i, 1);
                    }
                }
            if(boulders.length <= 0) 
            {
                pod.removeRod();
                removeChild(pod);


    stage.removeEventListener(KeyboardEvent.KEY_DOWN,onKeyPress);
    stage.removeEventListener(KeyboardEvent.KEY_UP,onKeyRelease);
                    removeEventListener(Event.ENTER_FRAME, updateStatus);
                    MovieClip(root).gotoAndStop(nextLevel);
                    createLevel();
                }
                }
4

1 回答 1

0

解决有关全局属性的任何问题的最简单方法

当您在 Flash 中创建某些内容时,首先添加一个空的 MovieClip 给它一个实例,例如游戏或测验,而不是双击您的电影剪辑,然后让您的项目返回到主时间线以输入您的所有代码,现在输入所有变量等等可以很容易地成为全球性的

于 2012-03-06T13:42:32.603 回答