我正在创建一个矿工游戏(有金子,你必须用钩子抓住它们)。我修改了 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();
}
}