0

配列の操作。クラスベースでオブジェクトを作成し、それらを配列にプッシュします。2 つのボタンがあります。1 つは子を追加して配列にプッシュし、2 つ目は配列をシフトして子を削除します。また、マウスの関数で、オブジェクトをクリックすると、その配列番号を定義し、子を削除して...まあ、成功したかどうかはわかりませんが、「Array[i]; を削除します; 」 i はターゲットの配列番号です。何かをするたびに、テキスト フィールドに Array.length が表示されます。2 番目のボタンは、実際には配列からオブジェクトを削除し、数が減少します。ただし、 Array.slice(i,1)と同様に、Array から指定されたオブジェクトを削除しても、Array の長さは減りません。そのため、オーバーフローが発生する可能性があります。それは配列だけです。よくわかりません。配列に100万を超えるセルがあっても問題ないでしょうか?流星群を使ってゲームを作成した場合と同様に、流星は画面から削除されますが、アレイにはまだセルが残っています。そして、それらが 1 秒あたり 30 ~ 50 のように表示される場合、20 分の実行でメモリの問題が発生する可能性があることは明らかです。まあ60kだから、グラフィックスだけが多くのメモリを消費するので、心配する必要はないでしょうか?

それでも、配列の途中でオブジェクトをシフトする方法についてのアドバイスを使用できます。選ばれし者。Shift と同じように、作成されていないかのように削除するにはどうすればよいですか? (そうですよね?)

4

2 に答える 2

1

Array.splice()ほとんどのトリックを実行します。画面から流星を削除するときに、配列から流星をつなぎ合わせることができます。次のようにします。

var i:int=meteorArray.indexOf(meteorToRemove);
if (i>=0) meteorArray.splice(i,1);
于 2013-02-20T06:06:48.247 に答える
1

他のオブジェクトを削除する場合は、新しいオブジェクトを作成しないことをお勧めします。リサイクルを試してみるか、「オブジェクト プール」と言ったほうがよいでしょう。

一度に使用できる要素の最大数を把握する必要があります。それぞれにプロパティ「アクティブ」を作成し、作成/削除する代わりにtrueまたはfalseに設定します。次に、各オブジェクトで更新を実行し、必要な場合にのみ更新できます

例えば:

var meteors:Array = [];

// create 500 meteors
for ( var i:int = 0; i < 500; i++ ) {
  var meteor:Meteor = new Meteor();
  meteor.active = false;
  meteors.push(meteor);
}

// enable one meteor
meteors[0].active = true;

// in your update method:
for each (var meteor in meteors ) 
  if ( meteor.active )
    meteor.update();

それが役立つことを願っています。

また、利用可能な流星を取得するためのヘルパー メソッドを追加することもできます。

function getMeteorAvailable():Meteor
{
  for each (var meteor in meteors ) 
      if ( !meteor.active )
        return meteor;
}
于 2013-02-20T06:11:39.900 に答える