DXライブラリ 総合スレッド その19 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
Cを習得した程度のスキルでも、ゲームのグラフィックを比較的容易に描画する事のできる、
「DXライブラリ」に関するスレッドです。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。
【公式】
http://homepage2.nifty.com/natupaji/DxLib/
【関連スレ】
C/C++ゲーム製作総合スレッド Part7 [転載禁止](c)2ch.net
http://peace.2ch.net/test/read.cgi/gamedev/1420939171/
ゲームプログラムなら俺に聞け32(c)2ch.net
http://peace.2ch.net/test/read.cgi/tech/1441693570/
●DXライブラリではなくDirectXの質問ならこっちへ
【C++】 DirectX初心者質問スレ Part39 【C】 [転載禁止](c)2ch.net
http://peace.2ch.net/test/read.cgi/tech/1418438785/ char binadata[10000000]ってやったらエラーが出た
char binadata[9000000]だったら大丈夫だった
char binadata[10000000]でもグローバル変数だったら大丈夫だった
なんでグローバル変数だと大丈夫なん?
使うメモリの容量がローカル変数とグローバル変数では違うの? ローカルメモリはスタックメモリに配置されるからって
大学でならわなかったかい? エラーってstack overflow?
初歩的すぎる 記憶域でのスタックと静的領域とヒープの3つを理解し
適切に使い分けられなければ
蹴り入れられても文句言えない
C言語入門からやり直すべきよ やり直すというより、>>8は現在進行形のC入門者なんだと思う ttfファイルを読み込んで使ってるんだけど、あらかじめ同じフォントがインストールされているとサイズがおかしくなる
どうにかならない? LoadFontDataToHandle関数で解決しました 今更だけどこれって
「ディーエックスライブラリ」?
「デラックスライブラリ」?
前者で読んでるけどどっちなんだ もともと DirectX のDXだからディーエックスでいいんじゃない ここで聞いていいのか分かりませんが
14歳からはじめるC言語わくわくゲームプログラミング教室 Visual Studio 2013編のP105に
もし複数のキーが同時に押された場合、GetJoypadInputState関数は押されたキーを表す定
数を合計した数値を返します。たとえば←と↑が同時に押された場合、PAD_INPUT_LEFT(実
体は整数の2)とPAD_INPUT_UP(整数の8)の合計(つまり 10 )が返さます。キーを表す定数
には2進数で表すとビットが重ならない数値が割り当てられているので、合計してもキーを表す
ビットの状態は変わりません。
←↑の同時押し ↑→の同時押し
0000 0010(2) 0000 1000(8)
+0000 1000(8) +0000 0100(4)
──────── ────────
0000 1010(10) 0000 1100(12)
とあるんですが、テンキーって
789
456
123
だから
↑8
←4 →6
↓2
になって、←↑の同時押し:4+8=12、 ↑→の同時押し:8+6=14だと思うんですが、DXライブラリでは
↑8
←2 →4
↓6
になるんでしょうか? >>18
多分その書籍は「同時押ししても別々に認識できる」
というのを示したかっただけな感じがするので
実際の割当がどうなっているのかはあまり気にしなくていいと思います
あと、テンキーの数字と割当整数がそのまま対応しているわけではないです その数字のままだったら、2+4と6単体と区別つかないだろう
2進数慣れといたほうがいいよ 皆さんありがとう
この部分の前後読んでもさっぱり分からないので
これ以上気にしないで先に進むことにします
この先具体例が出て来るかも知れませんしね ビット演算調べて。
一桁目が1 0001 1x1=1
二桁目が1 0010 1x2+0=2
三桁目が1 0100 1x2x2+0x2+0=4
四桁目が1 1000 1x2x2x2+0x2x2+0x2+0=8
2になると一桁上がるから2進数。
普通の10進数も、例えば、1234は
=1x10x10x10+2x10x10+3x10+4
一つのキーが押されているか押されていないかを表現するのには0と1で充分。
つまりキーが4つなら0000から1111で表現できる。
キーの組み合わせはビットのor演算になる。
2進数だから足し算と結果は同じになるけど。
逆に一つのキーの状態を調べるのはandで。 こうして見てると、ビット演算を他人に教えるって結構大変そうだな ビット演算の話なのか?
俺はてっきり
if( GetJoypadInputState( DX_INPUT_PAD1 ) & PAD_INPUT_UP )
みたいに識別子と論理積を使って判定するのではなく
if( GetJoypadInputState( DX_INPUT_PAD1 ) == 8 )
みたいにその数字で直接入力判定してるから、テンキーの割り当て整数を知りたい
っていう話をしているのかと思ったんだけど とりあえず、入力状態を調べる関数の返り値を2進表記文字列と10進表記文字列で対にして画面左上に表示するだけの簡単なアプリ作っても良いかと思う。
と、ここで気になって調べたら、2進文字列への変換は
Cはitoa←VCでしか使えない? 今回は使えるかな
C++はstd::bitset
簡単なはずなのに、簡単でない気がしてきた。
用途限定なら自作した方が楽な(学べる)気もする。 >if( GetJoypadInputState( DX_INPUT_PAD1 ) & PAD_INPUT_UP )
&(and)だから特定の一つのキーが、押されているかのチェック
押されていなければ0、つまり偽 FALSEになりif以降は実行されない。
押されていれば0以外 真となりifは実行される。
if ((GetJoypadInputState(DX_INPUT_PAD1)&PAD_INPUT_UP) !=0)
これが省略されているのが一行目。
0であるならば、0以外であるならば、機械は基本たったこれ2つの判断で分岐する。!=0は0でないなら、の意味。not イコール 0
while(1)とかも同じ考え方。これは条件が常に真(偽(0)ではない)なので無限ループになる。
for(初期化(が多い);継続の条件;条件が真なら行うこと)
いずれ条件が偽になるからこそ使えるということ。
>if( GetJoypadInputState( DX_INPUT_PAD1 ) == 8 )
というかね、それならまだ
if(GetJoypadInputState(DX_INPUT_PAD1)==(PAD_INPUT_UP|PAD_INPUT_LEFT))
こういう例をあげてくれたほうが嬉しかったかな。
|を+にかえても思ったとおりに動作はするかも知れないが、それではいけないということ。 if(GetJoypadInputState(DX_INPUT_PAD1)&(PAD_INPUT_UP|PAD_INPUT_LEFT))
にしないと使えないね。
寝ます。 ごめんこれも使えなかった。
同時に押された判定はすこし長くなるな。
このままではどちらか片方押さた場合でも、、、
眠い。ほんと寝ます。 if(GetJoypadInputState(DX_INPUT_PAD1)&(PAD_INPUT_UP|PAD_INPUT_LEFT)==(PAD_INPUT_UP|PAD_INPUT_LEFT))
一つのキーチェックは!=0でいいけど
ボタン1|ボタン2|ボタン3
とか複数キーが押されているかのチェックの場合は駄目ですね。一つのキーが押されただけでも!=0を満たしてしまうから。
連投すいません。そして初級者以外の方、失礼しました。 if((GetJoypadInputState(DX_INPUT_PAD1)&(PAD_INPUT_UP|PAD_INPUT_LEFT))==(PAD_INPUT_UP|PAD_INPUT_LEFT))
すいません。もう一度だけ。
c 演算子 優先順位 で検索してください。
確か&(アドレスじゃない方)は==よりあとに評価された気がする。これはCの欠陥ではないのかとか書いてた書籍があった気がする。
不安だし、()はつけといたほうが良いと思う。 なぜ俺が適当に上げた例に対して
何レスにも渡って解りづらい解説をしているのだ・・・
というか肝心の>>18はもう居ないっぽいから
質問したかった内容自体がそこで合ってるのかわからんぞ これでも簡単に書こうとしたのですけどね。
どの辺がわかりづらいですか?
簡単なことを簡単に書くのは難しいですね。 >>33
説明が長くなるほど要点をつかみづらくなるから
補足は少なく、説明の訂正は出ないようにして、
大事な部分だけ短く簡単に説明した方が初心者には理解しやすい
補足とかは質問者に求められたときだけ説明すればいいかと DXLibは初心者向けって聞くけど、シャープDXなどと何が違うの?
2Dゲームの場合。3Dなら素直にUnity使うし シャープDXってなんぞ。
初心者にオススメの1つではあるが、これで作られた市販ゲームもあるくらいには幅広いよ C言語で書きたくてwindowsAPI、グラフィックAPI触りたくない人向け 確かにC++ぽく作られてないのは嬉しい。
他の人のソースコードとかが解読しやすい。 俺もライブラリ作ってやるぜ!と意気込んで、
グラフィックと入力と音周りが出来たあたりで、DXライブラリで良いんじゃね?と気づいて戻ってくる感じ キャラクターIDをソートする場合なんですけど
こういう場合はやっぱりバケットソート的なアルゴリズムが最速なのでしょうか?
条件
・10000体のキャラクターがいる(ID0〜ID9999)※ID0番は空欄扱いの時に使うので実質9999体
・それぞれのキャラクターはスコアを持ってる(とりうる値はunsigned charの0〜255)
・ソートする時はスコアの低い順に並べる
・スコアが同点ならIDが若い順に並べる
自作した処理の概要
int baketu[10000*256];
int kekka[10000];
まず配列baketu[]を0クリアして
for(int ID=1;ID<10000;ID++){
baketu[(IDのスコア*10000)+ID] = ID;
}
int x=0;int i=0;
while(x<9999){
if(baketu[i]>0){kekka[x]=baketu[i];x++;}
i++;
}
こんな感じです
int baketu[10000*256] ←なんかこれで10メガくらい使うみたいですし
もっとスマートなやり方は無いものでしょうか?
ただ、かなり頻繁に呼ぶ処理なので最優先したいのは速度です 普通にクイックソートでいいのでは
ソート時間の比較
http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/speed-compare.html そもそも頻繁に呼び出すなら
いちいちソートしないでソート結果をずっと保持する。
オブジェクトの追加削除が頻繁なら、
ソートではなく、正しい位置に差し込むようにする。 RPGなどのスクロールゲーは、描画可能画像(マップサイズ)を作ってそこに描画した後に、ウィンドウに描画すればいいのですか?
速度やメモリを考えると、やめた方がいいですかね >>43
スコアの変更をするたびに並び替える関数を呼ぶってことでしょうか
その場合は一般的なソートではなくて、条件が限定されてる場合ならではの最適解があると考えて間違いないですよね?
あと今思ったんですけど>>41の処理って下記の処理と速度ほとんど変わらない…?
int kekka[10000];
int x=0;
for(int i=0;i<256;i++){
for(int ID=1;ID<10000;ID++){
if(IDのスコア==i){
kekka[x]=ID;
x++;
}
}
} どっちも2,560,000ループだから変わらないね。
可読性なら、俺は45のほうが解りやすかった。
(というか45を読んでようやく41がなにをしたいのか解った)
スコアの変動幅が少ない(=順位の変動が少ない)なら、
スコアが変わるたびに前後のスコアと比較して入れ換えるやりかたでもいいかな
スコアが頻繁に変わるなら
数秒毎にまとめてquicksort >>44
何が言いたいのか分からんが
ウィンドウより気持ち広めに描画すればいいんじゃないの? フレームレートを上げてゲームの進行の高速化をしたいけどどうすればいいの?
setgraphmodeの第4引数に値をぶっこんでも何も起きん > 画面モードを設定する
> int SetGraphMode(int ScreenSizeX,int ScreenSizeY,int ColorBitDepth,int RefreshRate=60)
> 戻り値
> DX_CHANGESCREEN_OK 画面変更は成功した
> DX_CHANGESCREEN_RETURN 画面の変更は失敗し、元の画面モードに戻された
> DX_CHANGESCREEN_DEFAULT 画面の変更は失敗しデフォルトの画面モードに変更された
> DX_CHANGESCREEN_REFRESHNORMAL 画面の変更は成功したが、リフレッシュレートの変更は失敗した
とりあえず戻り値の確認しとけ。
あとはフレーム管理をどうやってるかによると思う。
垂直同期に丸投げしないで自前でフレーム管理してるなんてオチは……流石にないか ゲームループを秒間60回さなくても高速処理できちゃうの?
元より軽く作って、普段はウエイト入れてるだけにしないといけないんじゃないかな。 >>53
何を疑問に思ったが知らんが、最初からそういう話じゃねぇの >>52
thx。クソ速くなりました
しかしSetWaitVSyncFlagの変更はDxLib_Init前でないと利かないようです
起動中に進行速度を自由に調整したかったのですが難しそうです いやだからフレーム管理方法なんて複数あるんだから
使い分ければいいじゃない >>55
頭はゲームの内容を考えることに使った方がいいと思います >>54
すいません、今自分で作っているモノが何をしても60フレームで安定しているものですから、逆の意味で頭を抱えていたんです。
で、>>52氏の教えに従いVSYNCを外したら2000前後を叩きだしたので、>>51氏の最後の隠しパラメータRefreshRate=60の意味が分かりました。
本当にありがとうございました状態ですm(_ _)m
初挑戦で5年ばかり仕様に気が付かないとか、ちょっと笑えます(^^; 今更だけど、リフレッシュレート変えるのはアカンだろw
垂直同期もオフにすんなw
根元でフレーム間の時間経過を定数倍するとか、
更新処理を複数回呼ぶとかいろいろやり方あるだろが >>60
一般に、60決め打ちとかのほうが
初心者には作りやすいと思うぜ >>61
そういう原始的な作りでも更新処理を複数回呼べばいいだけだし・・・
まあ入門サイトにありがちな経過フレーム数を1とする可変更新方式はゴミなんで
さっさと止めたほうがいいと思うよ 固定するならタイマー管理なのかねぇ
最近は120Hzとかのモニタも珍しくないし
>入門サイトにありがちな経過フレーム数を1とする可変更新方式
どんなん? 俺も垂直同期切ってタイマー管理だな
75ヘルツのモニターで早送りになった経験があるから 固定更新のために垂直同期切ってタイマー管理はありだけど
ティアリングが気になったりしない?
>>62はちょっと分かりにくかったかな
要は垂直同期をとりながら更新をカウントしてるようなタイプね
メジャーなところだと龍神録とか
この方法は環境の違いを直接受けるし、その対処も醜くなるんだよ 固定にするなら、リフレッシュレート制御かテアリングか
どっちかを取るしかないんじゃないの?
>カウント
龍神録ちろっと見てみたけど分からんかった
単位時間あたりのループ回数をチェックして、それ超えそうになったらウェイト入れる感じ? 2フレームに一度スクリーンフリップをすることでゲームの進行速度が2倍になりました
ゲーム中に速度の変更がきくようになったので目的は達成し解決しました ttp://gameprogrammingpatterns.com/game-loop.html#play-catch-up 垂直同期でやってるけど何故かFPSが59.9が多いんだよな
偶に60いくんだけど。龍神録のFPS管理は何故か57FPSになる もともとNTSCの垂直同期って59.94Hzだけど
今のは完全に60Pなんかね 龍神録のところのプログラムって、垂直同期とタイマー待機を同時にやってた気がする
どっちかだけにするといいはず >>70
だからか、東方だと60FPSが多いからなんでだと思ってた
>>71
龍神録のタイマー待機関数をSleepからWaitTimerにしたらいくらかマシになったけど
なぜか垂直同期を切ってFPS制御するより垂直同期とFPS制御を同時にやった方が軽くなった LoadGraph等で同じ画像を複数回読み込んだときは、やはり同じ画像が複数個分メモリに展開されるのだろうか? 画像を改変したりして複数いるなら1回読み込んで、コピーするべき
HDD等からの読み込みは遅いから 垂直同期切ってもウィンドウモードだと60fpsになっちゃうんだけどこれどうにかならない? 仮想関数の呼び出しが遅い
最初はDXlibと関係あるのかなーと思ったけどC++の仕様っぽい
みんなも気をつけろ 自分も聞いたことあるけど、それがクリティカルになるって、
他のところがボトルネックになってたりしない?
あとは最適化オプションとかで何とかなりそうではあるが 関数の呼び出し速度が気になるようじゃ元々が問題だと思うんだけど
実際に通常関数を呼ぶのと速度的にはどれくらいの差なんだろう 3Dモデルのボーンをプログラムで動かすときに、
・ボーンをワールド座標の特定の場所を向くようにしたい(カメラの注視のようにボーンを一点に向けたい)
・ボーンをワールド座標の特定の角度にしたい。例えば、ボーンを水平な角度にしたい
を行いたいのですが、
ボーンを動かすのは MV1SetFrameUserLocalMatrix でローカルの変換行列を指定する方法しかないですが
どうやればできますか? プログラムをステップ実行したときに
DXライブラリのソースにステップインするにはどうやればできますか?
Visual Studio 2013使ってます ちなみにDXライブラリのソースにステップインしたい理由は
エラーコードが-1しかなくて、何が原因かわからなくて調べるためです
たまに挙動不審になったときの調査もしたいです 自己解決した時は、どんなに簡単であってもその方法をだな その方法も何もDXライブラリのソース公開されているからlibファイルの代わりにソースをプロジェクトに追加するだけやん pdbを置くだけでしょ
ステップインしたらその時にソースの場所聞いてくるわ という風に、人によってやり方違うので
どんなに簡単でも手順は書いておいたほうが
それが質問した人の礼儀かと
レスしようとして自分とこで検証して回答しようとしたら
自己解決しましたの一言でしまってたりすること多いしねえ pdbって使い道あったのか
いつも使い道分からずに放置してたわ DXライブラリは3Dモデルの大きさをセンチメートルで管理するのがいいのか?
メートルで管理してカメラの Near Clip を小さくするとアウトラインやZTestがおかしくなる 単位は人それぞれだけど、精度を下げりゃ描画が甘くなるのはそりゃ当然よ Zバッファのビット深度を変更する関数があったような
デフォは16bitだから32bitとかにしてみては >>90
俺も以前同じようなことで悩んだわ
Near Clipは破綻しない程度に大きな値をとる必要があるとのこと
俺の場合は1メートル〜数万キロのレンジで幅が広すぎて単位をどう弄ろうがZバッファの深度を深くしようがダメだったんで、
ここで教えてもらった「ワールド空間を複数の距離レンジに区切ってそれぞれを描画し最後に合成する」手法で切り抜けた
おかげでカメラが物体から5メートルまで寄ろうが1万キロ離れようがあまり問題はなくなった
ただし代償として描画処理の負荷は上がったけど・・・
>>92
SetZBufferBitDepthでZバッファの深度を変えられる
でも確か24ビットまでじゃなかったかな? >>91-93
レスありがとうございます
SetZBufferBitDepthは簡単なのですぐに試してみます
「ワールド空間を複数の距離レンジに区切ってそれぞれを描画し最後に合成する」手法は
ちょっと簡単にはできなさそうですが、プロのゲームっぽいですね。すごい >>94
方法さえ教えてもらえればそんなややこしい実装じゃなかったよ
1. まずMakeScreen関数で合成用のサブ画面を作る
2. SetDrawScreen関数で作成したサブ画面を描画対象にしてその後カメラのパラメータを設定
3. SetCameraNearFar関数でカメラから一番遠いクリップ領域を指定
4. ワールド空間の物体を描画
5. SetDrawScreen関数で裏画面を描画対象にする
6. DrawGraph関数で合成用サブ画面に描いたグラフィックを裏画面に投下処理つきで描画
7. 2〜6をクリップ領域を1つずつ手前に近づけながらforループで必要回数だけ繰り返す
8. ScreenFlip関数で裏画面と表画面を切り替える
みたいな感じ
継ぎ目がちょっと気になるという欠点があるらしいけど、俺の作ったプログラムでは大して問題にはならなかった >>95
ありがとうございます。実装できる気がしてきました すいません。 初歩的なことを教えて下さい。
DXライブラリを3.12aから3.16d(最新版)に昨日上げたのですが、以下の様なエラーが出ます。
エラー 1 error LNK1104: ファイル 'DxDrawFunc_vs2012_x86_d.lib' を開くことができません。
丁度ドライブが一杯になったのでそれでファイル欠損起こしたのかと、整理して落としなおして
再インストールしても変わりません。 消さないでいた3.12aに戻せば正常にコンパイルできます。
どんなポカミスが考えられるでしょうか。 DXライブラリのフォルダの下を 'DxDrawFunc_vs2012_x86_d.lib' で検索して、
そのフォルダがプロジェクトのプロパティの「リンカー」の中の
「追加のライブラリディレクトリ」に設定されているか確認してみたか?
設定してなかったら設定する ありがとうございます。
おっしゃるとおりでした。
C/C++全般のインクルードディレクトリだけ変更してリンカ全般の追加を変更していなかったのが原因でした。
これで総て正常終了できました。
ありがとうございました。 DrawBox()って思った以上にコスト高なのね。
エディタ作っているのですが、マウスで指定範囲を決定するのに半透明のFilling=TRUEで
サイズが{400,200}程度になると追いついて来ないし。うちの環境だと。
まあ範囲が分かれば良いだけなので、非透明のFilling=FALSEにしましたが。
機能の根幹に必要な命令じゃなくて良かった・・・。 >>101
SetUse3DFlag()指定しなければデフォで使ってくれないの?
TRUEで明示してみたけどやっぱ重かった。 画面全体塗りつぶすのに毎フレーム使ったりするし重いわけないと思うがなぁ
最新版では試してないけど >>103
すいません、DXライブラリは無罪でした。
コード読み直していたら、離れた所から12回ループでDrawBox()してからScreenFlip()しておりました。
そりゃ感覚とは結果が違うのも当たり前で。
大変失礼しました・・・。 ∧∧
ヽ(・ω・)/ ズコー
\(.\ ノ
、ハ,,、  ̄
まぁ原因判明してよかったね スーファミっぽくラスタースクロールの波うつようなあのぐにゃぐにゃした表現をしたいんだけれども
DrawRectGraphで一列ずつ描画するのと
SetDrawAreaで描画できる範囲を一列ずつ変更しながら描画するのと
どっちが早いんだろう どっちもクソ遅そうな気が……
ラスタースクロールのシェーダー書くのがいいが、
シェーダーはDXライブラリではちょっと敷居が高くてプログラム難しそうなのな
ボーンを仕込んだポリゴンの板に画面の画像を貼り付けて、
ボーンでラスタースクロールふうにアニメーションさせるのが楽な気がする 10年前のPCで動くSTG(弾は500発程度)で、640*480程度なら上から一行ずつ描画でも特に処理落ちしなかった
DrawRectGraph使った
今のハードなら余裕だと思う SetLoopAreaTimePosSoundMem()
この関数めっちゃ便利なんだけどググっても全くヒットしなかったんだが、いつ頃からあるんだろ?
ループ開始位置と終了位置をms単位で指定できるから音声ファイルを編集する必要がなくなった
無加工のファイルでもこっちの好みでループ範囲を指定できるから
音楽ファイルはこの素材屋からDLしてねってreadmeに書いておけば配布するファイルサイズも小さく出来る
あと軽く検証しただけだけど再生中に指定しなおしても有効だったから
FF6のラスボス戦みたいに
イントロ‐Aメロ‐繋ぎ‐Bメロ‐繋ぎ‐Cメロ〜 みたいになってるファイルで
最初はAメロをループ、条件を満たしたら繋ぎを経由してBメロループに移行〜みたいな演出も簡単に出来る そんなのあったのか
最後まで行ったら途中から再生、ってのは
結構前からあったの覚えてるんだが 試してないけど
アンドロイドでも
動くように
なってたのね知らなかった
何処まで、動くのかな? あらかじめ大きめのサイズの空っぽの画像をMakeScreenで用意しておくことの有用性に今頃気付いたぜ
これとDerivationGraphのコンビで作り直したらぐっと軽くなった >>109
使ってみたら、ほんとにスゴイですね。
時代がCDDAやストリーミング再生になってもう無限ループは無理なのかなーとか思っていたのだけど。
ただWAVEで成功したのでそのデータをMP3にしたら、上手く繋がらなくなっちゃった。
もう少しデータの作り方工夫すれば上手く行くのだろうけど。 >>114
MP3はこの関数に限らずループの時に違和感が出ると言われてるから
たぶんMP3の仕様の問題もあると思う
ogg形式では上手くいったよ
ただ変換の時にビットレートを固定したファイルでしか検証してないから
可変ビットレートの方法で圧縮されたoggファイルで上手くいくかは未検証 MP3は権利の問題があるから他の使えって言われてた時期があったね 権利よりも仕様が問題だな
MP3は無音が挿入されたり余計なことされる場合が多いからゲームに使うようなもんじゃない
他の環境では手抜き実装でWindowsの再生機能に丸投げできるメリットがあるが、DXライブラリなら関係ないし ループできないからだったか、昔は
DXライブラリではogg使うなとかもあったね 昔は BGMにはmp3, 効果音にはwav だったでしょ 116の言う通りmp3はライセンス関係が危ないということで避けられoggが推奨されていた
仕様よりもこっちのほうが重大問題
ゲーム制作関係でmp3推奨というのは聞いたことがない MP3登場時にはoggなんてなかったから
Wavよりファイルサイズの小さいMP3を推奨する風潮はあったと思うけど ogg普及前はソフトウェアMIDIが多かった
もしmp3が主流だったと思う人がいたら、その人のいた界隈はライセンス関係の意識が薄かったんだよ
まぁ00年代前半まではそういう時期でもあったけど 市販のゲームで5000本以上販売が課金の条件だったから、フリーゲームや小規模同人では普通に使われてたよ 制作中のゲームにはキャラの髪型や服や装備や小物を変えるキャラメイキング(着替え)の機能があって、
今はひとつのMV1ファイルにまとめておき、フレーム表示/非表示で切り替えてるのですが、
だんだんアイテムが増えてきてファイルが大きくなってしまったので
別の方法をとりたいのですが、
キャラメイキングや着替えを実装するのに何かいい方法ありませんか?
髪型や服や装備や小物ごとにXファイルでバラバラにしておいて、Xファイルをテキスト結合するのが
楽なのではないかと思っていますが、もっと良い方法ありませんか? DXライブラリのユーザーが作ってるのって
2Dゲーと3Dゲーのどっちが多いんだろ?
俺は3Dには手が出せてないんだけど 3Dは海外のゲームエンジンが無料化されてしまったので、
3Dゲーム制作者はそっちへ行ってしまった気がする
2Dだとどれもあんまり変わらない気がするが 2Dも描画しかないDXライブラリよりもオブジェクト管理出来たりするエンジンに流れている気がする 全部コードに直書きする形でならなんとか自分の思う通りに作れるようになったとは思うんだけど
さすがに会話イベント一個追加したり、マップに壺一個追加しただけで再コンパイルする必要がある状況って
なんというか我ながらアホだよね
この状況を卒業するには何を勉強したらいいのかアドバイスください
作ってるのは2DRPGで、主にNPCのイベント内容をコードの外に出すにはどうやればいいかで躓いてます
とりあえず思いついてるやり方は
セリフ表示とか効果音を鳴らすとかのイベント処理を担っている関数に番号振って引数の数を紐付けしておいて
イベントの内容を全部、関数の番号、引数の数、引数の数値…って数字だけのデータにして
そのデータを読み込んで、どの関数を呼び出し引数にはどんな数値を入れるかを判断して実行する関数を作り
イベントの内容を全部数値に置き換える方法なんですけど >>129
自分でも気付いてる通り、基本原則はコードとリソースを分離すること。
テキストファイルの読み込みと解析が出来るなら
単純なシナリオファイル(会話+αくらい)のローダくらいなら比較的簡単。
まあそれ以上に複雑なことをやるなら、素直に
既存のスクリプト言語の組み込み用ライブラリを頼ったほうが良いと思うけどね。
次点としては、ソースファイルの構成を見直して、最低限のビルドでも済むようにすること。
各クラスの書き方、各ファイルの依存関係なんかを整頓することで、
ちょっと修正したくらいなら、長時間のビルドを要さなくなる。 大体の方向性はこんな感じでいいんだということであれば進めていきたいんですが
躊躇している理由が2つあります
基本的に作り始める時に
クラスとかポインタとかよくわかんないけどとりあえずやってみるべ!と始めたので
配列と構造体だけで設計されてて、実は今でもクラスのことはよくわかっていません
だけどキー入力を把握すことと、変数の操作と、画像と音を自分の望む形で望むタイミングに表示再生出来るなら
自分の作りたいゲームは作ることが出来るはずだ!という考えの下で強引に作り続け
変数の値に合わせて画像や音の状態を制御する関数を作って、それを毎フレームScreenFlipの前に呼び出している
なんていう作りになってしまってます
キャラクターに歩行アニメーションや特殊なポーズをとらせたりするのも
BGMを変更するのも効果音を鳴らすのも、HPMPの増減やアイテムの入手なども
picture[ kyaraDATA[kyaraid].pictureID ].pattern=8;
SEplayflag[seID]=1; BGMID=BattleBGMID; とか
kyaraHP[kyaraid]+=1000;
itemstorage[itemid]++; とか
ほとんどこういう形でイベントを組み立ててるんですよね……
ちなみにこの変数全部グローバル変数です
この単純な変数操作を外に出のに、変数全部に番号振ってやる以外に方法が思いつかず
その数が数だけにちょっと躊躇っているのです
それに
if(itemstorage[itemid]<99){
itemstorage[itemid]++;
takarabakoOpenFlag[takaraID]=1;
}else{
JISAKU_serihu(1,"これ以上持てない",0);//最初の引数がしゃべるキャラ、最後のは吹き出しの形のタイプ指定
}
みたいに作ってるイベントの条件分岐の部分の外部への出力方法が思いつかないっていう問題点もあります
なんかこう、こんな低レベルな人間にもできる上手いやり方ありませんかね? 途中で書き込んでしまったけど、そういうわけでコード書くときは全角スペース使って見やすく書いて if(itemstorage[itemid]<99){
itemstorage[itemid]++;
takarabakoOpenFlag[takaraID]=1;
}else{
JISAKU_serihu(1,"これ以上持てない",0);//最初の引数がしゃべるキャラ、最後のは吹き出しの形のタイプ指定
}
複数行にまたがってる部分はここだけです
後は本当に変数に代入してるだけというか… >>131
データにしやすいパターンやお約束のイベントだけをデータベース化して
特殊処理はそのままハードコートでいいんじゃねぇの
「これをデータ化したら本当に効率化されるのだろうか」と考えて
非効率になりそうだったらハードコートのまま
そんなことよりもっとプレイヤーから見て喜んでもらえることに意識を集中したほうがいい  あ
この板Unicode参照出来なかった? 3Dゲームでマウスをクリックした位置にある3Dモデルをできるだけ高速に取得したいのですが、
何かいい方法はありますか?
コリジョン(衝突判定)関数がありますが、当たり判定用のメッシュを用意しないといけないようなので
ちょっと手間がかかりすぎるのでできればもっと手軽な別の方法がいいですが Convert Mouse Location To World Spaceでライントレースしか分からない >>138
画面描画には直接利用しないテクスチャに取得対象モデルをレンダリングしておいて判定するとか 初歩的なことですが、
画像を描画する際の関数の仕様について迷っています
例えば、描画系の関数をできるだけ少なくして、内部変数によってDXライブラリの描画関数を呼び分けるのがいいのか、
あるいは、描画系の関数を目的別に用意して、画面側で使い分けるのがいいか
フェードインの機能の場合、
前者なら「setModeFadeInの後、drawする」
後者なら、「drawとfadeInをそもそも別関数にする」
個人的には前者が正解のような気がしているのですが、
そもそも発想自体が間違っているのでしょうか?
御存知の方いれば、ご教授頂けると嬉しいです 関数の仕様と言うよりは、抽象度とか設計とかの話なのかな?
なんとなくは分かるけど誤解してるかもしれないんで
数行程度のサンプルソースを書いてくれると嬉しい 個人的には後者の方が好き
状態が多いとバグの原因になる >> 147
たしかに、「抽象度とか設計」の質問と言った方が適切かもしれません。失礼しました
具体的にいえば、以下のイメージです
■パターン1
if (ボタンが押されたら) {
画像A.setFadeIn(引数に透過速度などの更新情報);
}
画像A.draw();(透明度の加減処理。 また透過度が100以外なら、DXライブラリのSetDrawBlendModeを使うかを判定。フェードインが終わったら、内部変数のフラグを立てる)
if (画像A.IsFadeInComplete()) {
// フェードイン終わった!
} ■パターン2
if (ボタンが押されたら) {
グローバル変数B = true;
}
if (グローバル変数B) {
画像A.drawFadeIn(引数に透過速度などの更新情報。毎フレーム同じ情報を渡すのが違和感);
if (画像A.IsFadeInComplete()) {
// フェードイン終わった!
}
} else {
画像A.draw();
}
最初はパターン2でやっていたのですが、これだと例えば「回転とフェードインとかが同時にできない?」と思って、パターン1に変えました
すると、今後はフェードインの更新情報を画像Aに持たせたためか、あるいは、draw関数内の条件分岐が増えたせいか、処理が重くなってしまいました
この程度で重くなるのかも疑問ですが、そもそも両パターンともNGなのではと思い始めた次第です
ゲーム系プログラミングのお約束が分かってないのが、一番の原因ですが……
>>148
ご教授ありがとうございます。
何がバグの原因になるとか全然分からないので、大変参考になりました 132 133 の書き込みを読むべきでした すみません……
■パターン2
if (ボタンが押されたら) {
グローバル変数B = true;
}
if (グローバル変数B) {
画像A.drawFadeIn(引数に透過速度などの更新情報。毎フレーム同じ情報を渡すのが違和感);
if (画像A.IsFadeInComplete()) {
// フェードイン終わった!
}
} else {
画像A.draw();
} グローバル変数を使うかどうかとか
複数の状態を同時に実行できない問題をどうするかとかは別として
自分なら2の方向かなあ >>146,>>149-151
細かい点ですが、「フェードイン」とは、画像Aが透明な状態から徐々に濃く(明るく)なっていく処理をさしているのですか?
ボタンを押さないとフェードイン処理が始まらないみたいなんですが、
そもそもボタンを押してないと、画像A.draw()で何を描画してるんですか?
また画像A.IsFadeInComplete()が真になると、何が起こるんですか?
この部分は問題を説明する上で、さんぷるにふくめるひつようがあるのですか?
またなぜ151のパターン2で、わざわざグローバル変数Bをサンプルに含めているのがよくわかりません
サンプルとしては、
if (ボタンが押されたら) {
画像A.drawFadeIn(引数に透過速度などの更新情報。毎フレーム同じ情報を渡すのが違和感);
:
でいいんじゃないですか
仕様がいまいちイメージできません あーでもグローバルじゃなくてブラシクラス作ればいいかも 質問の意図は
■パターン1
画像A.draw(ボタンが押されたか、引数に透過速度などの更新情報);//毎フレーム同じ情報を渡すのが違和感
■パターン2
f (ボタンが押されたら) {
画像A.drawFadeIn(引数に透過速度などの更新情報);
} else {
画像A.draw();
}
でどっち?
みたいな話かと思ったけど、ちがうのか・・・ >>153
ごめんなさい たしかにサンプルが不適切です
この場合だとフェードインではなく、フェードアウトになります
ボタン押したら、画像が消えていくみたいな
質問の意図に関しては 155で指摘されている通りです
>>155
ありがとうございます
グローバルではなく、staticなローカル変数、あるいはブラシクラスを検討してみます
ブラシクラスとなると、画像インスタンスを受け取って、内部情報を更新するという意味かな 思った以上に反応があって、ちょっと焦ってました
156の「>>155」は、「>>152」が正しい
154の「グローバル」の意味が把握できていないけど、たぶんグローバル変数Bのことじゃないよね
156の自分の書き込みは無茶苦茶。グローバル変数Bとブラシクラスは関係ない
とりあえず方向性は見えてきたので、ありがとうございます 流れがつかめませんが、解決したんですか
ちなみに>>155でいうと、自分はパターン2派。可読性が良くなると思うから。
画像A.のdrawFadeIn()とdraw()で重複するブロックが肥大化してきたら、その重複部分をinline関数に切り出してる
しかし・・・
確かに可読性が悪いとストレスの原因になるが、
可読性を確保する労力が新たなストレスと生むというジレンマ・・・ >>158
混乱させてしまったようで、申し訳ないです
155の意図をやっと把握しました(訂正に訂正を重ねてホンマ……)
パターン1は、どこかでフェードインの命令要求を登録した後、draw関数を呼び出します
draw関数内では、透過度の変更要求の確認、透過度の更新、および、DXライブラリ「SetDrawBlendMode」の呼び出しを行います
透過度の変更要求がない場合は、SetDrawBlendModeを使いません
なので、通常描画もフェードイン描画も一律draw関数を呼びだすことになります
パターン2は drawFadeIn とdraw を別関数にします
フェードインするときは、drawFadeInを呼び出して、引数として透過度の更新情報を渡します
結論としては、皆さん「パターン2がマシ」と仰っているので、その路線で進めようと思います
描画処理専門のブラシクラスも含めて、検討してみます
可読性に関しては、最近、可読性を確保するためのストレスに負け始めてます
重要なのは重々承知ですが、やはり面倒……
趣味なはずなのに、仕事と同様のストレスを感じる >>159
フェードアウトとフェードインの区別が困難になるほど、なにやら複雑な夢(野望、殺意)を秘めているみたいですね
お手柔らかにお願いします(笑)
ロベールさんのサイトによると、
inline関数は必ずしもinline展開されないみたいだけど、
誰か環境ごとに厳密に検証した人いるのかな?
自分はVC++の判断を信じてる! 例えば「マリオが死ぬと画面がフェードアウトして画面が切り替わる」
…という処理があるとして
■パターン1
マリオの死亡処理のところに
具体的な切替演出の設定(この場合はフェードアウト)を書くことになる。
■パターン2
マリオ死亡時にやることは
画面切替フラグを立てるだけで、死亡処理に集中することが出来る。
画面切替の演出には、画面がどんどん暗くなる「フェードアウト」だけでなく、
真っ白になったり(ホワイトアウト)、ワイプしたり色んな演出パターンが考えられる。
実際にやるかどうかは別としてね。
そうなると、画面切替処理は独立させておいたほうが取り回しが良くなるのではないか?
というのがオイラの考える2のメリットかな。 状態に対して××モードと名前をつけて
上手くハマるならそれを使えばいいよ >>161
わかりやすい例え、ありがとう
まさにそういう事例を想定していたので、とても参考になります
>>162
了解です 久しぶりにDXライブラリ使ってたんだけど、文字入力して変換しようとするとIMEの変換候補がゲームウィンドウの左下に表示される。
ちなみにGoogleIMEでは左下でMicrosoftIMEは右下。
昔触ったときは文字の入力した文字のすぐそばに表示されてた気がするんだけどWin10(Win8?)から仕様が変わったんだろうか。
ぐぐったらWin8でIMEウィンドウ自体が出ない不具合があってそれは解消されたようなんだが。 文字入力といえば自作のアクションゲームで名前入力辞めマスタ
よーく考えるとユーザー自身しかしないだろうし キーのログをとってmovieみたいに再現できる機能も省略
今なら動画をとろうと思えばキャプチャソフトを使えばよいし
楽になった分、今度こそ完成に近づくと良いけど スレに残しておきたいと感じた情報を書いておきます
>>106で沸いた疑問を縦800ピクセルの画像で比較検証したところですが
DrawRectGraphで一列ずつ描画するのと
SetDrawAreaで描画できる範囲を一列ずつ変更しながら描画するのでは
比べるのがおこがましいくらい
DrawRectGraphで一列ずつ描画する方が
軽かったという検証結果が出ました
12倍くらいの差がありましたので、10倍以上違うのは確実だと思います
ここまで違うのならどんな環境でもDrawRectGraphの方が良いのは確実なんじゃないかと思います
ラスタースクロールをシェーダ使わずに実装するならDrawRectGraphが良いです
以上、報告終わり >>167
SetDrawAreaを使うと連続描画が途切れるからね Delayフレーム後にSoundHandleを指定の音量パン周波数で再生する
SoundEffect(int SoundHandle,int VolumePal,int PanPal,int FrequencyPal,int Delay)
こんな関数を作りたいんだけど実装方法が思いつかない
SetSoundCurrentTimeでマイナスの値を設定出来たら簡単なのに マイクから入力される音声のdBを
監視するアプリって作れますか? DX11対応の環境でサンプルプログラムをコンパイルし実行したらDX11で動いていましたが
この.exeをDX11非対応の環境で実行するとDX9などで動くんですか?
手元にDX11非対応の環境が無くて試せないんですが2Dゲーを作る分には特に気にしなくても大丈夫なんでしょうか Android対応のDXライブラリが公開されたようだね
Unityやcocos2dと比べるとメリットがあまりないのがアレだけど
(DX11対応みたいに中途半端になりそうなところがまたね……) >>171
DX11でつくるのなら
DXライブラリは、DX11の機能のテッセレーションやジオメトリシェーダー
コンピュートシェーダーなど対応していないからあまりオススメしないぞい android対応dxライブラリマジやがw
ちょっとスマホゲー作りたくなってきた・・・ ゲームエンジンで実機デバックしてたから
VS2015の実機デバックがそのまま使える
DXライブラリのプログラムも実機でみれて楽しい Android対応まじだったw
前に誰かがcocos2dでやってたの使ってみたんだけど
まともに動かんかったから公式で対応してくれるのはでかい
帰ったら自作ゲームを移植してみよう 個人開発なのにそんなに手広くやって大丈夫なんだろか。
良い人である以上に人が良すぎてサポートで死にますよ。 つかVS2015がandroid対応していたことに驚き 今MSはマルチプラットフォームに必死だからね
Win10でBash使えるようにしたりLinuxにVisual Studioのコードエディタを公開したりと
1番驚いたのはThe Linux FoundationにMSが入った事だな ごめんスペースだと思ってコピペしたのが文字化けしてる
The Linux Foundationね 試しにやってみたけど最後の実行が出来なかったorz
もう寝る Android版をタブレットのC4droidでやってみたけどライブラリの中でエラー吐くみたいだ
大量のエラー吐くからさっぱり分かんないや
"ANative_Activity_onCreate"が" android_native_app_glue.h "と衝突して多重宣言しているとかなんとかから始まってBulletやOgg周りで参照エラーが出てる DrawLine関数の挙動がPCごとに違う?なんかサブのノーパソで動かすと下に1ドットずれる
両方Directxのバージョン11以降だからそこ辛味じゃないと思うんだけど… もう何年も前に、
ハードウェア描画は1ドットずれたりする場合があるだの
3Dのものを画面に映す(2Dに変換する)際に誤差が生じるだの
聞いたことあるけど、流石にそれは関係ないかしらね… 座標の扱いはビデオカードごとに違うからね
古いオンボードだと0.5pxずれたりする 2dで影作るときってどうすればいいんだ
アルファ乗算の値下げながらDrawLineをずらして何本も描画していくのを思いついたけど絶対糞重くなるでしょ 影ってどういう影なのか分からんけど
例えばスプライトのキャラに影つけるならキャラの形の白黒画像用意してDrawModiGraphで乗算合成とかじゃね スプライト底辺に黒い楕円置くだけやろ
それでアクションやマップ作成に支障が出るなら
潔く影なんて捨てる マウスの入力についての質問です
マウスのサイドボタンの検出はDXライブラリではできないのでしょうか?
調べてみても、サイドボタンがXButton1とかXButton2と呼ばれていることしか得られませんでした
こう記述すればできるとか、DXライブラリ以外の実装方法があるとかあれば教えてください
よろしくお願いします >>195
公式リファレンスを見ながらGetMouseInput()の引数を全部試しましたが、どれを使っても検出されませんでした
ブラウザでサイドボタンを使って戻る進むができてるので、自分のサイドボタンが壊れている可能性はないです >>196
ttp://dxlib.o.oo7.jp/function/dxfunc_input.html#R5N8
ここ見る限り、GetMouseInputで値取れないってことは
逆にマウスのサイドボタンがキーボードのフックで対処してるタイプかもしれない。
例えば、キーボードのBackSpaceで「戻る」、Shift+BackSpaceで「進む」を表現してるとか。
ttp://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=past&no=2247
後は関数自体の使い方に問題があるかもしれないので
ここで管理人さんが掲示してる最初のソースコードを試してみるとか。
情報が古いので今も使えるかわからないけど。 >>197
ふたつのURLを見て試してみましたが検出されませんでした
さらにCheckHitKeyAll()も試してみましたが、これでもサイドボタンは検出されませんでした
ふたつ目のURLのように、もしかしたら実装されていない機能なのかもしれないです
DXライブラリ製作者さんの掲示板に質問・お願いしてみることにします
>>195 >>197 さん、どうもありがとうございました サイドボタンの検出の件ですが、無事解決しました
自分と同じようなことで悩んでいる/いた方のために書き残しておきます
簡単に言うと、サイドボタンの検出をするにはDXライブラリをバージョンアップする必要があるようです
以下のやり取りを見ていただければ、詳しいことが得られると思います
ttp://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4080
今回の質問に関わってくださった皆様、改めてありがとうございました 白地に(アンチエイリアスかかった)黒のアイコンを表示してるんですが
これの白地を別の色にすると白地前提のアンチエイリアスが汚くなってしまいます。
白地に黒アイコンのものにアルファブレンドをかけると今度は黒が薄く見えなくなってしまう。。
Dxライブラリの知識ではないかもしれませんが、これを解決する手法のヒントなどありますでしょうか? ごめんなさい書いた直後に自己解決してしまった
やっぱりよく調べて書くべきですね・・・ DXライブラリに関連してるかどうかわかりませんが
わからないことを質問してみます。
ファイナルファンタジー14(以下、FF14と略)などのプロが開発したゲームを拝見するとロード時間が短いように感じます
例えばDXライブラリを使って約14,000KBぐらいのMP3ファイルをロードしてメモリに読み込むようにコードを書くと
MP3ファイルのロードが完了するまでにコンマ数秒のロード時間が発生します
ですが、FF14のタイトル画面でしばらく放置するとプロローグムービーが開始されるわけですが、
内容を見る限り明らかに容量の多いムービーファイルをロードして再生してるように見えるのですが、
実際、FF14のゲームを起動してタイトル画面に移行するまでの時間は僅かです
私からの質問は、大容量のファイルをロードする場合に
ロード時間を短く済ませるための技術です
DXライブラリでゲーム開発をしてるのでDXライブラリを使用してのお知恵を拝借したい 効果音ではなく曲を全部メモリにロードするのは間違ってる
ファイルサイズの大きい曲や動画は読み込みながら再生するのが基本
そうじゃないと100GBの動画とかメモリに入りきらないようなものは再生できない なるほど、必ずしもメモリにロードしてから再生しなくてもいいという考え方なのか
直接HDDからファイルをメモリーにロードしながら再生(ストリーミング再生)するわけか、
俺は大容量のファイルを分割でメモリに読み込んで
1ループのロード時間を短くする方向で考えていた 分かりやすく例えると、oggとかmp4なんかはzipで圧縮したような形式だから
再生するために元のwavに解凍すると10倍〜100倍になる
メモリにロードするってことは、この巨大化したのを入れるってことだから
効果音のような小さなものでない限りは避けるべき あとはシングルスレッドの場合はどうしてもロード時に固まってしまうだろうから、マルチスレッドでロードを行うようにするのはどうだろうか? マルチスレッドということはC++11を扱うということですね
Core i7を乗せてるのでCore UPUに対応したゲーム開発も興味はあるが
技術的に敷居が少し高いので今はまだいいかな
最新のC++コンパイラも必要になるし
ゲームのプレイヤーがCore i7 や Core i5のCPUを乗せてないと威力は発揮されない 短い場合(メモリー上にwave展開しない)
SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMPRESS );
長い場合(ストリーミング再生)
SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE );
どちらか書く ちなみに画像や音声のマルチスレッド読み込みはDXライブラリ標準機能で
SetUseAsyncLoadFlag(TRUE)使えば簡単よ C++11とか使ってませんが、ロード画面作るときにマルチスレッドを使いました。
あくまでロード時に凍るのを防ぐために使用するのでCPUがどうとかは無いですよ。
process.hをインクルードしてResumeThreadさせるだけで実装できます。 何故だろう、急に挙動が変わった。
sizeが0を返すからファイルが見付からない訳じゃないと思うのだけど。
void* readbin( char *filename)
{
int size ,rsize ,h;
char *ptr;
if ( size = FileRead_size( filename ) == -1 ) errmsg( NOTREAD ,filename );
ptr = (char*)malloc(size+1);
if ( h = FileRead_open( filename ) == 0 ) errmsg( NOTOPEN ,filename );
rsize=FileRead_read(ptr ,size ,h);
printfDx( "%s : %d/%d\n" ,filename ,size ,rsize );
FileRead_close( h);
return ptr;
} > ptr = (char*)malloc(size+1);
この+1はなに?
本題とは関係ないけど DXLib 知らずに覗いてるだけでどう挙動が変わったかわからんので >>213 の疑問には答えられないが、
>>214
おそらくファイルのく中身は表示などに使う文字列だという前提だと、
文字列の終端は NULL で止める必要があるのでその 1byte 分を余計に確保している。
(今どきのコンパイラは malloc での確保と同時に \0 埋めをしてくれるのかもしれないけどちょっと危ないな。)
readbin() という名前からして文字列と言っても中身はバイト列と推測できるので、
ファイルの中身には終端 NULL を入れずに記録しているんだろう。 +1は苦し紛れにあーだこーだいじる過程でダメ元で付加してみたのでした。
末端に不定の1バイトが付加されるので無駄な容量食いではありますが、危険という認識はありませんでした。
早急に削除します。
そして、自己解決しました。if文の連結順序を誤解していました。何故今まで動いていたんだ・・・。
if ( size = FileRead_size( filename ) == -1 ) errmsg( NOTREAD ,filename );
if ( h = FileRead_open( filename ) == 0 ) errmsg( NOTOPEN ,filename );
↑これは↓こうですね。
if ( (size = FileRead_size( filename )) == -1 ) errmsg( NOTREAD ,filename );
if ( (h = FileRead_open( filename )) == 0 ) errmsg( NOTOPEN ,filename );
お騒がせしました。 DXライブラリはgifアニメーションを再生できないのでしょうか?
DXライブラリ以外ならgifアニメ再生できたりするのでしょうか?
「こう記述すればできる」など教えてください gifをそのまま読み込んで表示はできなかったはず
連番画像に変換するか、もしくは動画にするかだな >>219
割とむつかしい事しなきゃ動画像は表現できないんですね・・・
爆発エフェクトとか魔法エフェクトとかgifで表現したかったんですが、少し億劫になってしまいました
回答ありがとうございました LoadDivGraph使えば連番画像が配列に入るから簡単やで
っていうか簡単なエフェクトなら回転拡大縮小やブレンドパラメータの変更で表現できるんじゃない? >>218
一応C#版ならサンプル転がってるね
規制でurl貼れないけど検索すればすぐ見つかる
でも221が言うようにDivGraph系使った方が楽だと思う なるほど初期化とかのタイミングで一旦展開するのがエンジン的には普通なのか 最初から専用形式化アニメGifくらいにしか出力できないツールとかでもない限り、
手間は大して変わらんだろうしな アニメーション用の画像を一枚にまとめた後ってLoadDivGraphでもDrawRectGraphでもアニメーションにできるけど
どっちの方が軽いとかってあるのかな 内部的にはほぼ同じ処理だと思う
どちらも一度のドローコールでまとめて描画するから速度はほとんど変わらないはず FOR-NEXT 10億回ループまとめw追加&補正その4w
DarkGDK(Core i7 4770K).. 1.7秒
DarkBASIC(Core i7 4770K). 1.8秒
JavaScript(CeleronG1820) 2.3秒
DarkGDK(CeleronG1820).. 2.3秒
DarkBASIC(CeleronG1820). 2.5秒
AGK ver1.0(CeleronG1820).. 33.0秒
H.S.P. 3.4(CeleronG1820). 126.0秒 (*1) *New!
JavaScript(PS4Slim). 130.0秒 (*2)
EZ-BASIC(PlayStation2). 227.0秒 (*3)
99BASIC(Core i7 4770K). 330.0秒
99BASIC(CeleronG1820). 463.0秒
プチコン3号(new 3DS LL). 673.0秒
プチコンmkII(new 3DS LL) 20300.0秒 (*4)
プチコンmkII(new 3DS LL) 20500.0秒 (*5)
(*1) H.S.P.、簡易インタープリター言語
(*2) CPUリソース割り当てが極端に少ないか、サブCPU担当と予想される
(*3) SCPH-90000、BASIC STUDIO パワフルゲーム工房、ループ分割
(*4) スケーリングあり、ループ回数を100分の1にして、計測結果に100を掛けたもの、ループ分割
(*5) スケーリングなし、ループ回数を100分の1にして、計測結果に100を掛けたもの、ループ分割 DrawRotaGraphやDrawExtendGraphで画像を拡大するとかなりジャギジャギになってしまうんですけど拡縮のアルゴリズムを変更みたいなことはできないんでしょうかね? SetDrawMode(DX_DRAWMODE_BILINEAR) >232
リファレンスで確認したらまさにそのことが書いてありますね…
ありがとうございます >>232
定数がラベル化されてて覚えたくないっぽい感じでいいなw 初心者なんですけど、メインループ内で音声ファイルをboolフラグ使って再生すると、
音声ファイルが再生終了するまで全体の動きが止まってしまうんですけどこれどうやったら回避できますかね? >>236
if (collision == true) {
PlaySoundMem(Sound_Bar_Handle, DX_PLAYTYPE_NORMAL, TRUE);
collision = false;
StopSoundMem(Sound_Bar_Handle);
}
ちなみにこんな処理です >>238
なんとまあ・・・
ありがとうございました
リファレンスしっかり見てから質問するようにします! ヒカル TV出演「年間5億は稼ぐ勢いですね」
https://www.youtube.com/watch?v=G7qL6ftpets
第1回案件王ランキング!YouTuberで1番稼いでるのは誰だ!
https://www.youtube.com/watch?v=asF2wQ2xhjY&t=61s
ユーチューバーの儲けのカラクリを徹底検証!
https://www.youtube.com/watch?v=FUSb4erJSXE&t=504s
【給料公開】チャンネル登録者4万人突破記念!YouTuberの月収公開!
https://www.youtube.com/watch?v=Y7DAQ0RKilM&t=326s
誰も言わないなら俺がYouTuberのギャラ相場を教えます
https://www.youtube.com/watch?v=E4q-vaQh2EQ&t=118s
YouTuberになりたいのは馬鹿じゃない!YouTuberになる方法
https://www.youtube.com/watch?v=Fr0WXXZRMSQ
最高月収5000万円だとさ。年収じゃなくて「月収」な
おまえらもyoutubeに動画投稿したほうがいい
やろうと思えばスマホがあればできるぞ
最低2年はやらないとここまではいかないだろうけど才能とアイデアと
企画力と継続力があればが大儲けできる可能性がなくもない
まだまだ他の職種に比べれば競争率は低いからオススメ
顔出したくないならラファエルみたいに仮面つければいい UnityやUE4がある今日、DXライブラリで作るメリットってなんだろう?
自分、DXライブラリで開発したいなと思い色々と調べていたんですが、調べれば調べるほど、UnityやUEが出てきてちょっと悩み中です。 PCが貧弱でUnityやUEだと重い、ぐらいかな
今から勉強するならあまりメリットは無いと思う >>243
Unity, UE4 は作者からコードを引き離す方向で進化しているのに対して、
DXlib はガッツリコードを見せた上で分かりやすくという方向で、ある意味教育的なもの。
一度 DXlib で組めていれば GUI ツールでも中身がどう動いているか想像付くので
コードの内容もきっちり学びたければ無駄にはならないと思う。 >>243
俺の場合はVBで使えるからという理由だった >>243
こういう質問する奴はどうせUnity使うんだろw
Unityの方がグラ綺麗だし、アセットストアで何でも売ってる
ふんっ! せいぜいユニティちゃん使ってろよ
ちっとも全然まっっっったくうらやましくなんかねーからw SetCreateSoundDataType(DX_SOUNDDATATYPE_FILE);で音をストリーミング再生するよう設定してるのに
タスクマネージャでディスクの欄を見ていても殆ど0%から動きません
メモリ使用量は1GB→60MBになったのでちゃんとストリーミング再生にはなってると思います
ストリーミング再生はディスクに負荷がかかると思っていたんですが、最近のHDDだと特に問題無いんですか? そら無能じゃなきゃこんな板来ないしこんなライブラリ使わんからな >>242
スマホにパッドがあったのか
嬉しい気もするけど携行性を重視した端末にでかい周辺機器をつなぐって奇妙な発想だな 最近だとレイフォースがパッド対応で話題になってなかったっけ ゲーム作りどころかプログラミング初心者です。
DXライブラリを用いてのゲーム製作を考えているのですが、C++の知識はどの程度必要になりますか?
C++の学習は早々に切り上げてゲーム製作のアルゴリズムやDXライブラリの使い方等を学習したほうがいいんですかね?
ちなみに今はC言語の苦C一通り終わらせて独習C++の半分くらいまでC++の学習を進めてます。 わからないところが出てきたらC++の学習に戻ればいいんじゃない >>256
ではある程度C++について学んだ後はさっさとゲーム製作の学習に入っておkってことですかね?
ゲーム製作で必要になる主なC++知識って何なんでしょうか >>258
いやいやあんまりからかわないでくだしあ…
C++のクラスなんかの知識は必要だと聞いてます C++ってやや低級気味な言語だしオブジェクト指向なんかガン無視でフォートランみたいなコード書いても何も問題ない DXライブラリ使うならC++知らず、C言語の知識のみでも何とかなりそう そもそもCで出来なくてC++で出来ることってクラス以外に何があるんだっけ 分かって使うなら C++ の方が便利機能があるのできれいなコードが書けることが多いけど
知らないで無理に C++ を使うととんでもないコードができるので、それなら素直に C で書いた方がいい。
あと C++ クラスでデータ管理していて DXLib に渡すときに無茶なキャストをかけるとかいらない操作をあれこれしそうな予感がする。
>>261 が言ってるとおりコンパイラが C++ だとしても別に C++ の機能を無理に使う必要はないし、普通に C のコードが通る。
それを踏まえた上で C と C++ を比較するなら、
ゲームでもデータの格納、その操作が頻繁に起きるから C++ でクラスが使える点は非常に大きいと思う。
メモリ管理、文字列の扱い、ファイルなどの I/O 操作はどう考えても C++ が楽。
C++ だとループ処理もイテレータを使えるのが大きい。かなりすっきりする。
本当は例外が扱えるのも大きいけど DXLib 使うならライブラリ側の戻りを見とけばいいから余り問題はないか。 ●●●ケネディ大統★領は何故、死なねばなら★なかったのか?●●●
http://jbbs.livedoor.jp/bbs/read.cgi/study/3729/1226114724/53
この掲示板(万有サロン)に優秀な書き込みをして、総額148万円の賞金をゲット★しよう!(*^^)v
http://jbbs.livedoor.jp/study/3729/ →リンクが不良なら★、検索窓に入★れる! >>264
詳しい回答ありがたや…
C++の知識は正しく用いるなら便利だけど必須ではないという認識でよろしいですかね。
とりあえずC++のクラス全般について一通り学んだらDXライブラリとかゲームプログラムの勉強に入ろうと思います。
他の方も回答してくれた方ありがとうございました
また何かあったら質問するかもしれませんがその時はよろしくお願いします ジェネリック・プログラミング
処理の抽象化
デザインパターン
アルゴリズムによる計算量の見積もり。
N に比例する、線形探索をしない。
ハッシュ O(1)、2分探索 O(log N)
Boost >>267
役に立たないとは言わないがプログラミング技術が好きな人向けで
ゲーム作る事と乖離してる 計算量くらいは意識しないとまともなゲーム作れないだろ ループ条件分岐さえあれば組めないプログラムなんてないんやで 職業プログラマじゃないんだから、まずは動くもんが作れればいいんだってば。
それで遅かったらもっと勉強していい方法見付ければいいわけで。 個人製作レベルの小さなゲームだとオブジェクト指向の概念自体いらないっちゃいらないとは思う
でもわかりやすく作る武器としてC++を覚えたいなら
個人的な現状の感想を書いてみると
・いる
クラスとオブジェクト指向の概念、継承、包含、コンストラクタ、getterとsetterの概念、仮想関数(抽象クラス、多態性)
・いらないんじゃね?
テンプレート、演算子のオーバーロード、標準ライブラリ(std::vectorはあってもいいかも?)、多重継承
ゲーム作る上ではこんな文法より当たり判定とか回転とかのアルゴリズムの方がよっぽど大事ってのは思う 重要なのは何を作るか詳細な挙動やパラメータまで考えることだろ
技術的なことはいざとなったら誰かに相談すれば済む クラス(構造体+メンバ関数)と継承は知っといた方が得だと思う
std::vectorは超絶におすすめ
変なエラーやバグ(配列の不正アクセス)が無くなる
多態性とかテンプレートは、二作目作るとき等に勉強すると「こんな便利な方法があったのかー」と感動するし、理解しやすい >>272
いる項目の半分くらいはまだ未習ですね…
当たり判定とか回転とかのアルゴリズムってどこで勉強すればいいんですかね?
定番の参考書みたいなのがあったりするんでしょうか
>>275
クラスはある程度文法学習し終わりました
std::vectorはなんのことかさっぱりです 当たり判定は別にいいんだけど本当に難しいのは判定後の反発、押し出し処理
いまだにメーカーごとに意見が分かれる部分 有名な物理エンジン使ってるゲームでも
めり込んでおかしな動きしてることあるからな >>278
Colision detectionで一発解決
そう、unityならね(´・ω・`) >>279
まじか
よくわからなくなってきたので中途半端でやめずにとりあえずC++を一通りやってからゲーム制作勉強します… いくらC++を勉強したところでDXライブラリはゲームエンジンとしての限界点が低いから
とくにグラが汚いから覚悟しておくことだ
最新の C++ 11 できっちり組んだとしても、遊ぶ人から「これレトロゲーム?」って言われる(笑) デフォのトゥーンは輪郭線が綺麗で好きだな
いくつかトゥーン作ったけど結局デフォに落ち着いた javaやC#の標準ライブラリですら
rectangleクラスのintersectで簡易当たり判定は楽にできるみたいなんだよね
思想の違いだとは思うがゲームライブラリならそれくらいあってもいいとは思った MFCにCRectクラスのIntersectRectがあるよ
まあしかし四角の当たり判定がないくらいで不便って言うのなら c# に乗り換えたほうがいいと思う
c++は全般的に使い勝手あまりよくないから そういえば3Dの衝突判定機能はいくつかあるけど2Dは無いんだな pythonで入力ゲームを作ってます。
DXライブラリの、
VisualC# 用パッケージ
で、ゲームパットは正常に動きますか?
pygameのゲームパットが難しいので、そちらが使えたら使おうかと思いました。 普通に使えた。
32bitだから64bitにしたらの不安が有ったけど、心配し過ぎでした。
お騒がせしました。
どうも、です。 リファレンスのTellMovieToGraphのサンプルを参考に
LoadGraphでaviファイル読み込んでDrawGraphで映像を描画するプログラムを試してみたら
タスクマネージャで確認したところ動画の再生中はディスク使用量が常に100%近くなってしまうのですが
これはそういうものなんでしょうか? DXライブラリを使ってC++で
アドベンチャーゲームを作ろうと思っています。
今時のノベルゲームでは無く、ファミコン時代のアドベンチャーゲームです。
今まではアクションゲームやシューティングゲームを作って来まして、
アドベンチャーは初挑戦なのでちょっと不安なんです。
企画だのシナリオだのの前に、まずはシステムや
アドベンチャーゲームを構成するプログラミングから考える必要がありますよね?
しかし、現段階でそれらを考えると、完全に独学のオリジナルになり、
凄く面倒なものを完成させてしまうかもしれません。
自分としては、ひな形とまでは言いませんが、
参考にできるものや、定石を学ぶ方法を模索しております。
なにかありませんか?サイトでも書籍でも構いません、教えて下さい。 githubにソースコード公開して作りながら適度に聞けば? >>294
ありがとございます
ただ、自分はどっちかっていうと
考え方を知りたいんですよ
アドベンチャーゲーム制作する上での
フラグの考え方や、変数の使い方です。
考えてみると、アドベンチャーゲームって
フラグめちゃ必要じゃないですかね
例えば、調べる項目が増えていくじゃないですか、
話すで選択できる相手とかも。
そして、キャラの台詞も、
質問二回目、三回目で返答内容変えたり。
そーいうの、どう考えて組み立てていけば
いいのかなって、、 RPGのイベントも話しかける相手や時期、話しかけた回数とかでサブイベント分岐させたりするじゃん
アドベンチャーゲームだからって専用の特殊な考え方やフラグ管理って必要ないと思う 定石は無く、ゲームの仕様それぞれに合わせて考えるしかない
仕様が複雑ならより汎用的でいちいち面倒くさい重厚な構造になるし、
仕様が単純なら多少ごり押ししたような方法で手早く必要条件を満たす
そう、答えなきところに答えを出すのがゲームプログラミングというものだ >>296
アドベンチャーゲームプレイしたことある?
ノベルじゃ無くてさ。
各シーン(場所)で出現する項目数も決まって無いし
その項目数もある項目を通過するたび項目数が増えるし、
その項目だって、何層もあった先の項目だったりする。
それが各シーンで統一できない状態なわけで、、、、
RPGなんかのフラグと同じじゃない、そんなシンプルに出来ない。
>>297
やはりゴリ押しかあ、、、、 場面ごとに専用のフラグや処理を作ると考えるんじゃなくて
進行フラグや取得アイテムに応じて出す選択肢を変えると考えるんだよ
なので仕組み的にはRPGとかと同じと言える
あとはスクリプトデータのフォーマットとか作り方の問題なので
それこそノベルゲームエンジンを参考にすればいい ゲームの詳細が決まってないような段階で
プログラミングを抽象化するのは無謀な上に当事者は歴戦の勇士でもないという
それならいったんごり押しからの脱構築しかあるまい
そうやって作られたサンプルは動く仕様書として人に意見を聞くにも役に立つ >>298
>RPGなんかのフラグと同じじゃない、そんなシンプルに出来ない。
アンタの作ったRPGってちょっとした分岐も無い完全一本道でつまんないレールプレイングゲームになりそうだな フラグはDBにまとめれば管理手段はどれも共通にできる
sqliteあたりを一通りさわれば可能性を感じられるかと フラグ・クラス(というかセーブデータ・クラス)を作って、シリアライズ・デシリアライズする方法が楽だな
C#のシリアライザーやUnityのJsonでクラスがあれば、クラスまるごと簡単にファイル保存・読込できる
フラグがいくつ増えてもセーブ・ロードのコーディングしなくていい 俺が書いたプログラムを毎回ウイルス扱いして止めようとするのはやめろノートン! 簡単にお金が稼げる方法興味ある人だけ見てください。
グーグル検索⇒『来島のモノノリウエ』
YF53OEVNGR GetUseDirect3D11Device
GetUseDirect3D11DeviceContext
なんでも出来るぞ ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ fpsの表示なんて、いるかあ?
こんなしょぼい機能を追加してしまうところにDXライブラリの作者のやる気の無さを感じるわ iOS版作ってる最中みたいだけど
iOS程度じゃやる気無しか >iOS版作ってる最中みたいだけど
そりゃすごい、こういうのを期待してるんだお Unityのfps表示のアセットを見ればわかることだけど、
ひとりのユーザーがfps表示のコンポーネントを公開すればみんなでそれを使えるようにすべきなんだよ
わざわざゲームエンジンに機能を追加しなくてもね
ひとりのユーザーが便利なコンポーネントを公開すればみんなでそれを使う
ということができるようにDXライブラリはもっとコンポーネント指向にして欲しいよなぁ
そのへんがもう遅れてるし、ユーザーも増えないし、コミュニティも育たない原因の一つだね ゲームエンジン界隈でいちばん育ったコミュニティはUnityでしょ
アセットストアやgithubなどに新しい機能や素材がたくさんあって、
そこから新しいユーザーが増えたり、ゲームが高品質・短時間・低コストで作れたりしてる
そういう人や素材の多さを見てさらにユーザーが増えるような好循環がある 設計思想が全然違うものを引き合いに出されてもな
ユーザも古いライブラリの割には居るし DXライブラリは管理人さんがこまめに更新、デバッグしてくれてるから
公式のファイル落とすだけで充分なんだという安心感があるのが逆に良い点だと思う
ユーザー同士のそういうやり取りには
公式本体ファイルのアップデートで使えなくなるのとか
組み合わせの相性が悪いのとかが出てきてもめんどくさいし
「こんな機能が欲しいです」→「○○で出来るだろ」→「どこでDL出来ますか?」
の流れが頻繁に出るのもうざいし、時間がたって消えたファイルの再Upクレクレもうざいじゃん
ユーザーを気にかけててこまめに更新を続けてくれる作者が居るコミュニティの場合
作者の独裁体制の方がユーザーは幸せだし、新規も入りやすいよ
逆に放任のところはユーザー同士の交流が活発な方が良いけどね いいライブラリだよな。
他言語用に移植されても良さそうなもんだが。 素晴らしいライブラリだと思うよ。
ここまでやって欲しくてこれ以上踏み込んで欲しくないラインがわかってる。 Unityと比べるとblenderと親和性が良くない
逆にMMDやメタセコは良い
日本的なんだけどやはりUnityと違って世界には広まらない まあ確かに世界に広まってユーザーが増えれば
今後もずっと使えるだろうって安心感も増えるよな 同じとこに這い寄ったって劣化版と見られるだけだべ
オンリーワンの強みを持てばいいのよ 2Dゲー作るのにわざわざUnityなんて面倒なだけだし
ゲームの動作も重いからなぁ 2Dゲー作るならDXライブラリの方が向いてるよな。
無駄な裏処理が少ないし
メインループ動作の基本的な考えやFPS固定前提でのエンジンなところも。
逆にDXライブラリで本格3Dゲー作ろうとは思わないけど。 >>218
ものっそい今更なんだけど
gifはムービーファイル扱いでロードするとアニメーション再生できたはずよ
過去スレで教えてもらったことがある unityなんか素材をポンポンドロップしてプレハブ化してそれを呼び出すだけよ?超簡単w 簡単に作れる と 自分の思うように作れる は全く違うからね VisualStudio Express 2017には対応しないのかな?まあ2015でも別にいいんだが いつの間にかMMDのアニメーションのfpsを変えられる関数が追加されてるな
前はMMDとDXライブラリはfpsが30倍違ったからモーション合わせるのが少し面倒だった DXライブラリにもアセットみたいのがあればと思ったけど
ハイレベルなシェーダーマップやfbxに対応してない低レベルモデルしかサポートしてないし微妙だな ゲームのレベルが低いうちはDXライブラリみたいな縛りがゆるくて自由に何でもできるゲームエンジンが優勢だったけど
わりと最近の、高度化されたゲームが増えるにつれて
ほかの人がつくった高品質・高機能なアセットが使えるゲームエンジンが優勢になっちゃった感じはする ガワだけちゃっちゃと取り繕えるほうが今のトレンドにあってるからねえ
DXライブラリの本分とは別世界だわさ DXライブラリって元々2D専用で3Dはあとから要望で付けましたみたいなイメージある
3dゲーム作成はプログラム以外も大変だし手軽でクオリティ高くつくれるほうが今時XPみたいな低スペで動く軽さよりも魅力
あと利用規約とかいろいろみると結局物理エンジン自分で実装したりボーンいじるハメになるから全く個人制作向けではない DXライブラリで 3D が出来るなんてただの都市伝説ですよ シェーダ書くのは構わないんだけど自作モデルのメッシュ割りが下手でシェーダが活きない
モデリングセンスの壁ってあるよな
ついでに音楽センスも終わってるから作曲もやべえ 全部勉強して作ってたらゲームなんて作れない、っていうか何したいか考える時間すらなくなると思うんだが コード書くのは苦ではないし数学も物理学もその辺の工学部の学生程度にはあるんだけど
イラストとか音楽とか未知の世界すぎて戸惑ってるわ プログラマはシンプルが美徳だけどキャラデザは真逆だしな
マグカップとティーカップくらい価値感が違う キャラデザもシンプルだよ
大ヒットするヤツは特徴がハッキリしていてデフォルメが効いて真似しやすい だいぶ手こずったけどDXライブラリとLive2dを一緒に使えるようになったぞ
情報少ねー 陽炎エフェクトやろうとあれこれ検索したら
Blender 陽炎・排気熱エフェクト - YouTube
ttps://www.youtube.com/watch?v=gubB4QkwnJo
まともなのはこれしかヒットしなくて。
とはいえ、これってDXライブラリに応用できますかね?
フィルタとマスクを重ねる・・・歪みってどう作れば良いんだろ。 Shader使えばできるだろうけど、DXライブラリはShaderの機能が貧弱なのであまりオススメしない
DXライブラリはグラフィック機能全般がはっきり言って貧弱&時代遅れだから
グラフィック処理を凝るようになったら難易度ベリーハードになってまうで・・・
もっとグラ強化してくれたらいいんだけどな ケースバイケースでしょ。
同人レベルじゃ第一級レベルエンジン云々はさほど重要じゃない。 ケースバイケースっていうけど
陽炎エフェクトつくるくらいで限界がくるようではなぁ そーなのかー。
GraphFilter()辺りを何度か読み直していたんだけど、『これって指定したハンドル全面に作用するよね』と頭抱えていたのです。
そのまんまは無理でも、何か似た効果で違う方法を知恵絞ってみます。
ありがとうございました。
それとお詫びです。
3Dをサンプルに出しましたけど、2Dオンリーで考えていましたm(__)m
書き漏らしました。 困った時は素直に管理人に直接言ったほうが良いと思うな
DXライブラリでDirectX並のことして自己解決するのは本末転倒だし
DXライブラリユーザー全体にとってもためにならない 手書き済むものをエフェクトエフェクトってバカじゃないの? 書き込むなと言ってるだろう!
わかったら返事をしろ! >>357
ある程度要望がまとまったら、管理人様に要望出すのが貴殿の言う通りLIBと皆さんの為だとも思うのだけど、
> 現在 iOS対応の作業をしているので、大きな機能追加は、機能を追加するかどうかの検討も含め
> すべて iOS対応の後となってしまいます( 半年〜1年後 )、すみません m(_ _;m
3/18日頃のレスを見るに、当分無理そうだ・・・。 シェーダーとか自動でやって欲しいような方向性ならDXライブラリはそもそも向いてなくね?
処理が軽くてブラックボックスになってなくて基本全部自分で触れるのが長所なんだから
あれこれ機能拡張を要求するのはそもそも趣旨が違うんじゃないのと。 DirectXって初期設定とかOSのバージョン違いの誤作動とかめんどくさいから
そのあたり任せられるだけでも助かるけどな 個人的にはウインドウ作る基本的なとことかDXアーカイブだけでも十分ありがたい 逆をいうとそのあたり以外はいらないんだよな。
とにかくハードウェア的な部分や初期設定関係以外は基本、DirectXの関数だけでいい。
あとは余計なことせずに処理が軽いことが一番。現状でいいよ。
あれもこれもと盛ってUnityみたいにならなくていいよ。 大きなフレーム持ってるツールは学習コストがそれなりにかかるらね。
同人や個人制作あたりだと結構あの手のツールは段取りに時間かかる。
実際、DXLIBってそういう位置づけのものだと思うよ。 自分はどっちかといえばunity目指してほしい
上級者の玩具にするとDXライブラリの意味がなくなる Unityの方が上級者(or情弱)向きじゃね
そもそもコミュニティの規模が違うんだからDXlibにUnityライクを求めるのは間違い >>369
Unityの開発何人いると思ってるんだよ。
DxLibはライブラリ。ゲーム開発ツールじゃない。 でもバグっぽいことを掲示板で聞くとすぐ返事返ってきて修正してくれたりするからすごいよね… 明らかにライブラリのせいじゃないクソみたいな質問にもちゃんと答えてるの凄いわ
俺ならキレてる あれは偉いよね。人間ができてるよ。
俺があの馬鹿みたいな質問の連続くらったらやっぱりキレてると思う(笑) 心配しなくてもお前らじゃあんなの作れないから、いらつく心配なんかしなくていいぞw サポートに時間かけて逆に開発が遅延してるけどな
スマホ対応おそすぎどんだけ遅れればいいんだ 他のゲームエンジンの後追いじゃなくて別の新しい方向に向かってもよかったかもね >>378
文句があるなら自分で作れよ。
完全にボランティアでやってくれてるんだぞ。 369 名前:名前は開発中のものです。[sage] 投稿日:2018/04/13(金) 13:56:40.97 ID:Q35NURll
自分はどっちかといえばunity目指してほしい
上級者の玩具にするとDXライブラリの意味がなくなる
こいつ利用者で一番馬鹿だわ てか、それが人一人ができる精一杯の限度だろうなあ。 今のゲームが当たり前に実装する物理レンダや物理演算は
ラッパーライブラリじゃあ実装できない
Direct Xのラッパーライブラリ作れば時代の最先端だったというのはもうずっと昔の話でしょ
過去の成功体験を忘れられないってか老害よな それらが出来ないライブラリのスレに居座る老害が何いってんだ
乞食らしくUnity(笑)でも使っとけ >>387-388
お前らはそこでUnityやUE4への批判をしてしまうところがよくない
DXライブラリでも面白いゲームは作れる!と熱っぽく語るべきだろ
DXライブラリが本当にダメみたいじゃないか スーファミレベルの2Dゲームが作れれば満足な俺みたいなおっさんには
今のゲームが当たり前に実装する物理レンダや物理演算なんぞ要らんのです >>398
ゲーム制作ツールとライブラリの区別もつかないとか
先に病院で頭見てもらうべきなんじゃないの? 2D作るにしても物理演算はあった方が便利っしょ。box2dくらいは使えるようになった方がいい。 俺は物理演算いらんけどなあ。自前で組んで調整した方がいい動きになると思う。 とある意見「Box2Dぐらいは使えるようになった方がいい(便利だし開発が楽だから)」
とあるマゾ「俺は楽したくない変態だから物理演算はいらない。他の人間もそうあるべき」
俺「開発の効率を上げるのを拒む人間って害悪だよなあ。真空管でパンチカードでも通してろよ・・・」 >>394
その人にとって不必要な機能が追加されることは開発の効率を上げることに繋がらないどころか
その人の必要な機能に対して公式のサポートの手が回りにくくなることから
その人にとっては開発の効率が下がることに繋がるってことを理解しようぜ
機能はあればあるだけいいってもんじゃない、必要な機能だけあるのが一番いい
必要な機能は人それぞれ >>394
同じCライブラリなんやから自分で組み込みゃいいでしょ。
何いってんの? 自分で組んでbox2Dより洗練された高速演算のライブラリを書けるならまあいいけどさ
物理挙動は入れずに衝突判定だけ取ることも出来るんだよ。そこに使うだけでもめっちゃ楽。 衝突判定作るのってそんな大変かね
丸と四角と線分くらいで十分でしょ >>395
うーん、とりあえず君はプログラム云々以前に日本語を勉強すべきかな
日本語も満足に操れない人間がプログラミングなんてちゃんちゃらおかしいよ 資本力がないとゲームエンジンが開発できなくなったんだよね、今の時代
物理演算、物理レンダ、2Dボーン、タイルマップエディタ、シェーダーのビジュアルスクリプト
こういう「早い」「安い」「うまい」が実現できなければユーザー離れが起きる なんか、ここ、プログラムの「プ」の字も知らなさそうな奴らが多すぎないか? ん、君はプログラマーか?
最近はタイルマップエディタとかビジュアルスクリプトが普通に使えるようになったから、
プログラマの負担が減らせるわけで、それはいいことなんじゃないの
(DXライブラリではよく知らんが、少なくともUnityやUE4では) >>402
少なくともここ数レスで君が一番アホっぽいよ?w 無駄なものを無駄と判断して切り捨てる能力こそシステム開発において至高
キャラを動かしてるだけで気持ちイイという操作感を追求するのなら物理も有益 >>405
そんな、図星を突かれたショックと悔しさを前面に出したレスをしなくても…… >>406
方向キー入れた瞬間から等速直線運動スタートしてくれた方が気持ちよくない?
確かにキャラが歩きだす時は加速度運動するのが物理的に正しいけど咄嗟の回避とか間に合わなくてストレスあるね >>408
誰かと勘違いしてるのかな? 謝らなくていいからキチガイは病院へ行こうねw >>410
煽られてキレて顔赤くするくらいなら煽らなきゃいいのに
煽らなかったら煽られないんだよ?わかる?w 話が見えないんだけど、なんで>>402は突然このスレの住民に喧嘩売りだしたの?
誰かいじめた? IQ200の私にもわからん難問だな。
言えることはそっとしとけと言うことだ。 このスレのレベルが低いのはわかりきってるのになぜわざわざ言葉に出すのか・・・・ ググったら本当に苦いらしいな
印象論だと思ってたわ >>421
さあ、クソの役にも立たないゴミみたいなマウンテンゴリラレスはやめて
人の役に立つレスをしようぜ ライブラリ公開してくれよ。
車輪の再発明は辞めたい。
勉強にはなるけど。 最新のハードに対応するのはいいが、
グラフィックがもう10年前くらいの旧世代なのをなんとかしてほしいな
シェーダー使えないとか、HDR対応してないとか
形だけ対応して中身がついてきてない感じだ ジオメトリシェーダとハルシェーダが使えないのは別に文句ないけど
technique使用不可なのは地味にイライラする DXライブラリのシェーダーまわりはそれだけじゃないつーか
DirectX9とDirectX11でコーディング方法が違ったり、
Android版ではそもそもシェーダー使用不可能だったり、
2Dスプライトの表示にシェーダー使えなかったりして
あれもないこれもないって感じになっちゃうなぁ。まあそういうのがいらない人向けなんだろうけど VRoidのVRMファイルの読込に対応しようとしたらマテリアルが物理レンダのパラメータで
DXライブラリだとVRMファイル読込むのは難しそうだ
物理レンダ対応してくんないかな DxLibのシェーダーのSamplerで、テクスチャごとに違うフィルタリングモードでSamplerを作りたいんだけど無理かな?
プログラム側でSetDrawModeで設定したフィルタリングモードになっちゃうんだけど 未だにMMDとメタセコだから
VRMファイルはナウでヤングすぎる 時代に遅れすぎた理由は、アセットストアがないせいだな
いまだにアセットがひとつもないのは、アセットおじさんも真っ青だわ DXライブラリでようやく地面モデルと線分の当たり判定つけられた
そこに主人公モデルの位置を同じにした
まだモーションつけてないから
主人公が棒立ちのまま移動した
坂道登れるだけで感動した(小並感 DXライブラリって世間的にはゲームエンジン扱いなのな >>439
多分そこが一番誤解されやすいとこだよな。
基本はDirectXで自前で全部作りたいけれどめんどくさい設定周りだけはやって欲しい人向けのお助けラッパーだよね。
そこにDirectX以上の機能はいらないし。今の状態で十分。 「各種ゲーム用エンジン紹介」みたいなところで触れられる分には「そんなもんか」って感じだけど
「ゲームエンジンを使っている」カテゴリの中にDXライブラリ製ゲームが含まれるとあれ?って思う
自分でも基準がよく分からない 教えてほしいんですが
int fp = FileRead_open("csvファイル");
この場合、fpにはcsvがそのまま入ってるという解釈でいいですか?
つまり、ifstream ifs(fp);が可能になるのかが知りたいです。
ifstream ifs(FileRead_open("csvファイル"));は無理ですか?
なんでこんな面倒なこと考えるかというと、
archive化したファイル内のcsvを読みたいんです。 >archive化したファイル内のcsvを読みたいんです
厳密に言いますと、
ifstream ifs();で読み込んで
string buf[要素数];
while(ifs && getline(ifs,buf[line])){
line++;
}
とbuf[]に一旦、そのままcsvの中身を格納したいんです。
普通なら、
ifstream ifs(csvファイル);で問題ないじゃないですか?
でも、そのcsvがarchiveしたファイルから読み込む場合
ifstream ifs(csvファイル);だと読み込みません。
そこでFileRead_openを使うわけですが、
自分はどうしても
ifstream ifs(csvファイル);
string buf[要素数];
while(ifs && getline(ifs,buf[line])){
line++;
}
の流れで利用したいんです。
なので、ifstream ifs(csvファイル);に来る前に
FileRead_openを使い終わらせ、
あとはFileRead関数系を使わなくて済む様にしたいんです。
、、伝わりますか?僕の言いたいこと。。 archive化したテキストファイルは改行コード\nが消えたバイナリファイル化してるから
最初にファイルサイズを計って1行ではなく全部をchar[filesize]に読み込むしかないんじゃない? >>444
>archive化したテキストファイルは改行コード\nが消えたバイナリファイル化してるから
え、それ本当ですか?
>最初にファイルサイズを計って1行ではなく全部をchar[filesize]に読み込むしかないんじゃない?
すみません、もう少し具体的に教えてください! >>445
ファイルサイズが1000なら
char t_data[ 1000 ] にファイルのデータを格納する
で、後は添え字で任意のデータにアクセスする >>445
2chは長い行で書き込めないのよ
string all;
char* path = "./hello.csv";
int size = (int)FileRead_size( path ) ; // 1char = 1byte
char* buffer = new char[size];
int id = FileRead_open( path, false ) ;
FileRead_read( buffer, size, id) ;
all = buffer; // copy to string
delete[] buffer;
FileRead_close(id);
// allをcsvのrow(\r\n)とcol(,)でパースする。csv書式の不正チェックとか丁寧にやると長くなるので以下適当
string csv[ROW][COL];
string tmp = "";
int x = 0; int y = 0;
for(int i=0; i<all.length(); i++){
char c = all[i];
if(c == ',') {
csv[y][x] = tmp; tmp = ""; x++;
} else if (c == '\n') { // 本当は\r\nの2つで改行なんだけど
csv[y][x] = tmp; tmp = ""; x = 0; y++;
} else { tmp += c; }
}
csv[y][x] = tmp; // 最後の一個
文字列(string)から数値(intとか)に変えるときはatoiじゃなくてstrstreamだかを使うとよい 追記
csvファイルの最後に無駄な改行がついてたりすると配列のサイズ超えたりしがちなので注意 さらに追記
csvの最後ってヌル文字で終わってないだろうから自分で足したほうがいいかも
string all;
char* path = "./hello.csv";
int size = (int)FileRead_size( path ) ;
// '\0'が無い文字列char*をstringに渡すと長さ不定でまずい
char* buffer = new char[size+1];
buffer[size] = '\0';
int id = FileRead_open( path, false ) ;
FileRead_read( buffer, size, id) ;
all = buffer; // copy to string
delete[] buffer;
FileRead_close(id); Cは文字列処理が弱いからCSVParserを書くのも一筋縄にはいかんよ そしてCSVの仕様を調べて、予想以上に面倒くさいことを知る 「,」じゃなくてTABスペースで区切るとか
「'座標(x,y)'」みたいにシングル・ダブルクォーテーションで囲む「,」を含むセルだとか
CSVも奥が深い ヘッダにコメントにセル内改行に空白セルに非固定列数に…
あれやこれや対応させると面倒なので、仕様はExcel出力版に決めうちとかしちゃう
それでいてExcel経由でもやり方によって微妙に違ったりするけど Excel出力でも小数点の区切りがカンマな国とかあって地獄絵図なんだよなぁ ワロタw
そもそも「小数点の区切りがカンマ」って別に変な日本語じゃないと思うけど? 「(整数と)小数の区切り記号がカンマ」か
「小数点という区切り記号がカンマ」かってとこじゃない?
まあいずれにせよ通じる内容、普通に見落としちゃうレベルではある >>460
投げ出していません。
>>448さんのせっかくのソースがちょっと複雑で、、、
言葉でなにをしなければならないのか、アドバイスほしいです。
要は、
archive化したテキストファイルは改行コード\nが消えたバイナリファイル化してるから
普通にCSVを開くプログラムを書いていると
archive後、正常に読み込まないってことですよね?
ということは、バイナリ状態のCSVを読み込むプログラム文を書けってことですか?
でも、それだとビジュアルスタジオ上のデバッグプレイじゃ
バイナリ化してないcsvなんでエラーが起きますよね?
だからすごく困っています。
どうすればいいのか >>461
>>でも、それだとビジュアルスタジオ上のデバッグプレイじゃ
>>バイナリ化してないcsvなんでエラーが起きますよね?
何を言っているのか分からん
デバッグモードだろうがバイナリ形式のファイルを読み込むプログラムを書けばバイナリ形式で読み込むし、
テキスト形式を読み込むプログラムを書けばテキスト形式で読み込むでしょ >>462
えっと、自分の知識不足かもしれませんが
普通に数字と「,」だけが詰まったcsvファイルを用意していても
バイナリ形式で読むプログラムを書いていれば
バイナリ形式で読むってことですか?
バイナリ形式で読むプログラムを書いた場合は
用意するファイルもバイナリ形式で保存されたファイルじゃないと
ダメなのかなと思っているんですけど。 >>463
そもそも上の方に書いてあった
「バイナリ形式は改行が削除される」っていうのが表現として適切じゃないな
改行コードを改行として認識するのがテキスト形式
改行コードをそのまま文字の羅列として認識するのがバイナリ形式
テキスト形式のファイルをバイナリ形式で読み込んだら
そのテキスト内の改行コードがそのまま文字列として読み込まれるだけ 1 複数データを一つにまとめたい(暗号化したい)
2 読み込みプログラム(csvパーサー?)は既存のものをそのまま流用したい
ってことなのかな……
>>444,>>446,>>448のキモは、DXアーカイブファイルを一本のchar配列に読み込む(バイナリデータとして扱う)という部分なので、
結局DXアーカイブもifstreamも関係なくて、char配列内のバイナリデータを自力で解析できるかという話になる
パソコンで使うデータは全てバイナリデータと言えるので、csvだろうが音声だろうがDXアーカイブファイルだろうが全てバイナリ形式で読み込める >>462
>パソコンで使うデータは全てバイナリデータと言えるので、
>csvだろうがDXアーカイブファイルだろうが全てバイナリ形式で読み込める
その理論だとcsvや音声などの外部素材データをDXarchiveファイルにしたとしても、
archiveする前、つまりはビジュアルスタジオのプロジェクト上で
ビルドして正常に機能してるプログラムそのままでも
archive後も正常に機能するはずではないですか?
もう少し具体的に言いますと>>442で説明しきれなかったんですが
ifstream ifsを利用して、csvの中の数値を配列に入れ込むプログラムを
自分は書いてまして、そのプログラムで問題なく動いてるゲームがあるんですが、
それの完成後にreleaseビルドして、使用してるサウンドやcsvの素材は
フォルダごとarchiveファイル化したんですよ(配布する場合は皆さんそうしますよね?。
そしてexeファイルを実行したところ、画像やサウンドは正常に読み込むんですが、
csvだけ正常に読み込んでくれないんです。
エラーになるというよりは、数値を正しく読み込んで無いようで、配列を利用した背景画像が
バグります。
例えばそこで素材をarchiveファイル化せずに、素材が入ったフォルダをそのままで
利用すると画像やサウンドはもちろん、csvも正常に読み込み、ゲームも正常に動くんです。
なので、私は、こう思ったわけです。
「csvについては、archiveファイル化すること前提にしたプログラムを組まないと
正しく読めないのかな」と。
それで、「FileRead_open」を使わないとダメなのかなと。
archiveファイルのcsvを読み込む場合、FileRead_openを利用しろと言われたことがあるので。
でもあなたの話を聞いてたら、違うのかな、とか。。。 >>466
アーカイブは言わば「バイナリ形式」のファイルでしょ?
「テキスト形式のファイルを読み込むプログラム」でバイナリ形式のアーカイブを読み込もうとしてるからバグってるんじゃない?
123
456
789
上記のファイルがあったとして「1行読み込む」関数を使った場合
「123」「456」「789」って読み込むだろうけど
アーカイブ化(バイナリ形式)すると「1行読み込む」関数を使うと
「123\r\n456\r\n789」みたいに 一つの文字列として全部読み込むから数値が正常に読み取れてないと思うんだけど まず、DXアーカイブファイルは全部のファイルを無理矢理合体&暗号化した完全独自形式のものなので、基本的にDXライブラリが用意した専用の関数でしか読み込めない
画像やサウンドはDXライブラリの読み込み関数を使うから、何もせずともDXアーカイブファイルから読み込めるようになってるんだよ
LoadGraph等には、内部的にFileRead_openが入ってるので、元のフォルダだろうとアーカイブだろうと読み込める
ただ、暗号化されてない場合に限り、小細工を弄すればバイナリファイルとして直接読める。(フォーマットを理解して自力でポインタ移動する必要がある) 上でみんなが説明してるのはこれ
これまでのやり取りを見る限り、バイナリファイル云々は今の君の知識で理解するのはたぶん無理なので、DXライブラリの関数使って地道にがんばったほうがいい
というかなぜFileRead_openを拒むのかがわからない…… 呼び出し LoadData(int,int,string);//縦、横、csvファイルパス
void LoadData(int y,int x,string s){
m_line = y; m_col = x;
int line = 0;int count = 0;int sum = 0;int nokorinoketa=0;
ifstream ifs(s);
string buf[3000];
Map.resize(m_line);//resizeで行数を決める
for(int i = 0; i<m_line; i++){Map[i].resize(m_col);}//resizeで各行の列数を決める
while(ifs && getline(ifs,buf[line])){line++;}
for(int line=0; line<y; line++){
for(int col=0; col<x; col++){
if(col < x-1){
sum = buf[line][count]-48;
count++;
while(isdigit(buf[line][count])){
sum = sum*10 + (buf[line][count])-48;
count++;}
Map[line][col] = sum;//Noが格納
count++;}
if(col == x-1){//最後の数字
nokorinoketa = buf[line].size()-count;
sum = buf[line][count] - 48;
while(nokorinoketa > 1){
count++;
sum = sum*10 + (buf[line][count])-48;
nokorinoketa--;}
Map[line][col] = sum;//Noが格納
}}
count=0;}} 行数制限のせいで見づらいソースになってますが、ご了承ください。
処理内容は引数で配列の縦と横の値と、csvファイルのパスを受け取り、
まず、bufに全部入れてから、map配列に入れていく感じです。
呼び出しはLoadData(4,4,"h/m/data.csv");みたいな感じで書きます。
archiveファイル化しなければ、これで正常に動きます。
>>468
>基本的にDXライブラリが用意した専用の関数でしか読み込めない
>画像やサウンドはDXライブラリの読み込み関数を使うから、
>何もせずともDXアーカイブファイルから読み込めるようになってるんだよ
納得です。それを聞きたかったんです。わかりやすいです。
>>というかなぜFileRead_openを拒むのかがわからない……
拒んでいません。
一応、FileRead_openを>>469のプログラムに組み込んで動くようにしたんです。
問題なく、動きます。それはプロジェクト上で、ですが。
で、やっぱり外部ファイルをarchiveしたら、そのプログラムではうまくcsvを読み込まないんです。
FileRead_openを組み込んだのに、FileRead_openを組み込む前と同じバグの状況です。 だからFileRead_readやFileRead_getsで読むんだぞ
もう一度リファレンスを熟読するんだ あ、ちなみに>>469で利用しているMap配列の要素数は決めておらず、
vector<vector<int>>Map;と宣言しており、
第一、第二引数を受け取ってから要素数を決定させています。 >>471
ちゃんとFileRead_readで読むプログラムに修正しました。
具体的には、
ifstream ifs(s);
while(ifs && getline(ifs,buf[line])){line++;}
の箇所を
int fh = FileRead_open(s.c_str());
while(fh && getline(fh,buf[line])){line++;}
と変更するだけです(この場合は最後にFileRead_close(fh);してます。
これで問題なくないですか?
実際に、visualstudioのプロジェクト上でビルドすると
正常に動いています。
なのに、releaseビルドして、素材ファイルをarchiveした途端
csvは正常に読み込まないんです、、、、ほんと参ってます。。
なにが悪いんでしょう? なぜ、FileRead_openを使ってるのに、
FileRead_openを使ってないときのバグが出るんでしょうか。
でも、archive化しなければ、FileRead_openを使ってるそれでも正常に動くのです。
引数でcsvファイルのパスを受け取っているのが問題なんでしょうか?
でも、利用するcsvファイルがいくつもあるので呼び出し命令の引数でファイルを選択してやらないと
困るんですよね。
もちろん、引数では数値を受け取り、switchで数値ごとにcsvを選択させてもいいですが、、
でも引数が問題では無いとも思うんですよ、、、、、。
なんでなのか、もう何日も悩んでいます。
もしよかったら頭から数字,数字,.....というdataが入ったcsvを
FileRead_openで開いて、配列に入れていくという
シンプルなソースを書いてみてくれませんか?
DXライブラリのリファレンスにはcsvを使ったものが載ってないんですよ、、
なので、見せてほしいです。それを理解して応用させたいので。
お願いします、ほんと凄く困っていまして、、、 良く分からんけど、こんな感じの事がしたいの?
void LoadData( int t_Width, int t_Height, std::string t_FileName )
{
int t_FileHandle = FileRead_open( t_FileName.c_str() );
int t_FileSize = FileRead_size( t_FileName.c_str() );
std::vector< std::vector< int > > t_MapDataVec;
int t_LoadNum = 0;
char t_Char;
//マップの配列を確保
t_MapDataVec.resize( t_Height );
for( int i = 0; i < t_Height; i++ )
{
t_MapDataVec[ i ].resize( t_Width );
}
//正常に1文字を読み込める間、繰り返す
while( ( t_Char = FileRead_getc( t_FileHandle ) ) != -1 ){
if( isdigit( t_Char ) != 0 ){
int t_Sum = 0;
do{
t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' );
t_Char = FileRead_getc( t_FileHandle );
}while( isdigit( t_Char ) != 0 );
t_MapDataVec[ t_LoadNum / t_Width ][ t_LoadNum % t_Width ] = t_Sum;
++t_LoadNum;
}
}
FileRead_close( t_FileHandle );
} >>473
int fh = FileRead_open(s.c_str());
while(fh && getline(fh,buf[line])){line++;}
ん?
FileRead_readとかのDXライブラリ関数じゃなくて
getlineが使われてる様だが?
例えばabc.csvを他のファイルと纏めて
Archive.dxaっていうアーカイブにした場合、
std::ifstream t;
t.open( "abc.csv");とかしたって読み込まないよ
そんなファイル無いんだから
DXライブラリ用のArchive作ってるのに
それを通常の入出力関数で読み出そうとしてるのがバグの原因だよ >>477
>getlineが使われてる様だが?
int fh = FileRead_open(s.c_str());
えっと、まずこれをした時点で、
ファイル内の文字がfhに入ってると思ってるんで
それをgetline(fh,buf[line]))するわけですから
問題ないかと思っているんですが、、私、なにか勘違いしてるのでしょうか、、
>t.open( "abc.csv");とかしたって読み込まないよ
>そんなファイル無いんだから
これはどーいうことですか?パスの表記の話でしたら
ここでは割愛しただけですので実際は頭のフォルダとファイル名と入力してます。
t.open( "フォルダ名/abc.csv");な感じで。
、、そー言う問題ではなくて、archiveした場合
"abc.csv"というファイル名ではなくなるという話ですか??
>>476
まさか、これ、自分と同じことやってるプログラムですか?
まさかこんなに短くできますよ、とかじゃないですよね?
すごく興味深いのでちょっと処理をじっくり読ませて頂きます。 >>477
あ、今気づきました、
自分FileRead_read使ってないですね、、、
FileRead_openとFileRead_readと一緒くたに考えてソース作ってしまってました。
FileRead_openもDXライブラリの関数でそれで開いてるから
DXライブラリArchiveしたファイルを開く問題はすでにクリアしたと。 薄々気づいていたけど、あまりにも基本的なことがわかってなさすぎる
勘違いですらなくて、全くわかってない
int fn はただのハンドル(識別番号)だし、ファイルオープンと読み込みは違うし、アーカイブファイルについても全くわかってないし、その知識でバイナリファイルを理解できるわけがない
あんま厳しいこと言いたくないけど、拾ってきたコピペを組み合わせて作ろうと思わず
c++の基本から勉強して、一文字ずつ自分で打ち込んだほうがいい >>476
すみません、今まで使ったことない関数や表現がありますのでよかったら教えて頂けませんでしょうか、、
自分は今成長したいんで、非常に関心がありますのでぜひともお願いします。
質問1、
if( isdigit( t_Char ) != 0 )
ここの意味は、isdigitで「t_Charの(頭が)空じゃ無いなら」の認識で正解ですか?
判定関数のisdigitを利用したことないもので、、
質問2、
もし1の私の認識が当たっているとすれば
do{ t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' );
t_Char = FileRead_getc( t_FileHandle ); }while( isdigit( t_Char ) != 0 );
ここの条件式は、t_Charの中の文字を読み進めながら
「空の領域になるまで」という理解になりますが、それで間違いないですか?
質問3、
t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' );
すみません、ここのt_Char - '0'の理解ができてないんですがこれはなにを意味していますか?
推測では「,」の場所を判断するために記載していると思うのですが
「- '0'」は文字の0と文字の「,」は同義語ですか?
t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); はなにをしているのか
解説して頂けませんでしょうか、、
4、究極に理解が足りず困っているのが
t_MapDataVec[ t_LoadNum / t_Width ][ t_LoadNum % t_Width ] = t_Sum;
です。
本当に、これは初めて見た表現なんですが
t_LoadNum / t_Widthでなぜその時の行数の添字が割り出せるのか、
t_LoadNum % t_Widthでなぜその時の要素数の添字が割り出せるのか
お願いします、解説を、、、、すごく関心があります。そもそも、誰もが記載するであろう、
for(int line=0; line<y; line++){
for(int col=0; col<x; col++){
の式が無いプログラムで、二次元配列を回している様子が
自分の想像限度外で、もうなにがなんだか。
t_LoadNumの値だけをインクリメントしてるだけでなぜ二次元配列をすべて回すことが可能になるんですか? >>480
経験が浅いのは認めます、、
特に外部ファイルをいじるのと、archiveファイルについてはほんと理解度が低いです。
でも、ここでそう指摘されることも、
また私が質問させていただくことも自分が成長するひとつの事柄にはなりませんでしょうか、、
ただコピペしたいのでは無く、ソースを理解したくて>>481でも質問させて頂きました。
未熟者なのは認めます、疑問に思ったことをまず自分で検索で調べてみての質問です。
教えて頂けないでしょうか。。
正直、DXライブラリのアーカイブを使わなければ
ゲームは動くのですが、DXライブラリのアーカイブでつまずいてしまっています。
releaseビルドしたあとにバグで遊べないのでほんと辛いのです。 >>480
C++を熟知せずとも、便利な関数のおかげで
手軽にゲームを作れる、それがDXライブラリの良さであり、
短所でもあるのだと思います。
画像を描画するのも関数ひとつです。それで表示できるので
つまずきませんでした。
でもmap情報を外部ファイルにして読むことは、つまずています。
厳密にはアーカイブしなけば読むことは成功していますが、、
「お前は基本がなっていない」と言われたらそうなんですが
でもチュートリアル的なブログや参考書でも、ひとつひとつ完全に理解しようとすると挫折するから
今の自分ではわからなくてもとりあえずそうなんだという精神で進めていきましょう的な
助言も多かったです。ぶつかるたびに覚えていけばいい的な、、違いますでしょうか?
ファイルを扱う、バイナリ形式とかは、初めてです。なのでソースも見苦しいです。
でもそんな私でも>>476のプログラムはすごく魅力的だということがわかるんです。
学びたいんです、、簡単な解説でいいので、お願いできませんか? 長い。
【1・2】isdigitが分からないならisdigitについて調べれば?
【3】教科書の最初に載ってるはずだが「'0'」は0という文字そのものを表す
【4】適当に数字を入れて計算してみれば? >>484
【4】適当に数字を入れて計算してみれば?
これ、今やってるんですが、目から鱗です、、、
すごい、添字の回し方、こんなシンプルな表現方法がったなんで
すごい! stA8I9vhさん、天才だ、、参考書やブログで見たことないですよ、
こんな回し方してる人。 >>481の4、まじでやばい質問でしたね。アホすぎる、というか
検証しろって感じですよね。ほんとすみません。
ただ、[ t_LoadNum / t_Width ][ t_LoadNum % t_Width ]では
配列の列数と添字とが同じ値だからこそできる計算式ですね。
ちぐはぐの場合は、やはり
for(int line=0; line<y; line++){
for(int col=0; col<x; col++){
を使うしか無い。
ネットで見たことないのは、
配列の列数と添字とが同じ数にぶちこむケースがあまりないから
ですね、、なんだそういうことか、、、 >>486
やり方としては定番だよ
初心者向けの記事とかだと説明しないだけで >>488
はい、シンプルですごく驚きました。
それに、二次元配列の要素を回す場合は
これが使えるのは両方の値が同じ場合だけですよね?
自分が要する配列は添字より列数が多い場合ばかりなので
この方法は使えない。
要は>>476さんはソースの参考にということで
記載してくれたので、ちゃんと自分のやりたいことに
組み込めってことですよね。 でも少しでも認めて頂けると嬉しいのです。
初心者ですが、昨今ゲーム制作においてもっともポピュラーなUnityでは無く
人口が減少しつつあるC++やDXライブラリでゲームを作ろうとしてる私のこのヤル気を。
まあ、csvのarchiveファイルから読み込む云々でモチベ下がりましたけど
なんで画像やサウンドみたくスムーズに利用できないのか、と
なんら問題なく進められたのに。。
簡単な話、DXライブラリの関数に
getline(識別番号,配列[]))の代わりになるものがあればよかったのに。
引数が違うじゃないですが、どれも。 >>491
この問題を考えているので寝ることができないです
t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' );
これの ( t_Char - '0' ); はなにを表しているんですか?
t_Char - '0'です。
なぜ、文字列の'0'を引く必要があるのか、知りたいのです。 t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); の意味や
'0'がなにを表しているのか検索しようにも
現状のワードだけで検索するのは無理ですよ。。
なぜ俺が長文のプログラムでしていることを
たった一行にできているのか、さっぱりです。 >>476の処理なんですが
二行目のint t_FileSize = FileRead_size( t_FileName.c_str() );
をしたあと、変数t_FileSizeは一切使用されておりませんが
ここでファイルのサイズを得る必要があるのはなぜですか?
どなたかわかる方、解説おねがします。 >>495
あぁごめんね
FileSizeの部分は消して良いよ
あとシングルクォートで囲んでるのは文字を示すよ C言語の基礎ね
で、'0'~'9'までの文字コードの値は順に並んでいる事が保証されてるから
'0'を引くと整数値に変換出来る
'0' → 48
'1' → 49
'2' → 50 //以下略 まあ文字周りのの仕様から考えると決してC/C++的には正しくないんだろうけどな
やっちゃうよな >>496
>FileSizeの部分は消して良いよ
ありがとうございます、FileSize、なぜ読むのか検索したり情報読んだりで
ずっと悩んでいました。必要無いんですね。
>'0' → 48
なるほど、"-48"を>>496さんは"-'0'"で表していたんですね。
勉強になりました。
ご迷惑かけまくって申し訳ありません。
あと、ひとつだけ質問させて頂いていいですか?
FileRead_openでハンドルを取得したあと、
string型のbuf配列を作って、まずは一旦そこに全部を入れ込みたいんですが
「getline(fh,buf[line])」の様な感じで使えるDXライブラリファイル読み込み関数が
判断つきません。もしかして、無い感じですか?
FileRead_getsを使って、
string buf[3000]; 
FileRead_gets( buf,3000, t_FileName ) ;
とか、いけませんか?
私は、一旦buf[]にぶち込んで、
そのあとはもうDXライブラリ関数とか必要無しの状態にして
buf[]の中を回して1文字を読み込んで二次元配列に格納していくって
処理をしたいのですが、、、、それが無理なら
やっぱり、FileRead_getcをつかって
一文字ずつ読んで格納することを考えていこうと思いますが、、 >>498
何回か言われてたと思うんだけど
FileRead_read関数を使えば良いんじゃないの? >>499
DXライブラリのリファレンスページの
「FileRead_read」のサンプルのプログラムは
画像データの取り込みなので
FileRead_read( Buffer, FileSize, FileHandle ) ;
が配列に使えるのか、わからないのです。
int t_FileSize = FileRead_size( t_FileName.c_str() );
string buf[3000];
FileRead_read( buf,FileRead_size,t_FileName );
これでいけますか? STLのstring?
それを3000個も用意する意味ないでしょ
配列やstringが何なのか分かってないとしか
やるなら
char t[ 3000 ]でしょ (要素数は3000から可変にすべきだけど)
FileRead_read( buf,FileRead_size,t_FileName );
何でファイルハンドル指定する第3匹数にstringをぶち込んでるの?
訳分からん事してるよ >>501
あ、すみません。
間違えました。
int t_FileHandle = FileRead_open( t_FileName.c_str() );
int t_FileSize = FileRead_size( t_FileName.c_str() );
string buf[3000];
FileRead_read( buf,FileRead_size,t_FileHandle );
これです。
これなら問題ないですか? string3000個もいらねーって言ってるだろーが!
バッファの先頭アドレスを指定する所にstringの実体を入れてるのも駄目だと思うけど
あと夜遅くてPC使えないとかで手元に実行環境が無いんだったら
使える様になるまで待ってみては?当てずっぽでソースコードっぽいものを書かれても困る >>503
String型(文字列型)とchar型(文字型)と勉強したんで、
csvに入った長い文字列(3,12,43,34,0,32,2,....が数百並ぶとかザラです)を
入れるためにString型を用意したつもりです。
実際、エラーは出ずに今まで動いているのですが、問題になっている理由を
聞かせてください。
char型でも
while(ifs && getline(ifs,buf[line])){
line++;
} 
は正常に動くんですよね?
ちなみに3000というのは、csvの文字列がどれだけ長くても対応できるように、、
と思ってそうしているんですが、、、文字列の量によっては無駄になるメモリもありますが、、
>当てずっぽでソースコードっぽいものを書かれても困る
確かにまだ確認はしていませんが、熟練の方でしたら
どうなるのか、わかるかなと思いまして、、聞いてみました。
(確かにいちいち自分で試せばいいですが、以前予期せぬエラーというか
無限ループとか、そういう危ないエラーを食らったことがあるので
なるべく聞いて確認したい気持ちもあります) 結局、今夜も夜通しで進展せず朝を迎えた。
プログラムとサイトやブログとにらめっこしてました。
外部ファイル扱いの理解度が足りないせいもありますが
一番は、DXライブラリサイトのリファレンスが親切じゃないこと。
archiveファイル読み込み関数でcsvファイルを扱う場合の説明が不十分。
ifstreamやgetlineで問題なく動くプログラムをやっとこさ組めたのに。。
画像やサウンドなんてFileReadで触らずとも、それぞれ描画関数や再生関数で
archiveファイルから勝手に開けるのに、、、なぜリファレンスサンプルに
テキストファイル取り上げないの、、、、、、 C/C++にはString型(文字列型)なんてものは無く
std::stringクラスオブジェクトを3000個も用意するなって事でしょう
基礎の理解がおぼつかないまま先に進もうとしてめちゃくちゃになってる
DXのサンプル無くてもCのfopen/fread辺りのTXT読み込みサンプルを探して試してみて
デバッガで動きが理解できたら対応するDXライブラリのAPIに置き換えればいい >>504
例え話をしよう
新居を購入して、そこに引っ越し用のダンボール箱を3000個 搬入したいとする
※新居はダンボール箱3000個まで収容可能とする
でもあなたは"家"を3000個用意してる訳 おかしい事してるの、わかる?
プログラムでいうと、buf[ 0 ]のstringにデータが入ってて
buf[ 1 ] ~ buf[ 2999 ]は無駄になってる
あと文字列 = stringって思ってるみたいだけど
文字列って要はchar型の配列だから別にstringである必要は無いよ
文字列比較とかするつもりが無いんだったら、
std::vector< char > t_DataVec;で充分だと思うけど >>506
>Cのfopen/fread辺りのTXT読み込みサンプルを探して試してみて
fopen/freadあたりの扱い方が近い、ということでしょうか?
了解しました、一度確認してみます。
>>507
ものすごいわかりやすい例え話でした。。
ありがとうございます、ちょっとそれを考慮して修正してみます。 Ruby では簡単。
Ruby, JavaScript などの動的言語を一通りやっていないと、C などポインタのある言語は無理。
言語の難易度が違いすぎる
# コロン区切りのCSV 入力ファイルを、1行ずつ処理する
input_file = "input.csv"
CSV.foreach(input_file, col_sep: ":") do |row|
puts( row[0] + row[1] )
end >>509
今の話題に関しては、メモリ空間を認識できるかどうかの違いでしか無くね…? >>501さん
>配列やstringが何なのか分かってないとしか
>string3000個もいらねーって言ってるだろーが!
>>507さん
>buf[ 1 ] ~ buf[ 2999 ]は無駄になってる
あのうお二人にお聞きしますが、charかstringのどちらがふさわしいかは、今は置いておいて、
stringだと、buf[3000]も要らないんですよね?
私はbuf[3000]のbuf[ 1 ] ~ buf[ 2999 ]は無駄になってるって話でしたよね?
(私は怒っているわけではありません)
string buf[3000];をstring buf[1];に書き換えたら
ビルド後、エラーが出る様になったんですけど、、
もちろん、string buf[3000];に戻せば、正常に動きます。
どういうことでしょうか。
ちなみに私の作ったソースは>>469なんですが、
string buf[1];にしただけでエラーが出始めるということは
列数が足りてないってこと=[0]からも利用してたってことじゃないでしょうか。
お二人は、ちゃんとソースを理解して、無駄だからやめろ、と
ご指摘してくださったのかと思っていたのですが、、、
私はstring buf[];にcsvの文字を入れ込む必要があるので
念のため3000にして、いくらか余りが出てもいいくらいの思いで宣言して利用してるんで
お二人にご指摘された後、ん〜、string buf[0];でcsv内の文字列が全部格納できれば
世話ないんだけど本当かな〜、ともちょっと疑っていたんですが
先ほど試してみて、やっぱりエラーが出た、とう結果です。
>>469のソースの
while(ifs && getline(ifs,buf[line])){line++;}
ここの部分、このgetlineでbuf[]を使うわけですが、[1]だけじゃ困る、
ということですよね??
[3000]を[1]に変えてエラーになるということは。 完全にスレ違いなので他所に行った方がいい
個人的にはc++の教本を一から読み直すことを勧める。
初歩的なことが全くわかってない、ということをまず自覚したほうがいい あと、すみません>>476さん、
昨日からずっと>>476さんのソースを研究させて頂いてるんですけど
間違っているのではないかと思われる箇所があるんですが、
自分の思い違いなのか、書いた>>476さんにお尋ねさせてほしいのですが
//マップの配列を確保
t_MapDataVec.resize(t_Height);
for( int i = 0; i < t_Height; i++ ){
t_MapDataVec[i].resize(t_Width);}
↑
ここで配列t_MapDataVecの行数はt_Height、
t_MapDataVecの要素数はt_Widthからそれぞれ決めていますよね、
ここはそれで正解なんですけど、
問題はこの後、その配列に数値を格納するときなんですが
t_MapDataVec[ t_LoadNum / t_Width ][ t_LoadNum % t_Width ] = t_Sum;
++t_LoadNum;
↑
これでは、行数の添え字の進み方ががおかしくなりませんか?
これ、行数と要素の添え字を両方ともt_Widthを利用して算出してます。
しかし、行数の数はさっきのresizeではt_Heightで決めています。
つまり、t_Widthとt_Heightの値とは必ず同じというわけでは無いはずなので
t_Widthだけを利用した算出方法では行数の添え字の動きに支障が出ませんか? >>512
>初歩的なことが全くわかってない
それは>>511の内容(エラー)について
私の方が無知で責められる内容だということですか?
ご指摘頂けませんか?
「あなたが言う様に変更したらエラーが出る様になりました」
「、、お前は初歩がわかってないから消えろ」では
納得いきません。申し訳ありませんが、自分が間違っているのであれば
気付かせてからの「わかったら消えろ」発言にして頂きたいです。 >>512
もしかしてstringでは配列を作る必要がないということですか?
string buf[1];では無くstring buf;にしろと。
それはそれでエラーになるじゃないですか。
ここで↓
while(ifs && getline(ifs,buf[line])){line++;}
だからbufは配列じゃないと困るんですけど、、 >>512
ちなみにこの
https://teratail.com/questions/44651
PAGEの質問の回答者の中に
>C++なのに、あえてmojiretuをchar配列にする理由があるのでしょうか。
>std::string mojiretu[10];
>このように定義しておけば、
>mojiretu[0] = s;
>mojiretu[1] = s2;
>は問題なく通ります。
とstringで配列を作ることを肯定する記載もあります。
別に、charでは無くstringで配列を作ってもダメな手では無いはずです。 >>518
そもそもstringクラスの話はココの人に「それでは無駄がでている」との指摘を受けて
話に出しているだけで私としては修正することでエラーが出るなら
buf[3000]で無駄が出ていようが構わいことです。
とにかく、何日も悩んでいるのは、archiveしたcsvを読むのに、
DXライブラリ関数を使っているのにビルド上は問題ないのにarchive後は正しく読まない、
その理由がわからない。
>>477さんが指摘したDXライブラリ関数では無いgetlineも
自分で新たにbool getline2(int fh, string& s);と宣言し
bool StageDataBase::getline2(int fh, string& s)
{char buf[1024];
if (FileRead_gets(buf, sizeof buf, fh) == -1) return false;
s = buf;
return true;}
とFileRead_getsを使って入れ込む関数を作っても、archive後は正常に読み込んでいない。
ここの住人さんが提示するソースを研究なり導入しても改善せず、なにがなんだかわからんのです。
私の未熟なのはわかりましたが、私のやりたいことに対して、
現在のソースの間違い個所を指摘してもらいたいんです。
未熟だ、charでは無駄が、とか正直そんなのどうでもいいですよ。
解決したいのは、archiveしたcsvを今のソースでは
正しく読んでくれないんです。どこが間違っているせいですか?
それがご相談したいことなんです。 >>while(ifs && getline(ifs,buf[line])){line++;}
>>ここの部分、このgetlineでbuf[]を使うわけですが、[1]だけじゃ困る、
ということですよね??
「一旦CSVファイルの内容を全部変数に格納して、
その変数からデータを読み込みたい」って話だったでしょ?
バグってんのは、あなたがそういう仕様にコードを修正出来てないから
>>while(ifs && getline(ifs,buf[line])){line++;}
>>だからbufは配列じゃないと困るんですけど、、
bufじゃなくて、そのwhile〜の部分のコードの方を修正するって考えに何故ならない?
>>getline(ifs,buf[line])
別の掲示板の書き込みを見る限り、これあなたが独自に定義した関数でしょ?
関数の説明も無く「エラーが出るんですけど」とか言われても他人は答えられんでしょ
>>これでは、行数の添え字の進み方ががおかしくなりませんか?
おかしくないよ?具体的な数値入れて見直してね
基礎が出来てないとこんな有様になるんだねぇ…可哀想に 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) そっちは本当に正解が見えているのか、いないのかわからないのに
私の相談内容外の問題ばかり指摘してくる方だろうと
レスをくれたからにはちゃんとこちらも返事しているつもりです。
私のほかの問題はどうでもいい。相談内容に対しての
perfectなご指摘が欲しいんですよ、私は。
今のところ、本当に有益だった解答は、たったひとつだけです。
>>477さんの
「DXライブラリ用のArchive作ってるのに
それを通常の入出力関数で読み出そうとしてるのがバグの原因だよ」
だけです。
それ以外は、正直どうでもいいことです。
ソースは千差万別、実力によりピンキリでしょ?
無駄があるとか、綺麗じゃないとか、言いたいことはわかりますが
正味の話、ビルド後、思ったことができていれば問題なくないですか?
みんなが見るのはゲーム画面です。ソースじゃないんですよ。
私はブサイクな自分のソースを晒してまでご相談させて頂いてるんです。
自分のソースに対して、なぜarchive後に正常にcsvを読めなくなってしまうのか、
perfectなご指摘を、どうかお願いします。 大前提だけどアーカイブにはちゃんと目的のファイル入ってる?
FileRead_gets後のbufの中身はデバッガなりprintf/OutputDebugStringAで見て
正しいデータか壊れているかは確認してるよね >>521
あのですねgetline関数は
istream クラスのメンバー関数です。
C++の関数ですよ?
知らないんですか?
ただ、>>477さんにDX専用の関数つかえと
指摘されたので
あとでDXライブり関数を利用するgetline関数を自作しました。
それがこれです↓
bool getline2(int fh, string& s);と宣言し
bool StageDataBase::getline2(int fh, string& s)
{char buf[1024];
if (FileRead_gets(buf, sizeof buf, fh) == -1) return false;
s = buf;
return true;}
で、FileRead_getsを使って入れ込む関数を作った、のに
やっぱりarchive後まだ正常に読んでくれませんでした。
だから未だに困っていますが。 このくそがき、コピペしてそのまま動くパーフェクト(笑)なコードよこせと駄々をこねてるんだろ?
ソース書いてやったらお礼も書かずにすたこらさっさと消えるタイプだから相手にしなくていいよ
C++入門書のメモリ管理とファイルIOの章でも100回読み返せw お前らのほとんどのレスが無益だったらしいぞwww
スレチなんだからスルーしとけよ 今のところ、本当に有益だった解答は、たったひとつだけです。
今のところ、本当に有益だった解答は、たったひとつだけです。
今のところ、本当に有益だった解答は、たったひとつだけです。 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) >>523
>正しいデータか壊れているかは確認してるよね
もちろん、デバッグで確認して、bufじゃないですが
最終的な配列の中身を確認し、ちゃんとcvsの数値が
そのまま各要素に入っていることは確認しています。 それ以外は、正直どうでもいいことです。
まじクソやなこいつwww >>525
あなたみたいな人間こそ、必要ありませんよ。
私のレスを見て、どこがコピペで済むソースくれ、と読み取れるんですか?
修正しながら何度も問うているでしょ
何度も修正し、頑張っているんですが? >>530
ほぉそれにしては
まともにレスしてるやつに対してよくも「正直どうでもいいことです」とか言えるなお前
消えろカス まあこのスレの住人も千差万別、私よりも知識がある人ばかりでも無し。
外部ファイルから読み込んだことも無い様な人もいるんでしょう。
自分は的確な回答ができない人がそうやって煽るしかできないんでしょうね。
DXライブラリでゲーム作りながらも
archiveファイルにしてない人も沢山いますから。
それどころか、ゲームを完成させたことも無い人もいるでしょうから。 https://dixq.net/forum/viewtopic.php?f=3&t=20345
class MapCheck {
vector<vector<int>> Map;
int m_line, m_col;
public:
void LoadData(int y, int x, string s);
void ShowData(int y, int x);
bool getline(int fh, string& s);
};
getline を定義してやれば、そのコードで動くことを確認しました。
お前上記の掲示板でgetline独自に定義してるじゃん
お前が使ってるのはistreamクラスのメンバー関数じゃないよ
>>C++の関数ですよ?
>>知らないんですか?
何?その基礎も理解も全く出来てねーくせに喧嘩腰の言い方
もう知らネ 一生困ってろ >>531
まともにレスってなんですか?
相談内容とはまったく違うことに目を向けてきて
「基本からやりなおせ」と指摘してくるレスですか?
相談内容とはまったく違うことに目を向けて
そこ無駄だからcherにしろ、と言うレスですか?
私は、私の相談内容を理解して
それで間違い個所を指摘してくれるレスが欲しいんですが。 >>533
それはあなたがその掲示板を先にみて、
先入観をもってるだけでしょ。
私は、その掲示板で相談する前から
自分のソース内で
#include <iostream>してgetlineを利用しています。
その相手の方が、#include <iostream>してることを
知らないから独自に作っただけです。
私のソースではgetlineを定義せず、動いています。
あなたの勘違いですよ ひとつ、言っておきたいのですが、
私のソースは、動くんですよ?
ちゃんと完成してるんです。
ただ、releaseビルドしたあと、素材はフォルダごと
archiveしますよね?
そのarchiveしたフォルダを読むと、うまく読まないんです。
そういう相談なんです。
なのに、archiveファイルを読むのに
関係無い個所の指摘や意見をされても
その話に乗っていくと本題からそれていくので
私も困るのです。 >>535
記載されたソースコード見る限り
#include <iostream>してないけどね 勘違いもクソも無いだろ
>>その相手の方が、#include <iostream>してることを
>>知らないから独自に作っただけです。
意味不。
あと「上手くいかない」「エラーが出る」とかじゃ意味分からんね 具体性がない 素材フォルダをarchiveしなければ、
素材フォルダと実行ファイルとでもう動くんです。
ただ、素材フォルダをarchiveしたいと思ったから
>>477さんのおかげで、archiveしたファイルを扱うなら
DXライブラリ関数にしなければならない、とアドバイスを受け
読み込み部分のプログラムを修正しなければならないと知りました。
で、今、いろいろやってるんですが、正しく読み込まない、
なぜだ?DXライブラリ関数を使っているつもりなのに、、、困った。
そういう現状なんです。
どうか、このバカめに、知識人様のお知恵を貸しください。
どこが間違っているのかの、ご指摘がほしいのです。 >>537
>あと「上手くいかない」「エラーが出る」とかじゃ意味分からんね 具体性がない
まあ、どういう状況かはこのスレに書いてきたんですが
途中から来た貴方に私が過去レスを見てくれというのも
おこがましいので、貴方のために説明します。
経緯は>>538です
で、私のもともとのソースは
>>469です。
これがarchiveファイルにしていなければ正常にcsvファイルの中身を
Map配列に入れ込める関数です。
この段階のgetline関数はiostreamの関数です。
そのgetlineでなにが行われているのかは、もちろん私より承知なんでしょう。
まあ要は、
このソースのどこをDXライブラリ関数に変えたらいいのか、という相談なんです。
ピンポイントで修正個所を言ってくれる人はほとんどおらず、
別の部分をいろいろご指摘されたわけですが。
で、次にDXライブラリ関数を使って
自分なりに完成させたソースを貼りますね >>539
ここ毎日夜通しで修正してますし、
夜通しでここに書き込みしています。
こんなにヤル気がある生徒なのに、、 夜通しやって昼間やらないんじゃ逆効果だろ
自律神経狂うし寝不足で効率落ちるから、休息にもヤル気が必要
ただし煽り猿は気にしなくていい じゃあもうアーカイブするなよw それで解決じゃんwww まず、>477の前に俺が>468と>471でパーフェクトな回答をしたことに気付いてほしい
あと、パーフェクトな答えはいっぱい出てるのに何故できないのかというと、君は「変数の型」のことがわかっていないのに自分ではわかってるつもりになっていて、何度それを指摘されても理解しようとしないから
間違いの一例をあげると
>int fh = FileRead_open(s.c_str());
>ファイル内の文字がfhに入ってると思ってるんで
これはC言語の初歩を勉強した人なら絶対にありえないパーフェクトな間違いで、これに気付かないのが全ての元凶になってる
型も入出力も全くわかってない上に、DXライブラリのリファレンスを読む気まるで無しなので、何を説明しても通じない
しかもこういう間違いが書き込みのたびに出てきてるので、皆が基礎を学べと言ってる
もうきりがないので究極にパーフェクトな答えをピンポイントで書くと、
DXライブラリのリファレンスをよく読みCのファイル入出力と見比べて
FileRead_read、FileRead_getsあたりを使って「型の合った正しい引数」を与えればうまくいく >>大前提だけどアーカイブにはちゃんと目的のファイル入ってる?
>もちろん、デバッグで確認して、bufじゃないですが
>最終的な配列の中身を確認し、ちゃんとcvsの数値が
>そのまま各要素に入っていることは確認しています。
アーカイブからFileRead_readでCSV読むのは解決済みじゃないか おめでとうさようなら
Releaseビルドすると不安定な挙動になるのはエラーチェック不足や初期化漏れのせい
Debugビルドのときはcharやintのローカル変数が自動で初期値クリアしてもらえてるから >>542
本当にその通りです、
この生活を繰り返してたら剥げそうです
優しい言葉に涙が出そうです。
連投したこと、反省します。
>>544
>俺が>468と>471でパーフェクトな回答をしたことに気付いてほしい
はい、実は>>522を書き込んだあとに過去スレ見返して
あなたが真っ先にperfectな回答をくださってると気づきました。
すみません、477さん以外にまともな回答が無いみたいな発言をしてしまって。
あと、あなたのご指摘が胸に刺さりました。
プログラマに向いてない性格の自分を再確認させられました。
実は私はプログラマに向いてないのに無理やり頑張っていた人間で
ゲームが完成して、調子に乗ってしまっていたようで、自分のそれを忘れていました。
私はすべて独学ですので、まともに学んだとは言えません。
>もうきりがないので究極にパーフェクトな答えをピンポイントで書く
ありがとうございます。
それをちゃんと実行して、考えたいと思います。
>>レスくれた皆様がた
皆様、もう一回初心にかえり
リファレンスとにらめっこしてまいります。
ご迷惑おかけして申し訳ありませんでした。
失礼します。 >>546
ifstream ifs(s);
ここのsに何が入ってるか気になる
まぁとりあえず
現状のDXライブラリの関数しか使ってないソースコード貼ってくれ プログラマ向いてないのとまともに学んでないのはソース見てわかったよ
こんなところに躓くほどアホなやつ他の初心者スレでも見たことないし 俺かなり真剣に考えてレスしたはずなのに
有益ではないと断言されてしまった というか、>>546はちゃんとデバッグしてる?
ステップ実行とかすれば簡単に原因が分かるはずだが?
「アーカイブにした途端読み込まない」って
十中八九ファイルパスが間違っててopen出来てないからそこを確認すべき
大方、下記の状態の時に
f.open("data.csv");とか
f.open("csv/data.csv");とかやってんだろうけど
■Test
┣Archive.dxa
┗game.exe デバックで問題点をぼりこむスキルもないのに、
いきなりゲームを作ろうとするからだよw
そもそもスキル足らない人間の質問なんて要領得ないし、
自分のコードは見せないけど、俺のコードのどこに問題点があるか教えてケロケロって言ってる
アホさ加減にすら気がついてない。 だから、Ruby から始めればよい。
大学の授業を受けたほとんどの人が、C 言語はわからないし無意味だって、言ってるw
>プログラマに向いてない
C/C++ などポインタのある言語は、
人間には無理なことをやらしているのだから、向いていないのは当たり前。
君らは、多言語の経験が無いから、自分が馬鹿だと思っているけど、全然違う!
漏れは、10言語以上やってるけど、
動的言語・静的言語・ポインタのある言語の順に、難しくなっていく。
人間から離れて、機械に近づいていくから、だんだん無理になっていく
C++ なんて、1万人に1人とかだから、もっと無理。
数年山籠もりが普通
慶応卒の、Rubyの女神・女優の池澤あやかが言ってる。
授業でC を教えるのはおかしい。
Rubyから始めるべきだって!
C/C++が必要だからって、勉強をC/C++から始める必要はない。
ポインタを追っかけ回すのに時間を取られて、勉強にならないから効率が悪い
動的言語から始めて、プログラミング・システムの基礎を学ぶべき ゲームプログラマになる前に覚えておきたい技術、平山 尚、2008
これは大賞も取った、俗に言う「セガ本」だけど、
セガの入社試験を受ける前に、読んでおいて下さいって言うけど、
これだけでも、マスターしている人は、セガにほとんどいないだろうw
何歳までに始める言語とか、この手の本も、全く簡単じゃない
この手のタイトルの本を、信用しない方がよい。
C/C++ なんて、簡単に学べるわけがないから! >>509
Ruby では、これだけで、CSV ファイルを読み込める。
動的言語では、ファイルI/O なんて読み書きできて当たり前!
ポインタのある言語をやるから、難しくて出来ない
動的言語・静的言語・ポインタのある言語の順に、難しくなっていくから、
ポインタのある言語なんて、多言語でプログラミングして、10年後に始めるべき
言語の難易度が違う
なぜ、C/C++ をやる人が、プログラミング出来ないのかを解説した >動的言語・静的言語・ポインタのある言語の順に、難しくなっていくから、
>ポインタのある言語なんて、多言語でプログラミングして、10年後に始めるべき
例えれば、君はヒマラヤ登山をする初心者w
絶対に無理なのが、わかるよね
まず10年は、簡単な山から登って、基礎体力や登山の方法を学ぶ
まず10年は、コンピューターシステム・プログラミングの方法を学ぶ >>char buf[1024];
>>if (FileRead_gets(buf, sizeof buf, fh) == -1)
あと高確率で勘違いしてるだろうから
ついでに上記のsizeofについてもダメ出ししとく
sizeof演算子を配列に使用した場合、
得られるのは「配列全体のサイズ」であって「配列の要素数」じゃない
多分、要素数が求められると思ってるでしょ?
char型はどの処理系でも1バイトだからたまたま問題なく動くけど
配列のサイズ/配列の要素1個のサイズにしとかないとintとかdouble型とかだと範囲外エラーになる そのsiseofの使い方はなんら問題はない
なぜなら関数はバイト数を入力されることを期待しているから
突っ込みどころはそこじゃない あホントだ この関数はサイズ指定でいいのか すまぬ
しかし「int型に文字列のデータが入っている」と思うレベルで
ゲームを完成させたというのなら逆に凄いと思うわ ファイルの読み込みなどは、C でやらない。
Lua, Squirrel などの動的言語を使う
本当は、Rubyが良いけど、ライセンスがGPL だから、アプリに組み込めない デバッガーを使って、1行ずつ、デバッグすれば?
それか、Rubyみたいに各行に、Print文を入れていく
p 0
文1
p 1
文2
p 2
これで、どこまで処理が進んだかわかる
例えば、0, 1 と表示されれば、文2 でエラーを起こしているとわかる sp4用のDXライブラリ使いたいのに、自由に使わしてもらえないの?
DXライブラリ製作者じゃ無く、変な運営団体が牛耳ってないか? PS4に限らず、CS向けの開発資料関係はソニーと要契約だし、
PS4向けのDXライブラリにはそういう情報も含まれてるでしょう。
いづれにしても個人が契約結ぶのは無理だし、この会社が窓口請け負ってんじゃないかな。
おそらくOSSにはならないと言うかなれないと思うよ。 CS開発にDXライブラリの知識や資産が活かせるってだけであって
DXライブラリを使えばCS開発ができるという意味ではないからなあ 結局この前のやつはアーカイブから読み込めたのかね
教えてクレクレ君は大体が初歩的な内容をマルチポストして
解決するか挫折するかして失踪するから困る
基礎を学ぶ気が無いんだったら◯◯ツクールとかの製作支援ソフトでも使ってりゃいいのに PS4の開発機材要るしね。実行環境なければソフトウェアだけではどうにもらなん。 C/C++ は、ポインタがある言語だから、難しい
機械に近い言語だから、人間の感覚に合わない。
一つ一つのチェックに、時間が掛かる ポインタがあると思うから難しく感じるねん。
基本がポインタで、int や char が特別やねん。
基本が malloc で、配列が特別やねん。
ほんでその特別な方で済むならそっち使えばええ言語やねん。
思い込んでるほど難しいもんやあらへん。
C++ はそれにたくさんもっと約束事を追加してるもんで、
覚えるのは大変やけど、それ覚えたらプログラマ同士でより複雑なプログラミングも可能になるわけや。
C が三角ベースなら、C++ ベースボールやんな。
そこまで構えんでええ。独習シリーズ買ってあとは必要に応じて参考書買えば大丈夫、大丈夫。 ポインタを難しいと全く思わなかったせいか
人に教えるときも、どうもそのへんの感覚が分からんのよねぇ ダブルポインタ、スマートポインタ、constポインタ、const変数へのポインタ、関数ポインタとか
色々あるけど、別に「理解不能」とはならなかったな
ポインタで詰まってる人ってどこで詰まってるんだろね 入門書を読んで理解して無理のない使い方するだけなら簡単だろう。
理解が難しい書き方も出来るから、そういうコードを見た時に難しいと感じるんだろう。
あるいは全く意識しない書き方も出来るからこそ、なぜポインタなんてものがあるのか?と理解に苦しむパターン。 言語の機能が極端に少ない・足りないのをポインタという裏技でどうにかするのがCやで
むしろなぜド素人がCなんて使うのか?と理解に苦しむパターン。 >>580
は?俺Cとかめっちゃ使えるしド玄人なのになんで勝手に文脈を誤解されてド素人言われなければいけないのか理解に苦しむパターンだわこれはマジでむしろ理解に苦しむパターンの理解に苦しんでるパターンだろ。
なんで理解してないのに理解に苦しむパターンを勝手に使うのか理解に苦しむパターン。 ダブルポインタとか言ってるやつは人間として信用しない STLやポインタが難しいって20年も昔の話だろw
関数ポインタとか、ポインタのポインタとか、C#とか他の言語でも息を吸うように使われてるよ Cだとポインタ使わずに書くのが難しい処理があるのは事実で、
それに慣れた使用者にポインタは難しいとか他言語にポインタはないとか言っておけば耳障りはいいし、他言語を自由度の低いものとして恐れるようになる。
つまりC言語帝国主義者の陰謀でポインタに関するデマが広められているだけなので要注意。 C/C++入門書なんかよりJavaやC#から始めた方がポインタの理解が早いかもな ゲーム作るのが目的だし、PCの性能も上がってるから
スクリプト言語のような動的な言語もありだし、JavaやC#から入っても良いだろう。
ただまあ、DXLibのスレでC/C++の文句言うなら他をあたりんさいとしか言えんがな。
ただスクリプト言語用のゲームライブラリってそれなりにあるけど、開発が止まってたり、
LGPLだったりと別の意味で使い勝手が難しいものが多いね。 もう一度言っておくが俺みたいに機械語から始めれば何の問題もないぞ 機械語を知らないのかネタなのか、判断に困るのである
機械語は難しいというより面倒臭そうなイメージ 【天文台閉鎖、FBI】 アポロ捏造のキューブリックも真っ青、太陽に映ったのはマ@トレーヤのUFO
http://rosie.5ch.net/test/read.cgi/liveplus/1537840672/l50
おまいらが注目しないから宇宙人は出てこれない、その結果、地球の放射能危機がどんどん進んでしまう! ポインタが難しいから、ほとんどの言語にはポインタがない
GC で、自動的にメモリも解放する ポインタは簡単だからポインタ・関数ポインタと同等の機能が他の言語でも当たり前に使われている
ゲームだとガベコレ回避にRAIIでメモリを扱うし結局やってることは同じ
バッファコピーをforループでするより組み込み関数memcpy()の方が速いとか、
ポインタの利点はそんな微々たる最適化に使えるかどうかだな
もしその粒度で高速化したいならc++のクラスとかSTLは全部使えん ダメだー、頭が悪くてわからない!
誰か数学に強い人、計算方法教えてくれませんか、、、
1マスのサイズが16×16、そのマスを縦横並べて構成されている
碁盤上のフィールド上で、1マスと同じ16×16のサイズのプレイヤーが
縦、横、斜めと縦横無尽に1ドットずつ移動できるとする。
しかし、そのプレイヤーが移動を辞めてストップするたびに、
その碁盤の区切りにプレイヤーを綺麗に合わせるために
プレイヤーのx、y座標を16で割れる数に修正したい。
つまり、止まるたびに配置を調整されるようにしたいんだよ。
でもどうすればプレイヤーのその時のx、y座標の数値から、
一番移動修正が少なくて済む16の倍数を割り出せるのかが思いつかない、、、
なんか良い計算方法あります? プレイヤーが移動をやめるということは、方向キーの入力をやめるということでいいのか?
移動してる最中は上下左右斜め自由自在に動けるけど
キー入力をやめたら最寄りのマスに合わせて止まるってこと? 602のいうように16で整数除算すりゃいいんだよ
X軸座標が0から始まるとして、プレイヤーのX軸座標を16で除算した結果が、0から連番のマス位置だ
マス位置の番号に16を掛ければ、そのマスの基点(左端のX軸座標)が求められるからプレイヤーのX軸座標を合わせりゃいい
Y軸も同じ考え方 >>600
座標をfloat型などの小数型に変換(型キャスト)して、
16.0fや16.0で割り、
小数第1位を四捨五入して、整数型に変換(型キャスト)する
四捨五入の方法や分からん言葉はググルべし 整数型として、
プレイヤーの「中心座標」を、マス幅(16)で割る? うあ、リロードしてなかった
恥ずかしい
それはともかく、移動をやめたときに適当な座標に合わせるって挙動いいな
自分も機会があったらパクるわ 16で割るだけだと移動やめたとたんにカクッと移動しそうな感じするけど >>608
実際にやるなら、
・入力ニュートラルになってから一定時間立つと自動移動フラグがON
・自動移動がONの間、少しずつ対象座標に近づく(一定ドットずつなりイージングなり)
・移動完了または入力があったら自動移動フラグOFF
かな うわー、起きたら、
みんなありがとうございます!
こんなにアイデアっていうか、計算方法出してもらえるなんて
過疎過疎なんで返事無いと思ってましたんで
>>601のおっしゃる通りで、イメージとしては、
将棋版の上でプレイヤーが将棋のコマを好きに移動させられるけど、
移動を止めるたびに、そのコマを盤上の最寄りのマスにきっちり合わせて止める
って感じです。
マスもコマも16×16で同じサイズなので、
一番大きく修正される状態でも半分の8ドットなはずなんで
そこまで瞬間移動に見えないかなと思ってます
とりあえず、>>602さんと>>603さんのが一番理解しやすかったんで
それが最良っぽいんで、それでやってみます。
あ、プレイヤーの移動数値、座標位置ともにdouble型の小数点でやってるんで
>>604さんの案でいえば、キャスト変換しないほうが(すでに小数点なので)良い??
逆で、その都度int型にキャスト変換してから>>602さんの言う16で整数除算した方がいい?
自分ではよくわからない、、 >>610
やり方はいくつか上がったんだから、想定する入出力例をいくつか紙に描いてみて、
コンソールアプリでもビルドして、どのやり方が適切か計算結果を確認してみりゃいい。
一番良いやり方は当人しか分からん。
上がっている方法について少し付言すると、
整数型の割り算は小数が切り捨てられる。
また四捨五入する値が負の場合は、半分の値を引く必要がある 整数で割るのはマップデータの当たり判定のほか
パズルゲームとかマウスでアイテム欄から選択とか
いろいろ応用が利くので慣れとくといいかも 単純に「座標なら整数型で持ってるだろう」という前提で
みんな話してたと思うよ
座標みたいに整数で出力される値でも
内部的にはdoubleで持つというのは、理由があるなら別に悪いことじゃない
まあfloatは無いかな… doubleじゃなくてlong longにして100で割って下二桁を小数点として扱えば? 今始まった話じゃないんだけど。
ttps://i.imgur.com/U9YOAm8.png
DXライブラリ関係だけ曖昧と指摘されて、コンパイル出来ない。
思い出した様にたま〜〜〜に出て、一度終了してから起動すると出ない。
出ない時は全然出ないので再現性がなく、作者様にお伺い立て様もなく。
VisualStudio2017Comunityですが、同じ症状の人います? もともとVisualStudioは外から来たライブラリを激しく嫌う習性がある
if文の括弧つけ忘れとかセミコロン置き忘れのようなライブラリと関係なさそうなミスでも
「おめーの関数あいまいなんだよ」みたいな態度を取って文句を言ってくる ABCDEFGH
1□□□□□□□□
2□□□□□/□□
3□□□□//□□
4□□□//□□□
5□□□/□□□□
6□□□□□□□□ DXライブラリ関係ない話題ですんません
2DのRPGの話なんですが
普段は上下左右の4方向にしか移動できないタイプのゲームで
マップで坂道を表現するときの処理の仕方なんですけど、どんな風にやればいいかなと
マップの侵入不可とかの地形データの中に坂道フラグみたいなのを設定して
移動の時にそれを参照して、現在位置の地形が坂道の場合、斜めに移動する
ってやったら>>618の図で言うところ
のぼる時は 4C→4D→3E→2F→1Gになり
戻ろうとすると1Gは平面で1Fに行ってしまう
また階段途中で引き返しても4Dから5Cに行っちゃう
要するに、坂道に足を踏み入れた時と、坂道から抜け出す時の座標のずれが気になるんですよ >>619
横視点?
上からの平面マップで疑似斜め地形を表現したいってこと?
重力はあるのかな? >>620
横視点というより上視点でしょうか
普通にRPGツクールシリーズのマップみたいなイメージです
坂や階段を表現するときにどうしたらいいかなーと
今のままでも5のラインから登って行けば2のラインに出て
2のラインから降りていけば5のラインにたどり着くんですけど
先述の通り途中で引き返したりすると違和感が出てきてしまって…
気にしすぎなだけかもなんですが 真上視点で斜めに移動するってのがイマイチ分からない >>622
FF6の町マップにある階段のような挙動をイメージしてます なるほど把握
マップチップで考えずに、
単純にキャラクターの表示座標を上方向にズラすんじゃダメ?
もちろんそのままでは背景との整合性が取れなくなるから
マップチップの方をうまく調整しなきゃいけないけど 5Cから1Gまでは一直線移動で途中から横には出られないようにすべきだね。
エスカレーターの出入り口みたいにする。エスカレーター内は左右or上下で自力移動だけど。
途中で降りられるようにするとおかしくなるよ。 いまさら遅いと思うけど、グリッドベースで進行するゲームの場合キャラの位置もグリッド座標で持つようにして
キャラ絵は接触判定とか無視して自動で指定位置に移動するほうがいい
落ちものパズルとかターン制ストラテジーがだいたいこんな感じになってる >>616
む、そーだったのか!
でもwarningはあったとしてもerrorはない状態でも出るんですよね。
再起動してビルドするとスンナリ通ります。 visual studioといってもC++コンパイラだけでしょ
テンプレートのエラーなんかでも的外れなエラーをずらずら吐き出すし VisualStudio2015で使ってるけどたまにあいまいですって出るなあ
ビルド通らなくなったかは覚えてないけど気持ち悪い以外に特に問題はないみたいだから気にしないようにしてる 2013でやってるけどあいまい出て気持ち悪かったなぁ、ctrlk+ctrldで何故か直ってたが 過疎ってたから何らかの話題出したかっただけやですまんな ios対応したんか
mac持ってないとビルドできないのかな クロスコンパイルのこと言ってるのか?
DXLibじゃ無理だろ。 ios対応したのかー
まぁ、俺の昔作ったプログラムは、あることがしたくて、dxlibの非公開APIとwindowsAPIを直接叩いているから、移植は難しいだろうなぁ >>615
何度見直しても問題点が見付からなかったので、発生した関数内で呼び出している関数のプロトタイプで
extern void test( int ,int);
としていたのを
extern void tese( int a ,int b);
にしたら、赤線が取り敢えず消えた。 型だけじゃなく仮変数も付けた方が良いのか。
他にも発生条件あるんだろうなあ。 本家サイトの掲示板で5chに自分の悪口書かれてるって騒いでる奴がいたから、
何を書かれてるのか見にきたら、別に何も書かれてなくてワロタ。
それどころか7ヶ月以上書き込みが無い…。
別のスレで書かれてるのか?
それとも総合失調症ぎみの人なのだろうか?
「ネットストーカーが」とか書き込んでるから、ちょっとヤバそうなそうな人の気配はしたが果たして…。
青葉の件から、ああいう書き込み見るとマジで不安になっちゃうよ…。 青葉真司、京アニの放火の犯人(と今の所されてる男)。
ネタや煽りで「ネットストーカー」とか書き込んでるんなら性格or頭が悪いってだけで、
実質的な害は無い(気分は悪いけどね)からまあいいんだけどさ。
世の中には少数だけど青葉みたいに本気で頭おかしい人が居るからね。
文面だけじゃ本気なのかネタなのか区別つかんし…。
こことか2chとかアングラな掲示板ならともかく、
平和な本家サイトの掲示板では使う言葉は選んで欲しいよ。
レスバしたいんなら、他でやればいいのに…。 ios対応ってどういうことですか?
だって、DXライブラリで作ったゲームって
directX必須じゃなかった??
アイフォンで動くゲームにビルドできるんですか? Android版とios版はOpenGL ESで描画してる。
ただし関数名はWindows版とまったく一緒なので、c++ソースが共用出来るのがメリットかな。
※OSに依存している部分は書き換える必要が有り
あと、当たり前だけどiosアプリ作るにはMacでXcode使ってビルドする必要がある。
っていうか本家HPに全部説明書いてありますがな…。 >>644
その人は、通称「虐殺ちゃん」といって
プログラマのQAサイトteratailやyahoo知恵袋、おしえてgooで騒いでる超問題児
teratailのスレでウォッチされてる >>652
teratailのスレ見てきた。
本当に同一人物なら相当ヤバいねあの人。
文章見る限りそんなに知能がたりないわけでもなさそう(人としてバカだし性格は糞だが…)なのに、
プログラミングに関しては本当に無能通りこして障害レベルだね…。
脳みその構造どうなってるんだろ?
ああゆうのが発達障害ってやつなのかな…。
それとも文章はギリギリ健常者だけど、他は知的障害とかあるのか?
日本語は通じてるようだが、プログラミングに関しての所は全く読めてない感じだもんなー。
バカのふりして遊んでるだけならまだいいんだが、なんかガチっぽいのもなぁ…。
しかも、執念も異常っぽいから、
何十年もかけて善良なひとを騙してかき集めたコードを繋ぎ合わせて、
何かゲームのようなもの(もちろんバグらだけ)を完成させるような気もするのがなお怖い…。 >>654
こんにちは、虐殺ちゃんですか?
こんな所まで出張とは精が出ますね。
その時間を使って、Cの基礎を勉強なさったらどうですか?
そして、あなた多分「怖い」の意味を理解できてないですよ、
日本語も不自由なようですね…。
一回辞書で調べてみてください。紙の本が面倒なら、google検索等で
「怖い 意味」と入れるとWebの辞書のページがヒットします。
多分あなたの知らない使い方が出てきますよ。
言葉には一つの単語でも色んな意味があるんです。
とりあえず、気になったら調べる癖をつけましょう。
そうすればプログラミングも上達するはずです。
頑張ってください。(なるべく人に迷惑をかけずにね...) Dxlibつかってゲームのロジックとか設計とか組むのは面白いけどゲームとして完成しない
かれこれ5年以上同じ事続けてる >>658
作ってるのが楽しいなら、別にそれでいいんじゃない。
そもそゲームってファミコン時代でも数人がかりで、数ヵ月〜数年かけてつくるもんだし、
一人で趣味で作ってたら十年かかってもおかしくないよ。
完成させるのが目的なら、とりあえず簡単なプログラムで済むゲームにして、
スケジュール管理もしっかりした方がいいとはおもうけどね。 まぁエンジンのが効率いいわな・・・
基礎的な部分は全部出来合いの物があるみたいだし
DXライブラリって結局全部自分で組めっていってるようなもんだよな? DXライブラリも一応ゲームエンジンに分類はされてるよ。
ただまあ、描画・サウンド・キー入力位しかサポートしてないからなぁ...。(物理エンジンはMMDのモデルのみ対応)
「Unity」「Unreal Engine」とかの開発環境付きのゲームエンジンに比べたらかなり手間ね。
(DirectXを直に触るよりは格段に楽だけどさ。)
ワールドマップを表示するだけでも、
「プログラムコード内でマップデータを数値入力する」
「既存のツールのファイルを読み込むプログラムを書く」
「独自ツール開発してファイルを読み込むプログラムを書く」
のどれかをしないといけないからね。
(専用の2Dマップエディタとか3Dマップエディタがあればかなり効率よくなると思うのだが…)
プログラミングが好きじゃないなら「Unity」とか「Unreal Engine」「ツクール」を使った方がいいよね。
あと利点としてはライセンス料かな、
確か「Unity」とかは無料版もあるけど売り上げがある程度あるなら金払わなきゃいけないからな。 画面を出す仕組みがデフォで組み込まれてるから一応ゲームエンジンといえなくもないが、
やはりライブラリを名乗ってる以上ライブラリな気はするw MMDに対応してるおかげでモーション作りやすいのは利点かな
UE4のcontrol rigも進歩してるけど俺のノートPCじゃUE4は重すぎる
マシン買い換えるまではDXだな エンジンっていうほどのフレームワークは持ってないでしょ。
マルチメディアライブラリ以外の何ものでもない。 TOPに置いてある14歳からの〜シリーズを見たせいなのか
DXライブラリが子供向けのゆとり仕様だと思ってる奴がいて腹立ったわ
Unityとかのがよっぽどお手軽だよな・・・? >>665
Wikiでもゲームエンジンに分類されちゃってるからなー。
(広義の意味でとは書いてあるが)
細かく言うとゲームに特化したミドルウェアなんだろうが…。
>>666
とりあえずゲーム作りたいならUnityの方がお手軽ね。
DXライブラリはC言語の基本さえわかれば、すぐ使えるって意味ではお手軽だけど、
それってCは出来る事前提だからね。
あと、マシンスペックはDXの方が低性能でもうごくから、そこもお手軽かもね。
UnityやUnreal Engineをサクサク動かそうと思うと結構スペック要求される。 やっぱそういう認識だよな
ほんとに単純なゲームならCだけできるってのは確かにそうだけど
結局ある程度以上となるとオブジェクト指向で組まないと逆に複雑になる気もするし うん、大規模なゲーム作るなクラス使わんと無理だと思う。
ただDX自体がC言語の文法だけで書けるようになってるから、
大体のDXの入門系のサイトはCの書き方になっちゃてるんだよね。
c++の文法で始めた方が後々楽だと思うんだけどね…。 C言語用のこういうライブラリってほかはもうSDLとか
古典ライブラリしかないし、気に入っているけどね。
インターフェースまで持ってっちゃうんで、そこを便利と見るか
余計と見るかは分かれるだろうけど。 非同期読み込みがonの状態で作成したグラフィックハンドルについて質問です。
存在しない画像ファイル名をLoadGraphの引数に渡したのですが、戻り値が-1ではありませんでした。
おそらく非同期読み込み用のフラグをハンドルに持たせているからなのでは?と思っているのですが、
DXライブラリにハンドルの作成失敗を確認することができる関数は存在しますか? Android Studioにも対応したみたいね。
AdMobにも対応できるのかな?
NativeActivityだから設定一筋縄でいきそうにないけど…。 >>674
断言できるという事はDXライブラリの内部処理に詳しい方ですか?
すいませんが、対応できない技術的な理由を教えていただけませんか?
NativeActivity自体はAndroid StudioならAdMob対応させる方法あるみたいですけど…、
DXライブラリってAdMobが使えなくなるような何か特殊な処理をしてるんでしょうか? >>674
色々AdMob試してたら、バナータイプのテスト広告はエミュレーター・実機とも表示されましたが…
本番の広告は表示されないって事でしょうか?
正しく広告収益にカウントされないとか、そう言った問題があるんですかね? 管理人、前はゲームの自体のプログラミングの相談にも親切に答えてたけど、
最近はゲームの処理は自分で考えろってスタンスになったみたいね。
教えてもコードコピペだけして全く成長しない人とか、
自分で考えたり調べたりせずに質問ばかりする人が増えたからしょうがないか…。
そもそもマニュアルやサンプルプログラムすら目を通してるか怪しい人もいるしな。 初心者の相手はキリがないからね
ましてやゲームロジックまで面倒みれないよ 実際掲示板見ててヒヤヒヤするよ。あまりにも無知な上に礼儀知らずな奴がいて。
しょうもない無礼な質問で管理人さんの手をわずらわせないで欲しいよ。
管理人さんはお前の母親じゃないっての。 礼儀もまた知識。
どんな無礼かと思い覗けば、総てでなくとも自治も出来ている様子。
まあまあ、悪くない状態じゃないかな?
# 個人的にも色々やらかした事があるので胸が痛い。 あまりに無知で変な質問は管理人が答える前に他の人が答えるようになったけど、
その返信内容が結構厳しめだったりするから、
それがまた雰囲気悪くしてる原因のような気もしなくもない。
まあ、厳しく言われてもしょうがない奴がいるのが大元の原因なんだけども…。 技術的な無知もアレなんだけど
そういう人に限ってまた態度が横柄というかため口というか…
「あとこれもついでに訊くんだけどさー」みたいなどういう育ち方したのかなと思う口のきき方。
そこも問題なんじゃないのかな。中高生なんだと思うが。 久しぶりに見たらジオメトリシェーダーに対応したんだな
でも、うーん使わねー・・・・・モデルに毛でも生やすか?
まあ選択の幅が広がるのはいいか PCのスペック云々ってしつこくPCのせいにしてる人に、
「PCのスペックじゃなくて、お前のスペックが足らないんだよ」って
みんなハッキリ言わないのは優しさなんだろうけど、余計残酷な気もするな…。
永遠に人や物のせいにして、自分自信の改善は何もできないんだもん。 >>687
リファクタリングってか最適化って、地味な作業だしねえ。
ループの外へ変動しない計算式を出すだけでもそれなりに軽くなるものだけど、今はコンパイラが
勝手にやってくれるんだっけ?
DXlib関係だと、3万ばかりの点を打たないといけなかったのを小円で打とうとしたら激しく重くなったので、
今絶賛思考ループ中です。
#あ、DXlib的には画像貼り付ける方が速いかも・・・。 5chに対して言ってるなら最初から品位なんてないぞ。
DXの掲示板に対して言ってるなら、回答無視して同じような質問繰り返してる奴が一番嫌味な奴だ。
嫌味ってのは「人に不快な感じを与える言葉や態度」の事だからな。 なんとか小手先のごまかしで最後まで逃げ切って作ろうとしてるんだよねこの人は。
この間違った情熱をまともな方向に使えばもっと早く作りたいものが作れるんじゃないかと思うが。
とにかくいまどきのPCでサンプル動かしてるくらいでスペックが問題になんてなるわけないだろうと。
問題が起きたらまず自分のプログラムの構造を疑えよと思うんだけどこの人はもうこのスタイルを変える気ないよな。 >>692
彼は通称「虐殺くん」といって3年くらい前から
いろんな質問サイトで迷惑かけまくってるひとよ
プログラミングを少なくとも5年以上勉強しているのに
if文もfor文も正しく使いこなせない勇者 DXLib使ったオープンソースのSTGってないですか? DXLib使ったオープンソースのACTないかな?
勉強したい 3Dのアクションサンプルなら普通に公式ページにあるよ。
↓「Sword Bout」ってやつ
https://dxlib.xsrv.jp/SwordBout/
ソースコードも3Dデータもダウンロードできる。 なんか「虐殺」の事に触れると急に別の話題書き込むやつ現れるよな。
ここも監視してんのかね?
ここは寺尾スレと違って流れ遅いから無駄だと思うがね…。 ↓公式ページに一通り2Dサンプルあるじゃん
https://dxlib.xsrv.jp/dxprogram.html
だいたい、サンプルよこせって奴そこすら見てないよな…。 >>702
あったんですね
ありがとうございました 便利だけどこれが使いこなせるなら本家のdirectxも大して難しくないだろうっていう中途半端さ
いや便利だけどさ
誰も使ってないのがな >>661
どこがだw
DXlibはダダ甘だろw
この程度でゼロからゲーム作るとか言うかw
使ったことないけどそれならunityってもうツクールレベルなんじゃね? unityは使い方によっては、もうツクールレベルだと思うよ。
便利なツールや既存のスクリプトが大量にあるから…。
DXは描画とサウンド以外は全部自前でプログラム書かなくちゃいけないから、
そんなに甘くも無いと思うけど…。(超便利だけどさ)
どのレベルから作ればゼロからなの?
まさかグラフィックエンジンから作れとでも? >>706
DXライブラリが気に食わないんなら、そっちに行けば? >>707
何処をどう読んだらDXライブラリが気に食わないって認識になるの?
甘くも無いけと超便利って書いてんじゃん…。 >>707
DXライブラリが気にくわないんじゃなくて、
(>>705)の意見や認識が気に食わないんだよww
流れ見ればわかるだろ…、大丈夫かお前? >>706
ごめん、返信相手を間違えた!
どうかしてた、三日後に出直してくる またまたすまん
>>708だった。。。
返信って恐ろしい このスレも酷いけど板自体にバカしかいねえな
ゴミスレばっか立ってるやん >>705が勝手に「ゼロから」と読み替えて反論した気になってるだけ 俺的には、これの利点は、お作法関係なしにちょいと試せるって事に尽きる。
openglesに対応してくれたら言うことないのだが >>704がDXライブラリが使いこなせれば本家DirectXもたいして
難しくないだろって言ってますが
私はDXライブラリを解説している「ライブラリではじめるC言語ゲーム開発」
と、インプレスから発売された「DirectX5ゲームプログラミング入門」を
持っていますが両者の内容の難しさでは圧倒的に後者が難しいです
DirectDrawオブジェクトを作成してからの一連のDirectDraw初期化に
関わるAPIの呼び出しをラッパー関数にしたのを説明してくれていますが
DirectDraw初期化にかかわる処理の流れをマニュアル読まなくても
説明できるようになれなくてもサンプルコードの何処にコードを肉付けしたら
ビットマップを動かしたりできるのかを分かるようになることが
大切なのでしょうか? 明けましておめでとうございます。
もう、1月3日だけど…。 >>676
ちょうどAdMob実装で悩んでいる者です。
setContentView()を使ってViewを追加する感じで試しているのですが上手く動きません。。。
ヒントをいただけるとありがたいですー!! >>717>>718
明けましておめでとう!
何か話題ないのか?w >>721
こういうシェーダ実装するならPBRとか遅延シェーダとか根本的に描画方法見直さないとキツそうな気がするんだが 根本的に描画方法を見直すから一ヵ月以上かかるって事じゃないのかな?
バグ修正やちょっとした機能追加だと、
当日中にベータ版アップとか普通にするからねDXLibの管理人。 ダークソウルは僕には難しすぎてクリア出来なっかたなあ… 事前にコンパイルされてないシェーダーも扱えるようになったらちょっと嬉しいよね >>729
JAVA使わんと出来ないよ。Cだけじゃ無理。
やり方は自体は単純で、NativeActivityに直接広告をを表示させる事ができないから、
ポップアップウインドウを作ってそこに張り付けるってだけ。
参考にしたサイト↓
https://www.dynadream.com/ddweb/index.php/Special_Blog?id=20
JAVAとCのサンプルコード↓(一週間で消えるから早めにダウンロードしてくれ)
https://52.gigafile.nu/0217-c435ad0b8f695d247aa68c914b41d7dbf
ちなみにポップアップウィンドウを作って張り付けるやり方は本家の掲示板に回答書かれてるよ↓
https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=5092
(>>719の日付のタイミング的に↑の質問者がマルチポストしてる臭くて無視しちゃったんだよね…。) >>730
返事遅くなり申し訳ございません。
719自体かなり前の投稿でしたので、もう見ていないだろうな…と半ば諦めていたので拾っていただけるとは思いもよりませんでした笑
今からこちらを参考に取り組んでみたいと思います。親切にありがとうございます!! >>732
すみません…javaの知識が足りておらず頂いたmainactivity通りに書き換えたのですが
com.google.android.gms.ads達がimport出来ていないのかそこでエラーを吐いてしまいます。
原因はmetadataの所にあると考えて、自分なりに色々試してみたのですが、動きませんでした。。
お心当たりあれば申し訳ありませんが教えて頂きたいです(_ _)
お見苦しいので、一応仮メアドもお付けしました。こちらの方にご連絡下さっても大丈夫です!お願いします(_ _) >>733
「730」だけど、importする物の一部が赤字になってる感じ?
(ちなみに「732」は私じゃないぞ。)
だったら、importの赤字になってる所にマススカーソル乗せて少し待つと「シンボル〜が解決できません」って出るから、
そこで「Add dependency on 〜」って項目選べば自動でプロジェクトに組み込んでくれるよ。
(プロジェクトに組み込むのに少々時間(数分)かかる場合があるから気長に待ってくれ)
import出来てるのにエラーになる場合は、多分AndroidManifest.xmlにmeta-data書く場所間違ってる。
(<application〜>の下じゃなくて中に書いてるとか…)
もしくは単純にJNIの設定間違えてるだけだと思うよ。
(それとも他のJavaのコードだけにしたらエラーなくビルド出来る感じ?) >>734
あれwそうだったんですね笑(_ _)
仰っている通り赤字になっていたのでクリックすれば解決し、しっかりサンプルの広告が掲示されるようになりました!
色々手間暇かけて教えていただき本当にありがとうございました!!助かりました!! vs2017comuで作業しているのですが。
ふと思い付いたサンプルを形にしようとしたら、知っていたけどプロジェクト作成までがメンドイ。
じゃあ雛形作って物置に置いて、そこからコピーしてプロジェクト名書き換えて使うか・・・と思ったら、VS上から書き換えられないのかな見付からない。
面倒でも手作業で毎回作るか・・・はあ。
#いやDXの話ではないなコレは。でもDXでの話なんです。 >>740
わざわざ御教え下さったのに気が付かず2ヶ月近く放置してしまいました。
申し訳ございません。
こんな事出来るんですね・・・思えば、あっても不思議ではない機能です。
ただ、作ってZIPに固めたは良いけど、それの使い方が分からず四苦八苦してしまいました。
なんの事はない、スタートページから利用を案内されるのですね(^^;
1回しか固めていないハズのZIPが2ヶ所に同じものが作ってあったり、プロジェクトテンプレート利用するとディレクトリが同名で二重に掘られたりと把握しかねる仕様ではありますが、手作業で書き直せそうなXMLだから何とかなりそうです。
ありがとうございました。 >>662
dxlibは開発環境の操作を別途学習する必要があるんだよね
Unityとかはほとんど全ての作業がパッケージ化されてる
素材集めさえも
dxlibの作成者や普及を望む人たちはそれに気付くべきだった いやそもそもライブラリとエンジンの違いだし、その違いはそのままでいいと思う
今となってはdxlibではクロスプラットフォーム対応が弱すぎる
コンシューマーへのリリースはPlay,Doujin!っていうよくわからん1社を通さなきゃならんし Unityみたいにしろとは言ってない
ライブラリだけ提供して、はい後は各自で勝手にやってねってやり方がまずかった 作者がさんざん説明している主旨を理解していないだけじゃん
DXライブラリは作者自身が現場で使っているものを他の皆にも提供しますというスタンスで、
ゲームに特化した便利機能を極力採用していないのも、プログラミング技術を転用しやすいようにとのことだよ ただのマルチメディアライブラリなのでゲーム作るかどうかは当人次第ですよ。
作ろうと思えば作れるってだけです。 >>753
公式サイトにはそんなこと書いてないんだけど
本人? >>756
公式サイトの掲示板で機能要望の際などに、そのように回答している例がいくつもあるよ
プログラミング技術を転用しやすい〜の旨は公式サイトの「DXライブラリの仕様と特徴」に書いてある 最近は忙しいらしいな
バグ修正したら早めに新しいリリースをしてほしいが 結局はエンジン系に移るのは避けられないでしょ
Unityが仮になくてもUnrealやGodotにも負けてるよ てか、目指している方向がゲームエンジンとは違うでしょ。比べるほうが間違ってる。 unityはエディタ込みの制作環境でDXlibは命令(関数)セットを束ねたライブラリで、抽象度の差でDXlibの方が遥かに軽いって認識。
とはいえunityを試験導入した訳ではないのだけれど。
同じコードで検証した人っているのかな? NFTゲーム、ブロックチェーンゲームに今すぐ参入しなさい
これからこの市場は100倍になる
2年もしたら先行者利益が失われてブルーオーシャンからレッドオーシャンになるだろう それが事実ならわざわざ他人を呼び込んで儲けを減らす行為は利益がない
よって信用できないw 先行者利益を得るには、後行者が居ないと無理だからなw DXライブラリを使ってアンドロイド用のゲームを作ってる(作った)人いる? >>770
おれも。
unityがどんなものか試しに使ってみたけど、予想外に難しかった…
ワクワク感はあるんだけどね。
「unityでゲームを作っても8割はコーディングだ」と言ってる人もいたので、結局慣れてる方のDXに戻って来た >>794
勉強のためにいじっています。
unityとかすごいと思います(習得しようともしています)が、なんか違う感があって。
自分は昔ゲーム開発にたずさわった事があるだけのおじいさんなので、ピコピコゲームにunity はいらんだろうと思ってしまいます。なのでDXでって感じです。知らないところで色々と動くのが嫌なんですよ。 Dxlibってスマホアプリに広告入れるのってできるの? クラスのコピーコンストラクタとか代入とかって
単純に全メンバコピーでOKな場合は書かない方が良いのな
なんでこんな遅いんだろうと色々試行錯誤してググってたらこんな説明があったわ
>デフォルト演算子は、優れたコードを生成するためにどのような作業が必要かを把握しています。
>この結果作成されるコードは、ユーザーが作成したコードよりもはるかに高速です。
>これは、プログラマが通常使用できないアセンブリレベルの機能をコンパイラが利用できるためです。
>そのため、デフォルト演算子が必要な作業をこなしてくれる場合は、プログラムでこれらの演算子をユーザー定義によって宣言する必要はありません。
ttps://docs.oracle.com/cd/E19205-01/821-2495/bkahq/index.html >>796
>知らないところで色々と動くのが嫌なんですよ。
まあ、でも道のりは遠いよ。DXLIBで状態遷移やらコンテナ管理のフレームワーク積み上げていくのは。
専門学校の教材向けとしては良いけれどその現場ですら昨今はOpenCiv3Dとか言い出してるし。
当たり判定もライブラリだのみか!と内心戦慄する思いではあるけれど。 現在DXライブラリでMMD表示とモーション再生のサンプルを作っているのですが
モデルは表示されるのに何故かモーションが再生されず困ってます。
MMDモデルとモーションデータは読み込めているようで、それぞれ939589632,0とハンドル値が返ってきています。
デバッグしてみるとMV1AttachAnim()が-1を返してくるのですがこの原因がわかりません。
int ModelHandle = MV1LoadModel("MMD/初音ミク/Lat式/Lat式ミクVer2.31/Lat式ミクVer2.31_Normal.pmd");
int VmdH = MV1SetLoadModelAnimFilePath("MMD/モーション/シュレディンガイガーのこねこ_モーション/シュレディンガイガーのこねこ_Lat式ミク.vmd");
int AttachIndex = MV1AttachAnim(ModelHandle, 0, VmdH);
他のモーションデータをいくつか試してみても同様の症状です。
何か原因わかる方いましたら教えてください。 >>812
MV1SetLoadModelAnimFilePath()の使い方が間違ってるのかな
下のは困ってる事情は別だけど、その辺りのコード使ってるから参考になるかも
https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4266 ありがとうございます。関数仕様を調べ直しました。
どうもvmdファイルの指定の仕方が根本的に違ったようですね…
モーションデータをリネームしてモデルデータと同ディレクトリに配置したところ、無事に再生されました。
(てっきりモデルとモーションを別に読み込んでアタッチすれば良いものと思っていましたが違うんですね) ゲームをして遊びながら稼ぐ時代が到来したぞ
NFTアートとNFTゲームとGameFiとブロックチェーンゲームと
DeFiとメタバースに提供する側・作る側として参入しよう。
(むりなら参加する側でもいい)
DAOとPlay-to-Earn(遊んで稼ぐ)が世界の未来になる
特にNFTアートとNFTゲームとGameFiは今なら先行者利益取れるぞ
NFTアートとNFTゲームとGameFiはこれから1000倍規模の市場になる Nimは至高のプログラミング言語と言われてるので使ってみたいと思ったけど、DXライブラリ的なものはなさそうで(?)残念。
C++は難しすぎる… dxlib.dll使って好きな言語から呼び出しなよ
コンパイル時間がかからない言語だと作業効率が格段に良くなるよ 教えてくれて超ありがとう。
「DXライブラリ置き場」の説明文に「C++言語用のゲームライブラリです。」とあるので、Nim等では使用不可だと思ってた… nimってC++のlibを読み込めるんじゃなかったっけ
dllで使用する場合は「VisualC# 用パッケージ」にあるものだったはず
これはC++のソースを機械的にdllに変換しているらしいので、C#かどうかは問わない
(C#の関数定義のヘッダーファイルが用意されているだけ) 日本語で処理内容を書いたらコードにしてくれる
AI Programmerってサイトを雑談スレで知ったんだけど
DXライブラリの関数も認識してくれるみたい
試しにDrawFormatStringで文字列描画するって入れてみただけなんだけど
普通に認識してびっくりした 起動画面にDXライブラリのロゴを入れておきたいな、と思い付きで思い立ち、サイト見に行ったらトップページの一番上にあるロゴしか、らしいロゴがなかった。
あーーー、うーん・・・。
ほなら、マイクロソフトのDirectXのロゴはどうなってる?
取り敢えず仮のでっちあげの参考に・・・と思ったら、負けず劣らず中々にデザイン性が低い(笑)。
感性肌ではない技術屋寄りな感性は嫌いじゃないしむしろ好感が持てるけど、それでもデザイン性が低いモノは低い。
とは言え好き勝手に批判しているけれど、私自身もデザイン出来ないからウダウダしている訳で。
ttps://imgur.com/a/rtaxY0p 直リンし直し。
ttps://i.imgur.com/owdZYUo.png これ思い出した
ttps://www.nicovideo.jp/watch/sm1972187 ,__.,、_,、
( (´・ω・`)
u u∩u ∩
(・ω・ | |
| |
| ノ
∪∪
`ヽ.__/
| / |
| / ミ |
| ビターン / ミ |
| \、_,ノ 、_/ |
| _,ノ ,、_,、 ( |
| `) ('ヽ、 )) ___──
| ヽ /  ̄ ̄ ̄
| / ,- ヽ  ̄ ̄ ̄──
| '⌒)(__,/ ヽ__)(` |
| /' '^\ | 金髪顔でDXライブラリを我が物顔で語り
コミケに出て東方作者抜かす、東方二次まで否定し威張り散らしたおじさんスレが6周年w
自作ゲーム開発者たちのメンバー募集
https://echo.5ch.net/test/read.cgi/gamedev/1484755223/ このライブラリ好きだから使い倒したいけどシェーダーさっぱり分からんなぁ
世の中にはDXライブラリでPBR実装してる猛者がいるみたいだけど >>827
https://echo.5ch.net/test/read.cgi/gamedev/1484755223/166
166 :Hiromiti:2017/01/23(月) 08:35:33.99 ID:W7jAWX1Z
俺ぐらいの人間になるとね
人を集めようとはせずに一人になることを求めたがる
自分一人の方が楽だし、俺の感性や頭脳に追いつく人間もいない
回りの人間のレベルに合わせてみたり、
回りの人間に説明して説得する時間が勿体無いから
「もういいよ。全部、俺がやるから」と言って何でも自分でやろうとする
俺はそういう常人にはない特殊な感性を持った人物です
本人がやりたいと思ったことは世間の常識に囚われず本当にやってみせる
2ちゃんねる管理人ひろゆきを正式メンバーに入れることも冗談ではないよ?
チャンスさえあって、自分の目の前に彼が偶然現れれば
迷いなく彼に「俺に力を貸せ」と言ってることでしょう
これは仕事ではないので給料など出さん
その代わり面白いゲームを誕生させようぜ
だが、たくさん売れればその売り上げはメンバー全員で山分けしようぜ
あのクラスになれば金なんて腐るほど持ってるんだろう?
だったら目先の金(給料)などどうでもいいじゃん?
その代わり、面白いゲームを作ろう!
史上最強の同人ゲームを作ろう!
それを冬コミで売るなら、冬コミでトップセールスを記録してみようぜ!
ZUN氏の東方シリーズを超えるほどのね >>827
288 :Hiromiti:2017/01/27(金) 02:36:35.36 ID:fq1oBnv1
DXライブラリはPS4やPSVITAのゲーム開発にも対応したからね
同人ゲームでPS4のゲームが開発できるんだぜ?魅力的じゃない?
それにDXライブラリのプログラミングの本質的な開発に専念できるところも
分かりやすくて気に入ってる
複雑なツールの操作を必要とせず、DXライブラリ関数をC言語プログラムで呼び出すだけで済むし
まあ、来月からプログラミング講座を開くので楽しみにしておいてよ
2年後の冬コミで同人ゲームを出展させることも本気ですから
まあ予定より早くゲームが完成したなら
その時点で売ればいいが、最長で2年の開発期間という意味
525 :Hiromiti:2017/02/09(木) 17:05:25.61 ID:U0omOnFe
俺は堀井雄二を超えてみせる >>827
192 :Hiromiti:2017/01/23(月) 21:57:01.74 ID:W7jAWX1Z
同人ゲームを売るために東方の二次創作に頼る時点で間違っておる!
東方シリーズの作者ZUN氏は、自分でオリジナルのブランドを誕生させたことが成功の鍵
あの人は誰かの同人ゲームの二次創作で勝負を掛けたわけではなく
自分のゲーム、自分の音楽で勝負に出た
それで東方シリーズというオリジナルブランドを確立
後に続く者がZUN氏にあやかって東方の二次創作ゲームを作るとかさ
それこそ保身に頼りすぎ
自分で勝負に出ようとしない
オリジナルのキャラで、オリジナルのゲームジャンル(弾幕シューティング)を誕生させる
これが必要なんだよ 思う所あって、作業中断してポリゴンで3Dダンジョン作ってみたくなった。
3Dなんて30~40年前にIF文とLINE文で頑張ったのが最後で、一切触れてこなかった分野だからメインループ構築が最初の難関・・・と思ったのだけど、公式で入門プログラムが用意してあった。10年以上前から先読みされているとか、準備が良すぎる。
マップデータに対して、実際の表示が何故か左右反転しているのが気になるからそれを解消したいけれど、stateの値が即値でそれが目障りだからenumで差し替え・・・という段階。
はやく3D命令を把握したいです。 # 半ば日記です。
公式の3Dサンプル1の迷路をいじることで、初めて3Dプログラム読み書きしているのですが。
実際の作画が通り道をチューブ状に表示していたのを、文字通り壁ブロックを表示するように変更。
その為にBlenderの初期画面でサンプル表示される立方体を少し加工してエクスポート。ついでにMV1変換の過程でまるで知らなかったライティングで痛い目に遭う。おかげで暗く明減するアニメ効果を実装。
今は両脇がまるで見えない問題の解決策として、視点位置を現在の自スペース中心から後方に移動して視界を確保。でもそのまま左右を向くと物陰から枝道を覗く視点になってしまうので、視点移動を実装中。少数は避けて通ったint派なので、中学生に戻った気分です。
そして根本的なこと。
もしかして、3Dって座標系違いますよね?
2Dの画面では左上の原点(0,0)から右下に加算していきますが、3Dのxz面(迷路的には床面)は原点(0,0)が右上に伸びて行くイメージ。だから、迷路を定義しているchar Map[BLOCK_NUM_Z][BLOCK_NUM_X] が上源反転している様に見えたというか。
状況証拠の蓄積からの推理であって、間違って確信すると後々恥ずかしいのでここで白状してしまいますが。 > もしかして、3Dって座標系違いますよね?
YES >>841
回答ありがとうございます。
安心して作業に戻れます。 モデルの座標やスケール値を読み出せるのに、なんでサイズを読み出す命令がないんだろう・・・。
Blenderと往復して壁のデータ作って変換して持ち込んでいるけれど、何もいじらないと中心点が原点扱いになるから、Blenderで上に持ち上げて底面がゼロ原点になるようにいじらないといかん。
マテリアルも一発OKで持ち込めたけれど、データサイズから察するにfbx→MV1ではテクスチャを持ち込めないみたいだから、やり方も勉強しないと。Blenderならアドオンで他形式からでも持ち込めるよね、多分。
と言うかビュア起動が面倒!変換はコマンドラインでどうにかなりませんかね。 公式に確認してお許しが出たので、晒す。
色々とままならないままなのですが。
・照度が上がらない!
画面をもう少し明るくしたいのですが、ライト関係への理解がまだまだ浅い・・・。
・動作が少し重い。
これでも改善したのですが。1動作60コマなのがまずいかな。
・暗くて見えませんが、壁のデザインは古代ギリシャ建築を参考にしたのにローマ風だなあ・・・とBlender画面見ながら思ったのですが、実際のゲーム画面だと何故かSF風味。造り手としては、なんで!?どうして!?意味分からん!状態です。
・壁が点滅する。
解像度を上げたら軽減しましたが、アンチエイリアスが満足行くレベルでない様子。どうすれバインダー・・・これがSF風味に一役買っているんだろうなあ。 https://dot_up.org/uploda/dot_up.org3010520.zip.html
pass:dxl
なんとアップローダがNGワード???
dotとupの間のアンダーバーを抜いてください。 アンチエイリアスが全然効かねえ・・・二次元はGraphFilter()の解説通りにすればまあ解決だけれど、同じ手法を三次元では全然効果ない。
シェーダーに手を出さないとアカンのか・・・? ま、いっか。 >>847
テクスチャじゃなくてポリゴン描画の輪郭にアンチエイリアスかけるには
DxLib_Initの前にSetFullSceneAntiAliasingModeで
マルチサンプルのレベルとクオリティを指定する必要がある
(デフォルトだとOFFになってる)
ちなみに有効にした場合は描画先を必ずDX_SCREEN_BACKにして
ScreenFlipで表示を切り替えるダブルバッファリングが必須になる あと3Dモデルのテクスチャにアンチエイリアスかけたいなら
事前にDxLibModelViewerに読み込んで、テクスチャの所の
フィルタリングモードで設定してMV1で保存しておけばいい
3DファイルをいじりたくないならMV1SetTextureSampleFilterModeで
プログラムからでも設定は変えれる >>849 >>850
すいませんボケかましてしまいました。
3D関連だからと、3Dのところばかり読み直していました。
現在データ構造の見直し中で半端に書き直してしまいコンパイル出来ない状態ですが、一文を追加しておきました。
つぶやきを拾って下さって、ありがとうございました。 三角関数の生数字0~1未満のVECTORを2つ、その中点を取りたいのですが単純にVAdd()で加算してVScale()で0.5f倍するだけだと何かうまく行かない。
もう少し具体的には、空中をふらつく視線と90度旋回を別々にやるとうまくいくのに、同時にやろうとすると70~80度旋回で完了してしまう感じ。
まあもっとも、角度degをDX_PI_F/180でradにしないといけない所を90で割っていた私なので、またポカしているだけなのだろう。 初めての3Dプログラミングで実数に四苦八苦していましたが、結局中身はintで下駄を履いた角度で保持することになりました。
まだ少し実数で計算する所もあるけれど、取り敢えず再度コンパイルが通るようになったので肩の荷を一つ下ろせました。
ダンジョン徘徊RPGを作りたいけど、先立つ技術がないとシンドいですね(^^; このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 2996日 23時間 36分 41秒 5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login レス数が1000を超えています。これ以上書き込みはできません。