コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
Ryou Tanpo ◆AI5iRr9FjmkJ
2018/3/8 18:46
質問
Petitcraft
以前、海外ユーザーのレイキャストライブラリをつかって、高さなしのマイクラもどきを作ろうとしたのですが、もっと綺麗なプログラムを作りたかったりそもそも仕様がきつすぎるので、全て自分のプログラムで1から作り直すことにしました。

[本題]
高速、かつ効率的にワールドを表示することを考えて、こんな仕組みを思いついたんです。ただしブロックは全て立方体とします。

ワールド中のブロックのデータ(位置・種類)に、さらに面のデータ(位置・種類・面の場所) を格納して、ワールド表示をする際は面データを使って処理します。
ブロックを置くときに、隣のブロックがないときは面を新しく作成し、ブロックが隣り合ったときは中間の面を削除するようにすれば、もっと広い世界で、なおかつ高速なマイクラもどきが実現できると考えた訳です。もちろんブロックを掘るときも同様です。

問題は、ブロックと面データをどのように管理するかです。ワールドの広さに応じて配列を作るのは絶対に Out of memory になって実用的ではないので、最初は要素数 0 の配列を作成して、面データなどを追加する場合はそこに PUSH する感じだと思います。
DIM SIDEX[0], SIDEY[0], SIDEZ[0], SIDEDATA[0]
ただ、これを座標で検索できるようにしたいのです。指定した座標の、指定した向きの面を削除したいときは、それができないと困ります。配列の検索はイマイチよくわからないし、ブロックの面が多くなったときは検索にも時間がかかってパフォーマンス的に実現できなくなってしまうかもしれません。

何かいい管理方法はないですか…?

コメント

アバター
キルル2 2018/3/8 23:02 ◆rGE712Ruejv7
座標の限界値を決めましょう
3次元配列XYZ[max_x,max_y,max_z]を宣言し、これに(今までのやつと連動する形で)データを格納するのです
多分これが一番楽だと思います
アバター
Ryou Tanpo 2018/3/9 19:07 ◆AI5iRr9FjmkJ
それだと、あまりワールドサイズが確保できないんですよ…
できれば動的に確保したいのですが、座標で要素を探すのが、キルル2さんの方法より難しくなるので…
どうしよう
アバター
キルル2 2018/3/9 21:24 ◆rGE712Ruejv7
動的確保ができて、かつ高速なアルゴリズムのひとつに、四分木っていうのがあるみたいです
広大な2次元マップを4つに分けて、それぞれの領域にn個以下の情報を保存し、情報の数がnより大きくなったら、また4つに分けて…を繰り返して情報管理するっぽいですね
具体的な方法はちょっとよく分からなかったんですが、調べてみると良いのではないでしょうか
アバター
Ryou Tanpo 2018/3/10 7:35 ◆AI5iRr9FjmkJ
なるほど…ありがとうございます! 参考にしてみますね。
アバター
みどり 2018/3/13 19:16 ◆UuFOYlGswjhS
ワールドを4つなどに分けてみたらいかがですか?
アバター
ツッピー 2018/3/23 16:29 ◆OLBQDZ1qclMQ
題名がPetitcraftじゃあ、もうすでにあるPetitcraftっていう2Dゲームとごっちゃになるような...
アバター
Ryou Tanpo 2018/3/23 20:31 ◆AI5iRr9FjmkJ
もうあったの?
すみません!!
今度作り直すんでこの機にタイトル変えます
アバター
アルファ/α 2018/3/24 8:23 ◆jfR1EVz0DbfO
ツッピーs»2D?petit worldでは?
まあでもこまざわ りゅうきさんの
PetitCraftもありますし、別にいいのでは?
アバター
Ryou Tanpo 2018/3/24 11:41 ◆AI5iRr9FjmkJ
なるほど... でもアップデートするかもしれないんで ver の後にはちゃんと 1.0.0 のように数字を入れたいんですよね...
あんまり作る気力ないですけど、プチコン3号のサンドボックスゲームということでタイトル案があったらぜひお願いします...!
アバター
ツッピー 2018/3/24 13:46 ◆OLBQDZ1qclMQ
修正:Petitcraftはプチコン3号のALPHAOSXの3Dゲーム
アバター
みどり 2018/3/24 15:32 ◆UuFOYlGswjhS
極論を言ってしまえば、こういうことも出来ます。
まず、プレイヤーの座標をMAPの真ん中に固定します。
そして、プレイヤーが左に一歩動いたらマップを1つずつ動かします。(素を動かして下さい)
そして、一つ分余白をとっておけば、余白に入ります。(マップが)その、余白に入ったプロックを削除します。
そうすると余白除く左端が真っ白になります。
そこを生成します。
これを1歩毎に繰り返せば膨大な広さのマップが確保できます。(村とかを実装する場合家が切れたりしますが…)
アバター
アルファ/α 2018/3/28 15:52 ◆jfR1EVz0DbfO
村を生成せずとも、家と判定される物を作るとMob(村人)が家の分生成されるというシステムにすれば良いのでは?
後、別にPetitCraftのままで良いと思います。
アバター
アルファ/α 2018/3/28 16:08 ◆jfR1EVz0DbfO
もし変えるのならこういう名前ですかね。
・PetitCreator
・BlockCraft
アバター
Ryou Tanpo 2018/3/28 17:58 ◆AI5iRr9FjmkJ
むむっ 3D ライブラリを手作りする気力がない...
しかし、作りたいんだよなあ
アバター
ひょうかい ICE 2018/3/30 22:27 ◆pyILF9Xq.R3l
スプライトかくの大変そうや(2回目(しつこい
アバター
みどり 2018/4/8 14:12 ◆UuFOYlGswjhS
アルファさんの案、何処かの2dゲームの仕様と似ていますね。
アバター
アルファさぶ。 2018/4/8 17:42 ◆rrErWzJvqQg6
みどりs>>4文字のアレですね
アバター
みどり 2018/4/8 19:11 ◆UuFOYlGswjhS
はい。アレです。
アバター
みどり 2018/7/5 6:41 ◆UuFOYlGswjhS
誰も来てませんが、あの案だと凹凸が激しくなりそう…

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -