私が作っているゲームでは、ヒット ボックスの上にスプライトを配置しようとしています。これを達成するための最良の方法は、2 つの配列を作成することです。1 つはヒット ボックス用、もう 1 つはスプライト用であり、独自のスクリプト内にある for ループを介して、スプライトをそれぞれのヒット ボックスの上にとどめます。
問題は、配列のいずれかで MovieClips を取得して何かを実行しようとすると、機能しないことです。スプライトの 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= オーバーレイ悪役。ヒットボックスの上にあるものとして機能するムービークリップです。これがプレイヤーに表示されます
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"
}