0

パックマンのようなゲームを作ろうとしています。私は次のような配列を持っています:

配列:

1111111111111
1000000000001
1111110111111
1000000000001
1111111111111

1 =壁、0=空のスペース

この配列を使用して、16x16のサイズのタイルを描画します。ゲームのキャラクターは32x32です。

最初は、配列インデックス、[1,1]などで文字の位置を表しました。

array [character.new_y] [charater.new_x] == 0の場合、彼の位置を更新します

次に、これらの配列座標をピクセル[y * 16、x * 16]に変換して、彼を描画しました。

彼はうまく並んでいて、壁には入らなかったが、私が彼をそれぞれ16ピクセルずつ更新していたので、彼は非常に速く動いていることに気づいた。

逆に、ゲームキャラクターの位置をピクセル単位で保存して、1回の移動で16ピクセル未満しか使用できないようにすることにしました。

私はこのような単純なifステートメントだと思いました:

if array[(character.new_pixel_y)/16][(character.new_pixel_x)/16] == 0

彼が壁に入るのを防ぐだろうが、残念ながら彼は底と右側の壁を少し食べます。

ピクセル位置を配列インデックスに適切に変換する方法はありますか?これは単純なことだと思いますが、私は本当にそれを理解することはできません:(

4

1 に答える 1

0

2D配列を転置したように見えます。それはわざとでしたか?(それはarray[x][y]またはarray[y][x]ですか?)

また、タイルサイズが2倍のゲームキャラクターは、指定されたマップ配列の例に適合しません。

編集:

キャラクターが下と右をちょうど半分のタイルで食べ、上と右が重ならない場合は、キャラクターを半分のタイルでオフセットする必要があります。(xとyの両方に対して+/- 8ピクセル)

したがって、「これらの配列座標をピクセルに変換して、[y * 16、x*16]彼を描画します」。これを[(y * 16)-8、(x * 16)-8]に変更して、彼が32x32のときに描画する必要があります。

16xの規則に従うために、彼の位置を[y * 16、x*16]として保存し続けます。

すべてを16x16で最初に保持すると、これは簡単になります。

また、tile_size_xとtile_size_yを定数として保存する必要があります。

于 2011-01-15T15:40:19.467 に答える