在数组中使用影片剪辑时遇到问题[as3]

时间:2013-01-18 00:41:13

标签: arrays actionscript-3 loops actionscript

在我正在制作的游戏中,我正试图将精灵放在一个命中框之上。我能想到的最好的方法是制作两个数组;一个用于命中框,一个用于精灵,然后让精灵通过for循环保持在各自的命中框之上。

问题是,当我试图让任何一个数组中的MovieClip做任何事情时,它都不起作用。如果我对精灵的X或Y位置进行跟踪,我的终端中会出现“未定义”。我将从上到下解释这一点。

以下是我班上的摘录,其中包含for循环(Dasengine是我的主要类fyi)

for(var i:Number = 0; i < Dasengine.ovrcnt.length; i++){
        trace(Dasengine.ovrcnt[i].x); //returns "undefined"
                    trace(Dasengine.ovrcnt[i]); //returns "object Onmea"
Dasengine.ovrcnt[i].x = Dasengine.enemycnt[i].x;//this isn't working

            }

在敌人产生的另一个剧本中,他们会通过这种方法。

if(ENEMY SPAWN CONDITION IS MET ){
 Dasengine.baddie = new nme_spawn.Enemya(); //ENEMY HITBOX
 Dasengine.Obaddie = new nme_overlay.Onmea(); //ENEMY's sprite

 Dasengine.enemycnt[cntup] = [Dasengine.baddie]; //Enemy's Hit box movie clip is put in array meant for holding enemy movie clips

 Dasengine.ovrcnt[cntup] = [Dasengine.Obaddie]; //Enemy sprites that go over the hit boxes are stored here
 cntup++; //this is so movie clips are put in new parts of the array

                }

在我的主类中,影片剪辑声明如下,我也有addChild功能。

public static var Obaddie:nme_overlay.Onmea;
//^variable for sprite
public static var baddie:nme_spawn.Enemya;
//^variable for hitbox

也是Obaddie = Overlay baddie。它的MovieClip充当了hitbox的顶部,这就是玩家将看到的内容

badde =就是hitbox。这包含敌人ai的“肉”。

我和一些朋友谈过这个问题,他们认为我可能需要在数组中的对象类中定义'X'。所以我做了以下

    package nme_overlay {

import flash.display.*;
import flash.events.*;
import nme_spawn.*;



    public class Onmea extends MovieClip{

        // Constants:
        // Public Properties:
        // Private Properties:
        public static var xloc:int = 0;
        // Initialization:

        public function Onmea() { 

        this.addEventListener(Event.ENTER_FRAME, overlaya);

        }

        private function overlaya(e:Event){
        xloc = 55;
        //trace(xloc);
        }


    }

}

然后对于循环类我做了这个

            for(var i:Number = 0; i < Dasengine.enemycnt.length; i++){
        trace(Dasengine.ovrcnt[i]);//returns "object Onmea"
        trace(Dasengine.ovrcnt[i].xloc);//still returns "undefined"


        }

1 个答案:

答案 0 :(得分:1)

你的xloc变量是静态的 - 它属于nme_overlay,Class,而不是任何特定的实例。如果你在你的代码中执行此操作并且你有严格的模式(我怀疑你没有,因为你的代码中有很多东西应该给你至少警告),你会得到一个错误准确地告诉你:

for(var i:Number = 0; i < Dasengine.enemycnt.length; i++){
        trace(Dasengine.ovrcnt[i]);//returns "object Onmea"
        trace(nme_overlay(Dasengine.ovrcnt[i]).xloc);//still returns "undefined"
}