ついでにSTLの練習

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

ついでにSTLの練習

投稿記事 by もるも » 8年前

ウィンドウもどき的なものを作ってみたり、
増築感を楽しみながらエディタをぼちぼち作っています。

マップデータ階層管理のために、削除とか挿入に便利なSTLのvectorを使い始める。
今まで使いこなせなかったんですが(ポインタのイメージがはっきりしてなかったせい)、
イテレータの扱いも慣れてきました。
添付ファイル
スクリーンショット (135).png
スクリーンショット (135).png (17.49 KiB) 閲覧数: 234 回

アバター
usao
記事: 1889
登録日時: 12年前

Re: ついでにSTLの練習

投稿記事 by usao » 8年前

その 子ウィンドウのようなもの は自前で描画してるのでしょうか?

ダイアログボックスを使う方法を知らなかった頃にOpenCVで同じようなことをしていた辛い思い出が蘇ります!
というわけで,こういう小さい(?)ツールみたいなのは
ダイアログベースアプリとかで作っちゃったほうが楽なのではないかと.
(その場合にDxLibを使えるのかどうかは知りませんが)


ところで,迷路のデータはどんなデータ形式(?)になるのでしょう?
以前私がちょろっとやってた迷路のやつにも使えるとうれしいのだけどw(←超ワガママ!)

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

Re: ついでにSTLの練習

投稿記事 by もるも » 8年前

ウィンドウは自前描画です。
使いまわしがきくので、作っちゃえば楽かなーと。

>>ダイアログベースアプリ
なんと!そんなものがΣ(・ω・ノ)ノ!
作ってるときにC++よりもC#で作ったほうが良いんじゃないかと思ったり結構悩みました(;^ω^)
ですが、とりあえずデータが作れればいいのです!(`・ω・´)キリッ

迷路データ形式は行数、列数、階数、配列データ、をばばーっと書きこんじゃおうかと・・・(まだちゃんと考えてない)

>>以前私がちょろっとやってた迷路のやつにも使えるとうれしいのだけどw(←超ワガママ!)
うーむ、なんだかプレッシャーが・・・(; ・`д・´)
公開しても大丈夫なものが出来るかわかんないですよー( ´艸`)

アバター
usao
記事: 1889
登録日時: 12年前

Re: ついでにSTLの練習

投稿記事 by usao » 8年前

図らずも同時期に微妙に似たようなものを作っている(?)ように見受けるので,
データ形式以外にも
「その迷路シーンはどうやって描画してんの?」とか各種情報交換できるとうれしいのですが,どうでしょ?

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

Re: ついでにSTLの練習

投稿記事 by もるも » 8年前

>>情報交換できるとうれしいのですが,どうでしょ?
良いですねー( ´∀` )
自分とは違う考え方が見られるっ!

>>「その迷路シーンはどうやって描画してんの?」
ざっくり説明しますと、
とりあえず天井と床を描画して、
マップチップパターンそれぞれに4方向に壁があるかどうかのデータを用意して、
プレイヤーのいるエリアの周りと、もう一つ先のエリアに壁があるかどうかで描画しています。

アバター
usao
記事: 1889
登録日時: 12年前

Re: ついでにSTLの練習

投稿記事 by usao » 8年前

>マップチップパターンそれぞれに4方向に壁があるかどうか

データの持ち方は似た感じかな? (=このエディタ使えるかもしれん.ククク…)
こちらはマス毎に
 そのマスの属性(何かがあるとか)を示す値,そのマスの四方の属性(壁の有無,あるいはドアだとか)を示す値
という5つの値を持つ形で考えています.
実装的には,そのまま int[5] です.
このサイズ5の配列の添え字は,

CODE:

//引数(DX,DY)は,
//・東西南北のいずれかを示す単位ベクトル:例えば東なら(1,0)とか
//・マスそのものを示すゼロベクトル=(0,0)
//のいずれかであること
inline int DirIndexFromDXDY( int DX, int DY )
{	return DX + (DY+1)*2;	}
とかして,計算してます.( 戻り値{0,1,2,3,4}が,それぞれ{北,西,マス,東,南}に対応 )


描画は3Dな機能を使っているわけではなくて,自前で3Dな計算をして2Dな描画をしているんでしょうか?
だとしたら,(柵みたいなオブジェクトがあったようですし)移動中とか向き変える際の描画が大変そうに思いますが,果たして?

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

Re: ついでにSTLの練習

投稿記事 by もるも » 8年前

ギミックとマップを分けているので、方向のみです。
ギミック自体がたくさんデータを持っているので・・・
(ギミックのエリア番号、通り抜けられるかどうか、ギミックの向き、
アンロックの仕掛けの種類、アンロックの仕掛けのエリア、アンロックの仕掛けの向き)などなど。
4方向を北から時計回りにenumで定義して(方向をくるくる変える処理のとき便利)、
チップごとにbool型で設定しています。

CODE:

enum {
	DIRECTION_NORTH,
	DIRECTION_EAST,
	DIRECTION_SOUTH,
	DIRECTION_WEST,

	DIRECTION_NUM,
};
struct MapCollision {
	bool direction[DIRECTION_NUM];		//北東南西
};

//N、E、S、W
	MapChipColl[TILE_NONE_WALL] = { false,false,false,false };
	MapChipColl[TILE_VARTICAL] = { false,true,false,true };
	MapChipColl[TILE_HORIZONAL] = { true,false,true,false };

	MapChipColl[TILE_DEADEND_NORTH] = { true,true,false,true };
	MapChipColl[TILE_DEADEND_SOUTH] = { false,true,true,true };
	MapChipColl[TILE_DEADEND_EAST] = { true,true,true,false };
	MapChipColl[TILE_DEADEND_WEST] = { true,false,true,true };

	MapChipColl[TILE_CORNER_RIGHTUP] = { true,true,false,false };
	MapChipColl[TILE_CORNER_RIGHTDOWN] = { false,true,true,false };
	MapChipColl[TILE_CORNER_LEFTUP] = { true,false,false,true };
	MapChipColl[TILE_CORNER_LEFTDOWN] = { false,false,true,true };

	MapChipColl[TILE_NORTH_WALL] = { true,false, false, false };
	MapChipColl[TILE_SOUTH_WALL] = { false,false, true, false };
	MapChipColl[TILE_EAST_WALL] = { false,true, false, false };
	MapChipColl[TILE_WEST_WALL] = { false,false, false, true };
描画は3D機能は一切使用せず、奥行きがあるかのようにして描いた絵をそれぞれパーツ分けしてしています。
床、天井、右壁、左壁、奥右壁、奥左壁、行き止まりなどを用意し、チップ別の壁データで判定して描画しています。
(3Dで描画したほうが楽そう(;^ω^))
ギミックは正面、右、左の3パターン分用意しています(めんどくさい)

アバター
usao
記事: 1889
登録日時: 12年前

Re: ついでにSTLの練習

投稿記事 by usao » 8年前

4方向についての 壁の有無? だけを表現すれば良いのなら,
TILE_NONE_WALL = 0x00; //0000
TILE_VARTICAL = 0x05 //0101
TILE_HORIZONAL = 0x0A //1010
…みたいな値にして,その値から直接的に判定できるようにしても良いかもですね.


その描画の仕方だと,マス間の移動や90度旋回は ぱっと(一瞬で) 行われる感じですか.
ギミック画像用意するのが大変そうですね…

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

Re: ついでにSTLの練習

投稿記事 by もるも » 8年前

ビット演算での判定ですか(;^ω^)
グラフィックハンドルの番号としても使っているから・・・うーむむ。

移動時にさも移動しているかのような表現は只今模索中です(`・ω・´)

アバター
usao
記事: 1889
登録日時: 12年前

Re: ついでにSTLの練習

投稿記事 by usao » 8年前

>移動時にさも移動しているかのような表現

2Dな描画でこれをやるのは,どうしたものでしょうね.思いつくのは

・DxLibでは射影変換(絵の変形)ができそうなので,それ使ってどうにか…
・PSの 土器王紀 みたいな絵の切り替え方

とかですかね.

私のやってる方法(縦線で描画するやるやつ)では,そこらへんのこと だけ は余裕なのですが,
そもそもが「目的のための手段」ではなく「手段が目的」な話なので,他人に推せないw

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

Re: ついでにSTLの練習

投稿記事 by もるも » 8年前

土器王紀の動画が存在したのでちょっとだけ見てきました。(謎の世界が広がってた)
方向を変えるときは絵を繋げてスクロールさせるというのが良いですね。(スクロール速くすれば違和感ごまかせそう)

前後移動は作るパーツが増えてしまいますが、
移動するまでの途中の状態の絵を一枚差し込んでアニメーション化出来たらなーと思っています。(壁に装飾がないと移動してる感が薄い(;´・ω・))