りよねこたわ~

ロールプレイングゲーム作ってみたいにゃ~でもどうしたらいいのにゃ~?

このゲームの3Dダンジョンはこんな感じでできてるにゃ~【その6にゃ~】

ω・`) 19枚目のマップのイベントを作成中にゃ~。

ω-`) うにゃ~?あんまり進んでにゃいにゃ~。

ω-`) 悪い癖がでちゃってにゃ~、ちょこちょこ機能追加しちゃったんにゃ~。

 

ω・`) キャラクターの向きから見える範囲の添え字を取得するところまでできたかにゃ~。

じゃ~取得した添え字から、タイルマップ情報を取得するところから始めるにゃ~。

 

配列a[ ]~e[ ]には添字の情報が入っているから、

//////////

for (i = 0; i <= 4; i++) {

    $dataMap.data[a[i]];

//////////

ってスクリプトで、タイルマップ情報を取得できるにゃ~。

$dataMap.data[ ]は、dataフォルダにあるMap???.jsonファイルの配列dataの値が取得できるにゃ~。

 

タイルセット情報(タイルセット番号かにゃ~?)が取得できたら、次はタイルセット番号の定義かにゃ~。

つまりそのタイルセット番号がどういう壁を持っているかを定義するんにゃ~。

f:id:riyoneko:20180425174555p:plain

例えば、この図の赤丸の位置のタイルセット番号を1とするにゃ~。

このタイルセットは、上側に壁、下側に壁があるにゃ~。

このタイルセットの壁を次のように定義するにゃ~。

//////////

switch (wall)

    case 1:

        if ($gamePlayer.direction() === 6) {

            tmp_wall_acenter[i] = 'wall_acenter_clear' + (i);

            tmp_wall_aleft[i] = 'wall_aleft' + (i);

            tmp_wall_aright[i] = 'wall_aright' + (i);

        } else if ($gamePlayer.direction() === 4) {

            tmp_wall_acenter[i] = 'wall_acenter_clear' + (i);

            tmp_wall_aleft[i] = 'wall_aleft' + (i);

            tmp_wall_aright[i] = 'wall_aright' + (i);

         } else if ($gamePlayer.direction() === 2) {

            tmp_wall_acenter[i] = 'wall_acenter' + (i);

            tmp_wall_aleft[i] = 'wall_aleft_pass' + (i);

            tmp_wall_aright[i] = 'wall_aright_pass' + (i);

          } else if ($gamePlayer.direction() === 8) {

            tmp_wall_acenter[i] = 'wall_acenter' + (i);

            tmp_wall_aleft[i] = 'wall_aleft_pass' + (i);

            tmp_wall_aright[i] = 'wall_aright_pass' + (i);

         };

        break;

//////////

このように、上下左右を向いているときの見えている壁を定義するんにゃ~。

tmp_wall_???は、ローカル変数にゃ~。

そのローカル変数に文字列を代入しているんにゃ~

この文字列はそのうちでてくるんにゃけど、画像ファイルを指しているにゃ~。

例えば、右を向いている($gamePlayer.direction() === 6)時、目の前には壁はないからここでは'wall_acenter_clear'って定義しているにゃ~。

右を向いている時、左手側(上側)に壁があるから、'wall_aleft'って定義してるにゃ~。

同様に、上を向いている($gamePlayer.direction() === 8)時、目の前に壁があるから'wall_acenter'、左右の方向に通路が伸びているから'wall_aleft_pass'、'wall_aright_pass'ってそれぞれ定義してるにゃ~。

 

タイルセット毎に壁を定義したら、それをもとに壁を描画していくにゃ~。

 

っ´ーωー`)っ 眠くなってきたから、続きは次回にゃ~。

 

このゲームの3Dダンジョンはこんな感じでできてるにゃ~【その5にゃ~】

ω・`) 19枚目のイベントを作成中にゃ~。

 

ω・`) 前回は、キャラクターの座標を取得して、それをもとに配列からタイルセット情報を取得するところまでだったかにゃ~。

今回は、キャラクターの向きから見える範囲の配列の添え字を取得するにゃ~。

 

まずはキャラクターの向きなんにゃけど、RPGツクールMVでは次のスクリプトから取得できるにゃ~。

//////////

$gamePlayer._direction

//////////

これで右を向いていれば「6」、左を向いていれば「4」、下を向いていれば「2」、上を向いていれば「8」という向きの情報が取得できるにゃ~。

 

次は、向いている方角の見える範囲の添え字を取得していくにゃ~。

また例の画像を使うにゃ~。

f:id:riyoneko:20180425174555p:plain

この画像の赤い範囲が見える範囲なんにゃけど、めんどくさいから次のような範囲の添え字を取得するようなスクリプトを考えてみるにゃ~。

f:id:riyoneko:20180509181043p:plain

 

//////////

if ($gamePlayer._direction === 6) {

    for (var j = 0; j <= 4; j++) {

        a[ j ] = i + j;

        b[ j ] = i - (10 - j);

        c[ j ] = i + (10 + j);

        d[ j ] = i - (20 - j);

        e[ j ] = i + (20 + j);

    };

} else if ($gamePlayer._direction === 4) {

//////////

if文で向きを判定してるにゃ~。

if ($gamePlayer._direction === 6) は右を向いているときにゃ~。

そのときに、for文を実行するってわけにゃ~。

a[ ]はキャラクターのいるブロックの見える範囲にゃ~。

これは簡単にゃ~。

添字は、マップの左上から右下にかけて右に順番にならんでいるから、右を向いているときはのa[ ]は、i(添え字)に1ずつ足していけばいいにゃ~。

b[ ]は、キャラクターの上のブロックの添字を取得するようになってるにゃ~。

jが0のときは、添え字は10個前の位置にゃ~。

jが1のときは、添え字は9個前の位置にゃ~。

という感じで、キャラクターの向きから見える範囲の添え字を取得することができるにゃ~。

 

添え字が取得できたら、次はタイルマップ情報を取得するにゃ~。

 

っ´ーωー`)っ 眠くなってきたから、続きは次回にゃ~。

 

このゲームの3Dダンジョンはこんな感じでできてるにゃ~【その4にゃ~】

ω・`) 引き続き18枚目のマップのイベントを作成中にゃ~。

ω-`) ちょっといろいろあったからにゃ~ほとんど進んでにゃいにゃ~。

っ´ーωー`)っ れ、連休で浮かれてたわけじゃにゃいにゃ~w

 

ω・`) 前回は、目的のタイルセット情報(以下、情報にゃ~)が、Map???.jsonってファイルの配列dataに入ってるってところまでだったかにゃ~。

どういうふうに情報を取るかっていうとにゃ~。

まずは、情報がどう並んでいるか確認するにゃ~。

目的の情報は、dataって配列の300番目から399番目に入ってるにゃ~。

この情報は、左上のマップ座標(0,0)から右下のマップ座標(9,9)まで、順番に入ってるにゃ~。

例えば、座標(0,0)には300番目の情報、右隣の座標(1,0)には301番目の情報ってことにゃ~。

 

次は、キャラクターのいる座標が何番目の情報かを取得するにゃ~。

前回使った画像をそのまま使用するにゃ~。

f:id:riyoneko:20180425174555p:plain

この画像の例にゃと、キャラクターの位置は赤丸だから、座標(5,8)かにゃ~。

これをJavaScriptで書くんにゃけど、このゲームではswitchとcaseを使うことにしたにゃ~。

//////////

switch ($gamePlayer.x) {

    case 0:

        switch ($gamePlayer.y) {

            case 0:

                i = 300;

                break;

            case 1:

                i = 310;

                break;

//////////

$gamePlayer.xと$gamePlayer.yは、キャラクターがいるx座標とy座標の情報が入ってるにゃ~。

つまり、$gamePlayer.xには「5」、$gamePlayer.yには「8」かにゃ~。

ちょっと(かなり)省略したんにゃけど、上のswich文からi(添え字)は385になるにゃ~。

これでキャラクターの位置(座標(5,8))の情報が、配列dataの385番目に入っていることが取得できるにゃ~。

 

次は、キャラクターの向きから見える範囲のi(添え字)を取得するにゃ~。

 

っ´ーωー`)っ 眠くなってきたから、続きは次回にゃ~。

 

このゲームの3Dダンジョンはこんな感じでできてるにゃ~【その3にゃ~】

ω・`) 18枚目のマップのイベントを作成中にゃ~。

ω・`) うにゃ~?あまり進んでにゃいにゃ~?前回気合入れたんじゃにゃいのかにゃ~?

ω-`) そ、そんなことにゃいにゃ~、ちょっと進んでるにゃ~。

 

ω・`) 前回は2Dマップを作成したんだったかにゃ~。

 この上に3Dダンジョンの壁を貼り付けていくんにゃけど、どこに壁があるかわかんにゃいと貼り付けられないにゃ~。

にゃので、まずは自分の位置から見える範囲のタイルセット情報を取得するにゃ~。

f:id:riyoneko:20180425174555p:plain

例えば赤丸を自分の位置として右を向いている場合、見える範囲は赤線で囲まれた部分にゃ~。

 ω・`)b 見える範囲っていうのは、前々回の白黒の3D画像で見えてる範囲のことにゃ~。

 前方に4ブロック、左右の1番遠いところで5ブロックが見える範囲かにゃ~。

 

さてとにゃ~、タイルセット情報をどこから取得するかっていうとにゃ~。

プロジェクトのフォルダにdataってフォルダがあるんにゃけど、その中にMap???.jsonってファイルがあるんにゃ~。

 ω・`)b マップごとに作成されるファイルで、いろいろな情報が入ってるにゃ~。

 このファイルの3行目にdataって配列があるんにゃけど、ここにタイルセットの情報が入っている(と思う)にゃ~。

全部の値を調べたわけじゃにゃいからわかんにゃい数値もあるんにゃけど、今回のゲームで使用するタイルセットタブB~タブEの情報は、この配列の300番目から399番目に入ってる(と思う)にゃ~。

配列のどこに何の値が入るかは、マップの大きさによって変わってくる(と思う)にゃ~。

 

ω・`) うにゃ~?なんでこんなこと知ってるのかってにゃ~?

ω-`) それはいろいろな苦労があったのにゃ~w

 

っ´ーωー`)っ 眠くなってきたから、続きは次回にゃ~。

 

このゲームの3Dダンジョンはこんな感じでできてるにゃ~【その2にゃ~】

ω・`) 18枚目のマップを作成中にゃ~。

残りマップは3枚にゃ~気合いれるにゃッ!(`・ω・´)シャキーン

 

ω・`) 前回は、3Dダンジョンのイメージを描いて、それをRPGツクールMVで実現するにはどうすればいいかにゃ~ってところまでだったかにゃ~。

 

まずはマップエディタを使って、2Dマップを作るところから始めるのにゃ~。

このゲームでは、新たにタイルセットを作成して、タブBからEにタイルセット画像を追加してるにゃ~。

f:id:riyoneko:20180418180232p:plain

えっとにゃ~・・・BからEに追加できるタイルセット画像は、1マスが48ピクセルx48ピクセルで、それが16マスx16マスあるんにゃ・・・。

っ´ーωー`)っ だから大きさは・・・むにゃ~。

と、とにかくにゃ~、こんな画像を準備して、1マス1マスタイルセットを作っていくにゃ~。

ω・`)b 例えば、左上から2マス目は上に壁、3マス目は下に壁があるにゃ~って意味にゃ~。

ω・`) なんでかにゃ~?タブBのタイルセット画像の左上のマスは使えないのにゃ~?

 

あとはタイルセットにどんどん追加して、自分が作りたいマップを作るにゃ~。

f:id:riyoneko:20180418180627p:plain

こんな感じの2Dマップが出来上がるにゃ~。

ここから3Dマップのイメージを上に貼り付けていくのにゃ~。

 

っ´ーωー`)っ 眠くなってきたから、続きは次回にゃ~。