0

actionscript 2 で最小限のラグで無限/巨大なプロシージャル生成ワールドをどのように実現していますか? たとえば、Terraria や Minecraft などのゲームで。このような巨大な世界を処理するにはどうすればよいでしょうか?

明らかに、すべてのブロックをループしてそのように移動してもうまくいきません。ブロックを 50x50 の「チャンク」に配置してから、各チャンクを移動しようとしましたが、結果は本来あるべきほど滑らかではありません。

プレイヤーが近くにいない場合、マップのセクションを完全に無効にする方法はありますか? それらを単にメモリに保存し、必要なときにロードすることは可能でしょうか?

どんな助けでも大歓迎です、ありがとう!

4

1 に答える 1

0

ゲームが主にタイル ベースである場合、つまり、世界に基本単位と同じサイズのブロックがある場合、世界を配列に格納するのが最も実用的です。ブロックを手動で配置する代わりに、次のような配列に特定のブロック タイプに対応するキーを格納できます。

"grass" "grass" "grass" "water" "water"
"grass" "water" "water" "water" "water"
"grass" "grass" "woods" "woods" "woods"
"grass" "grass" "woods" "woods" "woods"
"grass" "grass" "woods" "woods" "woods"
"grass" "grass" "grass" "woods" "woods"

上記の例で、プレーヤーは一度に 9 つのブロックしか見ることができないと想像してください。

"grass" "woods" "woods"
"grass" "woods" "woods"
"grass" "woods" "woods"

これは、ワールド配列の位置 2,2 のプレイヤーです。

プレーヤーが移動するたびに、配列に対するその位置がそれぞれインクリメントまたはデクリメントされます。したがって、上に移動すると、位置の値が 2,1 に減少し、さらに北にあるブロックが読み込まれます。

配列から、すぐ上のブロックが であることを取得し、"water" "water" "water"3 つのムービークリップをロードしますwater。念のため、この回答はムービークリップを動的にロードする方法を示しています。

また、プレーヤーに対してワールド全体を移動するのではなく、ワールドに対してプレーヤーを移動する簡単な方法は、値_root._xとを変更することです_root._y

最後に、ゲームがグラフィックスを多用しすぎる場合、プレーヤーの位置が固定されておらず、50 ブロックごとに新しいブロックの画面に移動する「ルームベース」のシステムで世界を横断することを検討しましたか? それは簡単に負担を軽減します。

AS3 の性質は、多くのオブジェクトを動的にロードするのにより適しているかもしれませんが、AS2 は、すぐに起動して実行したい単純なゲームを操作するのに最適です。

于 2013-10-04T16:16:15.570 に答える