0

私が作っているゲームでは、ヒット ボックスの上にスプライトを配置しようとしています。これを達成するための最良の方法は、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"


        }
4

1 に答える 1

1

xloc 変数は静的です。特定のインスタンスではなく、クラスである nme_overlay に属しています。あなたのコードでこれを行い、厳密なモードをオンにしていた場合 (コードには少なくとも警告を表示する必要があるものがたくさんあるため、そうではないと思われます)、次のようなエラーが発生します。正確にそれを教えてください:

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"
}
于 2013-01-18T01:58:48.867 に答える