[RPG]フィールド歩きてぇ


なんか,最近,ろくに寝る暇もないわぁ・・

さッ,というわけでございまして,ゲーム作りたい年頃…
とりわけ,RPG作りたい.
でも,RPGで作るのムズそうね.
まぁ,とりあえずフィールド移動だけ考えてみようかね

うーん,イキナリわからんけど多分2次元配列をドウにかしてるハズ.
それに移動可能か否かとかの情報とかを入れておいて,
多分移動するときキャラ座標の角を,配列と比較してぶつかったら書き戻す・・・・
とかやってみようかな・・・

えーと,ピクセル座標から配列のインデックスに直すには,ブロック(マス)サイズで割ればいいね.
map_x = pix_x / block_size ;
でも,ブロックサイズが2の乗数ならシフトで代用できますね.
例えば,ブロックサイズが32だったら,
map_x = pix_x >> 6 ;
でOKねん.
(でも,定数なら勝手にコンパイラがやってくれるっすね)

あーあと,もし通れないマスだったら,そのマスに重なってる分だけ戻さないとだめね.
仮に,右方向に移動中だったとして,キャラの右端座標がpix_xだとしたら,
pix_x -= pix_x % block_size
ッて感じかね?
実際,ブロックサイズが32で,pix_x が 38 だったら6ピクセル引き戻すから,これでOKのハズ
・・・せっかく,割り算はシフトになったのに,余りはならないのかにゃー・・?
いや!?
pix_x -= pix_x & 31 ;
でもいいんじゃ?
きっとOKだね.


とりあえず,これを踏まえて今回やった方法は,
1.移動方向(右下,右上,左下,左上移動)別に判定する.
2.判定するキャラの座標(右下,右上,左下,左上角)は移動方向によりけり
3.ブロックに当れば引き戻す
4.移動したときは,画面をスクロール

まぁ,一応作っては見たけど,判定が多い・・・
キャラが1人くらいならいいけど,いっぱい出てきたら遅いかも・・・

とりあえず,サンプル?(101k)・・・




< Back to Diary.