在我正在制作的游戏中,我试图将精灵放在命中框的顶部。我能想到的最好方法是制作两个数组;一个用于命中框,一个用于精灵,然后通过将在其自己的脚本中的 for 循环让精灵停留在各自的命中框之上。
问题是,当我尝试让任一数组中的 MovieClip 执行任何操作时,它都不起作用。如果我对精灵的 X 或 Y 位置进行跟踪,我会在终端中得到“未定义”。我将从上到下解释这一点。
这是我课程的摘录,其中包含 for 循环(Dasengine 是我的主要课程仅供参考)
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 = 覆盖坏人。它是作为 hitbox 顶部的 MovieClip,这是玩家将看到的
badde = 只是命中框。这包含了敌人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"
}