0

XNAでテトリスっぽいゲームを作ろうと思っているのですが、どのような方法が良いか考え中です。

これは私がこれまでに持っているものです: たとえば、テクスチャと色の色合いを持つ Block というクラスがあります。

次に、次のようにすべてを double 配列にすることを計画していました。

Block[,] blocks = new Block[10,20];

これがフル グリッドになります。

そして、ブロックが下に移動するとき、私は次のようにすることを考えていました:

blocks[x,y+1] = blocks[x,y];

blocks[x,y] = null;

最初はこれでいいと思ったのですが、よく考えてみるとよくわかりません。メモリなどでどのように機能しますか?それを行うたびに新しいオブジェクトを作成しますか、それとも何ですか? 配列内でオブジェクトを移動するときに実際にどのように機能するかを誰か説明してもらえますか?

テトリス固有の答えを探しているわけではありません。実際にどのように機能するかに興味があります。

ありがとう。

4

3 に答える 3

2

いいえ、ポインタを動かしているだけです。あなたが言う時:

blocks[x,y+1] = blocks[x,y];

あなたが本質的にやっていることは、ポインターを交換することです。オブジェクトはそのままの場所にとどまりますが、インデックス x,y ではなく x , y+1 のインデックスになります。あなたが言う時

blocks[x,y] = null;

オブジェクト x,y への参照を削除していて、他に何も参照を保持していない場合は、ガベージ コレクターがそれをクリーンアップします。

于 2009-02-02T19:06:46.083 に答える
1

上記の最初の答えはほぼ正しいですが、代入はポインターを交換しているのではなく、複製しています。コードの最初の行の後に、ブロック [x,y] で最初に参照されたオブジェクトへの 2 つの参照があります。null の代入によって元の参照が削除されますが、ブロック [x,y+1] に新しい参照が残っています。それをnullすると、ヒープオブジェクトはGCにとって公正なゲームになります。

于 2009-02-03T00:01:56.083 に答える