我正在创造一个矿工游戏(那里有金块,你必须用钩子抓住它们)。 我修改了Main类,将所有名为“Gold”的MovieClip(root)子项放在一个Array(boulders [])中,稍后检查碰撞(我设计并在舞台上放置几个“Gold”MovieClip)水平)。当玩家收集所有黄金(当巨石array.length< = 0)然后goToAndStop(nextLevel),再次从舞台获取黄金MovieClips,如果它的名字是==“黄金”然后把它放在巨石[]。 发生了什么: 在第一级(第2帧因为第1帧是预加载器)一切都很好 - 我在舞台上有2个金色MovieClip(在设计模式下),并且所有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”的孩子添加到boulder数组中并将它们放在舞台上。 然后添加Pod和rod。
private function placePod():void {
pod = new Pod();
addChild(pod);
pod.createRod();
}
这是侦听按键并删除巨石的函数,然后如果boulder.length&lt; = 0删除所有侦听器并goToAndStop(nextLevel)并再次调用createLevel()函数再次加载金色MovieClip下一帧。这就是我上面描述的问题。
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();
}
}
答案 0 :(得分:0)
关于全局属性的任何问题的最简单的解决方案
当你在flash中创建一些东西时,首先添加一个空的MovieClip给它一个实例,如游戏或测验,然后双击你的影片剪辑然后让你的项目goback到主时间轴输入你的所有代码,现在你所有的变量什么不容易成为全球性的