進捗動画#16を投稿しました。

進捗動画#16を投稿しました。

進捗動画#16を投稿しました。

今回はマップの読み込み機能を拡張しました。

↓↓動画はこちらから↓↓
https://youtu.be/KT1FOfpGIL0

最初→https://sns.freegame-contest.com/2644/
前回→https://sns.freegame-contest.com/2968/
次回→(作成中)

起動時のマップ読み込み

まずプレイヤーを中心とした5×5エリアが読み込まれます。
エリアはワールド全体を区切ったもので、読み込みの単位です。

並列処理

その後はゲームプレイと同時進行でマップ読み込みを行います。
並列処理とはマルチタスクのことです。

プログラムは通常、上から1行ずつ順番に処理しますが、
並列処理を活用することで複数の処理を同時に進められます。

本作は2Dシューティングのためリアルタイム性が大事だと考えています。
なのでマップの読み込み処理を挟んでしまうことで、
画面が止まってしないよう工夫が必要なのです。

エリアデータ管理

ワールド全てのエリアをロードするとメモリが大変なことになるので、
ゲーム内で直近で必要になるエリアのみをロードしてます。

エリアデータは一列で順番に並べて管理しています。
マップを描画するためにアクセスされたデータは列の先頭に移動します。
なのでアクセスされてないエリアは次第に列の後ろへ来ます。

エリアデータ数が一定数を超えると、後ろのデータを順次消去します。

次回読み込みエリア

プレイヤーの向きに応じて、あらかじめ読み込み順番が決まっています。
何か賢い処理方法はないかと考えましたが、最終的に力技に落ち着きました。

エリア読み込みタイミング

ゲーム中では、プレイヤーを中心とした5×5エリアが
読み込まれているようにしています。

なのでプレイヤーがエリアを移動したら
新たに5×5に含まれるエリアが読み込まれます。

読み込みが完了したらマップ読み込みを停止して、処理負担を軽減します。

排他処理

エリアデータは一列で並んでおり、削除やアクセス、生成で順番が変わります。
これらの処理はゲームプレイとマップ読み込みの両方で発生します。

なのでタイミングが悪いと、削除後のデータにアクセスしようとしたり、
並び順が変わって別のデータにアクセスしてしまったりしてエラーになります。

そこで排他処理を導入しました。
データへのアクセスが発生した時、アクセス終了まで鍵をかけ、
別のところからのアクセスをブロックします。

同時に操作できないようにして、エラーが起きないようにします。

動作確認

最後にちょっと動作確認。
今はマップに陸と海しかないので、最も近い海へ向かってドライブしました。

3分間、エリアを読み込みながら滞りなく車を進められ
無事に海に到着しました。

次回

実はこの動画(コラム)を作っている頃、
既に今回作ったシステムは、ほぼほぼ作り直しとなりました。

地形タイルの境界線の処理を追加したら、
画面がガクガクになってしまったのが原因です。

なので次回内容は未定。
これを書いている今の私にも分かりませぬ……。

報告する

コメント

  • コメント ( 0 )

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

コメントするためには、 ログイン してください。