- 1 名前:名前は開発中のものです。 mailto:sage [2008/10/25(土) 17:37:53 ID:BCFbbKco]
- Cを習得した程度のスキルでも、
GUIのゲームを比較的容易に作成する事を可能にする、 「DXライブラリ」に関するスレッドです。 DXライブラリの詳細ついては homepage2.nifty.com/natupaji/DxLib/ を参照して頂きたい。 DXライブラリに関するテクニックなどの情報交換などを行う事で、 多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。 過去スレ:DXライブラリ 総合スレッド pc11.2ch.net/test/read.cgi/gamedev/1197468399/
- 160 名前:名前は開発中のものです。 mailto:sage [2008/11/25(火) 22:23:11 ID:VmASE6nW]
- >>157-159
いろいろとありがとうございます。 アドバイスのおかげで、それらしいのはできました。 縦には動かしていないのですが、とりあえずそれっぽい動作はします。 ソースは以下の通りです。 private void GraphOff(int dot,int graphHandle) { for (int i = 0; i < 640 / dot; i++) { DrawGraph(i * dot - 640, 0, graphHandle, 0); DrawGraph(640 - i * dot, 0, graphHandle, 0); } } これでまた問題が出たのですが、この処理非常に重いです。 FPS30固定にしているのですがこれをするとFPS10〜15になります。 軽くする良い方法は何かないでしょうか?
- 161 名前:名前は開発中のものです。 mailto:sage [2008/11/25(火) 22:39:54 ID:MBrRa9Zc]
- 640 / dot ←この計算をfor文の前にやって適当な変数に代入しておく
- 162 名前:名前は開発中のものです。 mailto:sage [2008/11/25(火) 23:02:53 ID:EDWbdjkC]
- >>160
i < 640/dot を i < 160/dot くらいにまで下げてみる ぼかすのがゲーム上そんなに大事じゃなかったら このくらいで妥協するのが一番
- 163 名前:157 mailto:sage [2008/11/26(水) 02:18:18 ID:eTjv2Xnv]
- >>160
そんなに回数要る? dotの値がいくら位で何回位描画しているのかとか、コードの意図とかちょっとわからんので ↓とどっちのコードの方が性能良いのかよくわからんけど… int times = 4;//描画回数:4〜16推奨 int gap = 2;//ギャップ:1〜4推奨。残像拳のような効果を狙うなら大き目に。 SetDrawBlendMode( DX_BLENDMODE_ALPHA , 32 ) ;//描画回数×ブレンド率=128〜256推奨 for (int i = 0; i < times; i++){ DrawGraph( i*gap - times*gap, 0, GHandle, 0); DrawGraph( times*gap - i*gap, 0, GHandle, 0); }
- 164 名前:名前は開発中のものです。 mailto:sage [2008/11/26(水) 04:53:23 ID:mqCcsZAV]
- >>160
本当に速度が必要で、それなりのクオリティーが欲しいなら LoadSoftImage関数とLoadSoftImageToMem関数を使うといいかもしれない。 自分は近頃、DXライブラリまったく触ってなかったから、どんなもんか わからんが、説明を読む限りではこっちの関数で処理して GraphHandleをつけて、表画させる方が高速みたいだし・・・・・
- 165 名前:名前は開発中のものです。 [2008/11/27(木) 05:33:03 ID:9lHdy+ss]
- DXライブラリとは直接関係ないのですが、
DXライブラリとかの関数を変な使い方すると、めっちゃ重くなったりして(コンパイルエラーが出るわけではない)、 上手く扱わないとたとえ数百行のプログラムでさえ上手く動かないのに 市販されてる3Dゲームとかだとそれこそ想像もつかない量のプログラム書いてると思うんですが それを全く重くならないように作るというのはまさに神の所業としか思えないんですが・・・ やはり職人的なひとはそれほどすごいってことでしょうか? それとも単にまだ自分が未熟なだけでしょうか? なんか抽象的な質問ですみません。
- 166 名前:名前は開発中のものです。 mailto:sage [2008/11/27(木) 07:22:55 ID:UFJsiMGy]
- >>165
普通に使っている分には問題ないと思うけど… コード量も関係ないし。 メインのループ(秒間30〜60回くらい回しているとこ)の外で1回やれば済む処理を ループの中で毎回やってたりしてない? 例えばグラフィックハンドルへの画像の読み込みを毎回やっているとか。
- 167 名前:名前は開発中のものです。 mailto:sage [2008/11/27(木) 12:05:54 ID:tLRoJzh6]
- DXライブラリもよっぽど変な使い方しない限りめっちゃ重くはならんでしょ。
そりゃまぁPCの性能にもよるけど。 市販されてる3Dゲームとかは、俺はヘボプログラマだからそれこそ神の領域にしか思えないけど 同じ市販ゲームでも、すごいグラフィックなのに軽快なのとか、やったらもっさりして重いのとかあるから そこらへんはプログラマの腕次第でしょ。 凄腕のプログラマは極限まで無駄な処理を省いてるんだと思う。
- 168 名前:名前は開発中のものです。 mailto:sage [2008/11/27(木) 17:02:45 ID:HwZNU9zJ]
- メモリの1バイトは血の一滴ですね
- 169 名前:名前は開発中のものです。 [2008/11/27(木) 18:56:41 ID:9lHdy+ss]
- >>166-167
なるほどサンクス・・・ 確かに無駄に繰り返してるかもしれない・・・。
- 170 名前:名前は開発中のものです。 mailto:sage [2008/11/27(木) 20:46:39 ID:GnzSYpCC]
- フォントのサイズ変更とかと勝手に予想
- 171 名前:名前は開発中のものです。 mailto:sage [2008/11/27(木) 22:41:46 ID:LOD/UyCK]
- >>161-164
ありがとうございます。 回数がご指摘の通り多すぎました。 >>157のコードと併用して、思っていたぼかしができました。 コードは私の作成したコードと>>157のコードを関数化しただけなので省略させていただきます。
- 172 名前:名前は開発中のものです。 mailto:sage [2008/11/27(木) 22:48:28 ID:tLRoJzh6]
- フォントのサイズ変更はしゃれにならんほど遅いからな……。
別フォント用意すりゃいいことだが。
- 173 名前:名前は開発中のものです。 [2008/11/28(金) 05:15:28 ID:10isJ4oY]
- SetWaitVSyncFlag(FALSE);
にしたらドラゴンボールの世界になってワロタ
- 174 名前:名前は開発中のものです。 mailto:sage [2008/11/29(土) 16:25:44 ID:BtMciNRd]
- PlayMusic関数で再生位置の指定ってできないの?
- 175 名前:名前は開発中のものです。 [2008/11/29(土) 22:48:46 ID:kaHILOZB]
- >>101
いますぐ昔の再放送の刑事ドラマやドラマの 事務所シーンを見るんだ!!! パソコンのディスプレイあるだろアレみるとわかりやすい
- 176 名前:名前は開発中のものです。 mailto:sage [2008/11/30(日) 02:55:10 ID:Kx1+nHAm]
- >>175
あれ今見るとなんでそう見えるか理解出来るな タイヤが逆回転して見えるのとかも
- 177 名前:名前は開発中のものです。 [2008/12/01(月) 09:18:57 ID:PQmt2oZj]
- 3Dでゼルダみたいなゲーム作りたいんだけど
DXライブラリ(3D)で完璧に作ったのと DirectXで完璧に作ったのだったら動きのサクサクさにどれくらい差が出るのかな? PCの性能は結構良いのでそれは関係なく 個人的にはマリオ64くらいのクオリティーは出したいと思ってるんだけど 始めての大型ゲームなんで全く想像付かない
- 178 名前:名前は開発中のものです。 mailto:sage [2008/12/01(月) 09:51:01 ID:Mqk5OkvC]
- 3Dのゼルダってまんま64とGCのゼルダじゃね?
- 179 名前:名前は開発中のものです。 mailto:sage [2008/12/01(月) 10:23:13 ID:PQmt2oZj]
- はい
- 180 名前:名前は開発中のものです。 mailto:sage [2008/12/01(月) 16:53:55 ID:B+fc1nCX]
- DirectXで作るって言ったってどうせ自分でラッピングするんだから一緒だと思うぞ
- 181 名前:名前は開発中のものです。 mailto:sage [2008/12/01(月) 16:57:45 ID:Mqk5OkvC]
- >>177
そのプロセッサ専用のライブラリを熟知してれば サクサク動くゲームになる 例えばPS2ならEEとかのベクトル計算のためのライブラリの仕様とか windowsマシンにはそんな計算機能はデフォルトじゃついてないから どうしてもグラボ依存になる
- 182 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 00:02:20 ID:zbFv8Mtr]
- int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpc, int nC){
ChangeWindowMode(TRUE); SetDrawScreen(DX_SCREEN_BACK); while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){ ClsDrawScreen(); 〜〜 ScreenFlip(); } } ↑こう書いたとき、〜〜 の部分の処理が毎回変わるモノだった場合でも、よほど〜〜の処理が長くならない限り、 ScreenFlip()があることによって、画面に出力される周期は〜〜の処理時間によらない、と考えていいんでしょうか? なんか説明下手ですみません・・・。 たとえば、指数関数的に動く物体を作りたいとして、 〜〜の部分を「毎回n=n+1して、x^nの位置に画像を出力」という内容にしたとした場合、 ループが来るたびにnが増えるからx^nの計算の処理が多少だんだん増えていくと思うのですが、 もしその処理時間も画面出力に影響してしまったら、動きが時間の正確な指数関数にならないと思うのですが、 『ScreenFlip()によって、「処理が終わっても、規定時間δtが来るまでは画面出力しない」という仕組みが加わってるので、 処理時間に影響せず一定時間ごとに画面出力される。 ただし、もちろん 処理時間の方がδtを超えてしまったら、重くなるという別の影響は出てくる。』 というものだと解釈していいのでしょうか? (すみません。アク禁中の代レスなので、返事できないかもしれません。)
- 183 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 08:48:55 ID:jLo5RDUc]
- どうでもいいがProcessMessage()の場所が俺の好みじゃなかった。
本文は読んでいない。
- 184 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 08:53:50 ID:l3NK/S0H]
- SetWaitVSyncFlagがFALSEで無い限りは
- 185 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 09:50:01 ID:ptyOGcVX]
- リフレッシュレートに依存する。
- 186 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 21:13:42 ID:xSROB0kK]
- x^nの計算なんか描画処理に比べたらほんの一瞬
- 187 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 22:13:19 ID:g62jpxUX]
- そういやCを独学でやってて最初に詰まったのがべき乗計算だったなw
- 188 名前:名前は開発中のものです。 [2008/12/03(水) 05:14:23 ID:Ts8WjI0J]
- >>153
#include <stdio.h> #include <windows.h> void main (){ int cell=0,jinzo18=2,jinzo17=2,tensinhan=25,seimeiryoku=1; int hikinobasi=0; cell+=jinzo17; for(hikinobasi=0;hikinobasi<30;hikinobasi++){printf("おお\n"); SleepEx(200,TRUE);} printf("天津飯「まずい17号を吸収しやがった・・・チャオズ俺は死ぬかも知れない\n");SleepEx(2000,TRUE); printf("セル「天津飯!!雑魚が何をするつもりだ!」\n");SleepEx(4000,TRUE); printf("天津飯「新気功砲!!ハー」\n");SleepEx(200,TRUE); printf("セル「(゚Д゚)ぬお!\n");SleepEx(200,TRUE); while(tensinhan>0){ printf("セル「<`Д´>おのれー」\n");SleepEx(200,TRUE); printf("天津飯「(; ゚Д゚)ハァー!」\n");SleepEx(500,TRUE); tensinhan-=seimeiryoku;} printf("天津飯「化け物め・・・・うう・・・・」\n");SleepEx(5000,TRUE); printf("セル「むううう」\n");SleepEx(1000,TRUE); printf("セル「こんな雑魚に足止め食らうとは」\n");SleepEx(4000,TRUE); cell=jinzo17+jinzo18; for(hikinobasi=0;hikinobasi<100;hikinobasi++){printf("おお\n"); SleepEx(50,TRUE);} printf("完全体セル「すばらしい力だ 諸君!!」\n"); SleepEx(10000,TRUE); }
- 189 名前:名前は開発中のものです。 mailto:sage [2008/12/03(水) 05:38:32 ID:ecRDRm37]
- 同一内容の文字列を毎フレーム表示する処理があり、
空のサーフェスを作成 → 一旦バックバッファに文字列を描画 → バックバッファから空のサーフェスに文字列の画像を取得 こうして予め文字列を描画しておいたサーフェスから 毎回メイン処理でDrawGraphしているのですが、どうもスッキリしません。 しかもGetDrawScreenGraphの説明にもある通り透過色が使用出来ません。 DXライブラリでは作成したサーフェスに直接描画出来ないのでしょうか? やりたい事は「同じ文字列を毎フレーム描画する処理を軽くしたい」だけなのですが、 文字グラフィックファイルを用意することは出来れば避けたいので、良い方法があったら教えて下さい1
- 190 名前:189 mailto:sage [2008/12/03(水) 05:45:19 ID:ecRDRm37]
- 無駄に長くて分かり難くなってしまいました。
(例えば説明文等の)同一の文字列を毎フレーム描画する処理を軽くしたいが 文字グラフィックファイルを用意する以外で良い方法があったら誰か教えて下さいです。
- 191 名前:名前は開発中のものです。 mailto:sage [2008/12/03(水) 09:09:23 ID:Zrkeui/r]
- DrawStringで十分軽いと思う
フォントハンドルを毎回読み込んだりしていない?
- 192 名前:189 mailto:sage [2008/12/03(水) 17:18:45 ID:ecRDRm37]
- >>191
お返事遅くなって申し訳ありません。 当方の環境ではDrawStringでやった場合のFPSが30くらいでDrawGraphにすると60になりました。 DirectX自体、文字描画にGDIを使っているのでビデオカードで処理できるBitBltの方が高速だと思っていました。数年前の知識ですが。。 低スペックでも快適に動くように作りたいので、DrawStringは極力使いたくないです。
- 193 名前:189 mailto:sage [2008/12/03(水) 17:29:14 ID:ecRDRm37]
- フォントの変更は行っていないので、フォントハンドルは使用していないです。
- 194 名前:名前は開発中のものです。 mailto:sage [2008/12/03(水) 18:07:17 ID:o+fnXJLe]
- そんなにたくさんの文字を同時に表示してるのかな?
それともPC環境が悪すぎる? 俺普通にDrawString使ってるけど別に遅くなった事ないよ? 普通に60FPS出てる。古いノートパソコンで。 最高でまぁ10行程度の表示しかしてないけど。
- 195 名前:名前は開発中のものです。 [2008/12/03(水) 18:30:58 ID:JlppSG1I]
- いやそれじゃ全くテストになってないから。
192の知識通り、今も文字列表示は遅いよ。 189の方法が適切だと思うし、他に方法を提示できないのは申し訳ないけど、 少なくとも文字列表示が遅いって前提でレスされると無駄だと思ったので口を出してみた。
- 196 名前:名前は開発中のものです。 [2008/12/03(水) 18:37:18 ID:JlppSG1I]
- ×少なくとも文字列表示が遅いって前提でレスされると無駄だと
○少なくとも文字列表示が遅いって前提を否定するレスは無駄だと
- 197 名前:名前は開発中のものです。 mailto:sage [2008/12/03(水) 19:17:52 ID:o+fnXJLe]
- 俺の事?
別にテストしたわけじゃなくて、普通に使ってるだけなんだが。 文字列表示が遅いってのが前提なら、そもそもグラフィック表示だって遅いだろ。 グラフィック表示が遅いから他の方法はありますか? って質問があったとしたら まず現在どういう環境でどれだけのグラフィックをどういう方法で表示させてるのか教えろってのは普通の流れだろ? そこをかっとばしてグラフィック表示処理そのものを早くする方法を考えるのは無駄な話だ。
- 198 名前:名前は開発中のものです。 mailto:sage [2008/12/03(水) 19:27:15 ID:zxrZF3eH]
- 確かに
今与えられた情報だけではなんともいえんな
- 199 名前:名前は開発中のものです。 mailto:sage [2008/12/03(水) 19:41:02 ID:RJPTfL79]
- 文字列の長さ、量がまずわからない。
「フォントの変更は行っていない」というのが、フォントの大きさやアンチエイリアス有無の変更は行っているかもしれないとも読める。
- 200 名前:名前は開発中のものです。 [2008/12/04(木) 00:31:01 ID:jlPFeEOB]
- >>197
文字列表示はグラフィック表示より遅いって常識知らないの? そこは議論の余地なしだから言ったまで。 それと、テストじゃないなら>>194の報告は不適切。 まあ上記の前提を知らなかった故だからしかたないと言えばしかたないが、ややこしくなるのでなかったほうがよかったな。 情報は少ないが、前提を知っているば容易に共感できるし、解決方法を知っている人ならこの情報量でも回答できるかもしれない。
- 201 名前:名前は開発中のものです。 mailto:sage [2008/12/04(木) 00:33:46 ID:GF73/yq8]
- >>197
>文字列表示が遅いってのが前提なら、そもそもグラフィック表示だって遅いだろ。 (;^ω^)
- 202 名前:名前は開発中のものです。 mailto:sage [2008/12/04(木) 02:05:10 ID:z7drhJqc]
- 何人か偉そうにレスしてるけど、誰もライブラリのソース見てないのか?
DXライブラリは文字を描画する前にテクスチャにキャッシュしてるから 同じ文字なら2回目以降はほぼDrawGraphと同じコストで処理は完了する キャッシュ用のテクスチャは512x512だから画面一杯に異なった文字を 描画するくらいしない限りは文字列描画特有の遅さは発生しないぞ まあ、毎フレームキャッシュに無い文字を描画したら一般に言うところの 「文字列表示が遅い」ってのに当てはまるけど
- 203 名前:名前は開発中のものです。 mailto:sage [2008/12/04(木) 09:46:46 ID:ggjOtlxc]
- 良スレage
みなぎってきた、学校でゲーム作ってくる
- 204 名前:名前は開発中のものです。 mailto:sage [2008/12/04(木) 10:33:56 ID:763fKCgi]
- >>200
何を言ってるんだ君は。 60FPSで動いてるゲームに、一回のDrawString処理を追加しただけで30FPSにまで落ちたりするか? 普通はしないだろ? じゃあどういう処理にしてるんだ? っつーレベルの話だぞ? 192が出してる情報はその程度って事。
- 205 名前:名前は開発中のものです。 mailto:sage [2008/12/04(木) 12:47:01 ID:GF73/yq8]
- >>204
>>202 分からない(・∀・)カエレ!!
- 206 名前:名前は開発中のものです。 mailto:sage [2008/12/05(金) 18:06:46 ID:YY5q+8z/]
- ソフトウェア描画モードと言う物があるらしいのですが、
どれのことなのでしょうか? 一部のPCだと動かなかったりする時にこれを使えばいいらしいのですが……。 リファレンスを見た限りそれっぽいのがありませんでした。
- 207 名前:名前は開発中のものです。 mailto:sage [2008/12/05(金) 18:19:39 ID:MN0oAg79]
- この辺をどうぞ。
ttp://www.dkut.flnet.org/dxlibwiki/?3D%B5%A1%C7%BD%A4%F2%BB%C8%A4%A6%A4%AB%A4%C9%A4%A6%A4%AB%A4%F2%A5%E6%A1%BC%A5%B6%A1%BC%A4%CB%C1%AA%C2%F2%A4%B5%A4%BB%A4%EB
- 208 名前:名前は開発中のものです。 mailto:sage [2008/12/05(金) 20:49:20 ID:YY5q+8z/]
- >>207
ありがとうございます。 SetScreenMemToVramFlag( FALSE ); と、 SetUse3DFlag( FALSE ); を使ったらよさそうなのでこの二つを使ってみようと思います。
- 209 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 03:56:27 ID:5bnbt+Lt]
- >>204
垂直同期を使って処理していれば僅かな処理の遅さでFPSは半分になることがある そしてGDIは遅い >>189はDrawStringを使用せずに同等の文字描画処理をする方法を模索しているであって デバッグをしてくれと言っているわけじゃないんだから君がムキになるのは頓珍漢な話 俺を含め解決策が分からない初心者が回答することが間違い
- 210 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 04:17:22 ID:MshHJhkd]
- 俺もよくわからないけど、>>189は
>DXライブラリでは作成したサーフェスに直接描画出来ないのでしょうか? と明確に聞いてるぞ。 それを初心者が関係ない知ったか話をしてるとしか見えない。 「俺は平気だよ?」とか言う話もいらないと思うww >>202もヒントになると思うけど多分新しい文字列を頻繁に表示しようとしてるんじゃないかな。 毎フレーム更新される数値を表示するって事も多いと思うし。
- 211 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 06:11:31 ID:VA5mVjgv]
- ファイナルファンタジーの裏ワザででてくる
数字ゲームとかあれ作ると面白そう
- 212 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 09:55:12 ID:DCsCuBVu]
- ブラックジャックといいたまへ
- 213 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 11:21:34 ID:gOAp6PdO]
- >>189は「同じ文字列」って書いてるじゃないか。
まあ任意のオフスクリーンバッファに描いてそれを転送したい、というのはわかるが できる機能を追加するかDXライブラリをやめるしかないのでは。
- 214 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 16:48:54 ID:KujsLoK9]
- クリックイベントを使いたいのですがどうすればよいのでしょうか?
公式などにクリックイベントのコードがなかったのでここで質問させてください
- 215 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 17:16:43 ID:t9JSHoeE]
- SetWaitVSyncFlagをFalseにしておいて、16666マイクロミリセカンド待機し描画
↑で描画すると30フレームあたりまで落ちるんですが、SetWaitVSyncFlagをFalseにしてても同期するってあるんでしょうか? 待機を16200にすると60フレームになるので、同期でひっかかってるんだと思うのですが……
- 216 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 17:19:10 ID:KujsLoK9]
- 自己解決しました
- 217 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 20:30:15 ID:JBa6ugiY]
- なんだったのよw
- 218 名前:215 mailto:sage [2008/12/07(日) 18:55:49 ID:OyZdJ9xq]
- すいません、こちらも自己解決しました……
- 219 名前:名前は開発中のものです。 [2008/12/08(月) 00:25:32 ID:2qR4Oo16]
- Cの入門書見てる段階なんですが、DXライブラリでのゲーム製作講座を見てみたら、
C言語というより、DXライブラリ言語でのプログラミングという印象を受けました。 DXライブラリを使ってプログラミングする場合は、 Cのほうは入門書を一通り読んだだけの知識でよくて、 あとはDXライブラリの使い方をきちんとやるほうがいいんですよね?
- 220 名前:名前は開発中のものです。 mailto:sage [2008/12/08(月) 00:31:03 ID:A0APKyuo]
- Cも一通りの知識は要るだろうから
平行して勉強しなはれ。
- 221 名前:名前は開発中のものです。 mailto:sage [2008/12/08(月) 00:55:25 ID:FYgRMyd9]
- いやいや
もろCで作ってるよ printfが絵を表示する関数になるだけ
- 222 名前:名前は開発中のものです。 mailto:sage [2008/12/08(月) 03:17:20 ID:tsVxmfWH]
- >>219
「C言語 = printfやscanf、fopen等の標準関数」だと思ってるんならそれは間違いだ
- 223 名前:名前は開発中のものです。 mailto:sage [2008/12/08(月) 03:37:47 ID:ghLgcWkz]
- >>219
それでいいと思うよー。 Cの文法なんて覚える事少ないし、入門書片手に取り掛かっちゃえば大丈夫。 今後も、プログラミングで何かを作る時、基本的にDXライブラリのような、外部のライブラリの使い方を覚えるって作業が大半になるよ。 入門書に書いてあるstdio.hのprintfみたいな標準関数を覚えるみたいに。
- 224 名前:名前は開発中のものです。 mailto:sage [2008/12/08(月) 11:27:49 ID:tq0zLS+0]
- >>210
>>>202もヒントになると思うけど多分新しい文字列を頻繁に表示しようとしてるんじゃないかな。 >毎フレーム更新される数値を表示するって事も多いと思うし。 それこそ仕様を見直せとしか言いようがないようなw 毎フレーム更新する数値や文章ならプレイヤーに全文しっかり読ませるためものじゃないだろうし。
- 225 名前:名前は開発中のものです。 mailto:sage [2008/12/08(月) 18:07:49 ID:ofH1nP7I]
- ノベルとかアドベンチャーのサンプルがあるサイト教えてください
- 226 名前:名前は開発中のものです。 mailto:sage [2008/12/08(月) 18:55:26 ID:dZklSLE8]
- 公式にあったような気がするが……。
- 227 名前:名前は開発中のものです。 [2008/12/08(月) 20:50:58 ID:vtoynrkC]
- Dxライブラリを使って
60フレーム固定のシューティングを作ろうと思ったんですが 公式をみると「グラフィックがぶれがひどくなる」と書いてあって ttp://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N13 で、実際にサンプル試してみたら 確かに時々ひっかかる感じが。 これって改善はできないものなんでしょうか?
- 228 名前:名前は開発中のものです。 mailto:sage [2008/12/08(月) 20:56:58 ID:a6vLxw2w]
- 内部の更新処理(当たり判定,posX += vXなど)のフレームレートを倍にするとか
- 229 名前:名前は開発中のものです。 mailto:sage [2008/12/09(火) 01:42:49 ID:osPjvukM]
- >>227
int Time; を LONGLONG Time; に、 Time = GetNowCount(); を Time = GetNowHiPerformanceCount(); に while( GetNowCount() - Time < 17) {} を while (GetNowHiPerformanceCount() - Time < (1000000 / 60)) {} に 書き換えてみたら?
- 230 名前:名前は開発中のものです。 mailto:sage [2008/12/09(火) 13:46:02 ID:uZqK3Qyt]
- >>224
RPGやアドベンチャーゲームなら 1文字ずつゲーム内Windowに描画され、ゲーム内Windowごと表示非表示を切り替えられるって仕様は普通に有るでしょう
- 231 名前:名前は開発中のものです。 mailto:sage [2008/12/09(火) 15:29:12 ID:hNxQdCPd]
- >>226
文字表示ぐらいしかないと思うけど・・・
- 232 名前:名前は開発中のものです。 mailto:sage [2008/12/09(火) 15:52:37 ID:R5xGo07t]
- サンプルゲームみたいなのでなかったっけ?
前はあったはずなんだが。
- 233 名前:名前は開発中のものです。 mailto:sage [2008/12/09(火) 17:32:59 ID:PL50HxGw]
- 「DXライブラリサンプルゲームのダウンロード」のページにある
「スクリプトプレーヤー」の事じゃないかな。
- 234 名前:名前は開発中のものです。 mailto:sage [2008/12/09(火) 18:26:23 ID:hNxQdCPd]
- スクリプトプレーヤーはソースの意味が分からない
いきなりスクリプトのソースみろとか言われてもなにがなにやらって感じ
- 235 名前:名前は開発中のものです。 mailto:sage [2008/12/09(火) 19:12:36 ID:PIQiSLzg]
- サンプル見たいって話を聞くたびに
見てもわかるの? という疑問が湧く。 同じ動きをするものを自分で書けるくらいの技量がなければ結局読めない気がする。 他人のソース読むのが超苦手で自分で書いた方が早い俺限定の話だが。
- 236 名前:名前は開発中のものです。 mailto:sage [2008/12/09(火) 19:35:05 ID:aLvm7Uo6]
- >>235
アルゴリズムは同程度の技量がないと読めないけど、設計はそんなことないよ。 スクリプトプレイヤーのソース見たけどちょっと酷いな。 マジックナンバー、関数長すぎる、グローバル変数使いまくりetc... たしかにこれ読めとか言われても俺も困る。 自作2Dライブラリ作ってたんだが、画像系の実装が終了したところで 面倒になってきたんでDXライブラリを使うことにした。おまいらよろしく。
- 237 名前:名前は開発中のものです。 mailto:sage [2008/12/09(火) 20:33:33 ID:PIQiSLzg]
- >>236
ああ確かに設計は読みたいかも。 うまい人のクラス構成とかはみてみたい。
- 238 名前:名前は開発中のものです。 mailto:sage [2008/12/09(火) 20:44:39 ID:HfON+uiV]
- うまい人のコードは,クラスやメソッドの実装にどんどんステップインしていかなくても
表面だけ見れば理解できるよね
- 239 名前:名前は開発中のものです。 mailto:sage [2008/12/09(火) 20:59:26 ID:MCEWLRF6]
- >>228
すいません、内部処理は一定化したかったので・・ >>229 ありがとうございます! 引っかかりが無くなりました。 タイマーの精度の問題だったみたいですね。
- 240 名前:名前は開発中のものです。 mailto:sage [2008/12/10(水) 15:43:30 ID:LwDc2Tc0]
- >>220
>>221 >>222 >>223 printfなどが関数だということを意識していませんでした。 まさに、C言語=標準関数のつもりで勉強していました。 外部ライブラリを使うのだから、それから提供される関数の使い方を勉強するのは当たり前ですね。 プログラミングに対する疑問が少し解けました。どうもありがとうございました。
- 241 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 09:38:29 ID:oww0q0NN]
- 画像の、ある部分だけを拡大して描画することは出来ますか?
ループ表示する背景の一部分だけを拡大表示したいです。
- 242 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 10:38:54 ID:qrB4r20j]
- やった事ないけど、指定領域だけで新しいグラフィックハンドルを作るとかできるはずだから、
それをしてから拡大表示させればいいんじゃないかな。 前提条件として矩形範囲のみって事になるけど。
- 243 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 11:00:28 ID:oww0q0NN]
- >>242
なるほど、ありがとうございます。矩形なのでその辺は大丈夫です。 でもアクションゲームみたいに、リアルタイムにバックグラウンドをスクロールさせつつ、 拡大率を変えてバックグラウンド表示するのはその方法ではコストが掛かり過ぎて無理なようですね。 DrawExtendGraphの描画元矩形指定関数があれば一発なのに><
- 244 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 11:23:00 ID:qrB4r20j]
- 背景をスクロールさせつつ、拡大部分もスクロールさせるのかな。
それじゃ無理だね。 それならいっそ、 背景を普通の大きさで書く → 画面の描画範囲を設定(SetDrawArea) → 背景を拡大して書く ってやってみるのはどうだろう。 背景を二回描くから、やり方によってはコストかかるけど……。
- 245 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 12:23:15 ID:Otp3maXe]
- つDrawRectExtendGraph
- 246 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 12:49:25 ID:oww0q0NN]
- >>244
そうですそうです、元画像の一部分を拡大表示したいんです。 >>245 おお!ありがとうございます。そんな関数があったんですねw 面倒でも自分でDxLib.hをチェックしないと駄目ですねw
- 247 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 18:14:48 ID:dqaLLhhf]
- 今 トルネコやシレンみたいな2Dダンジョン探索ゲームを
800 x 600 ウィンドウモードで作っているんですが 2Dゲームは 640 x 480 が基本だと聞きました。 800x600だと何か不都合でも起こるんでしょうか?
- 248 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 19:08:10 ID:e0uVhp4S]
- 32x32とか16x16のブロックがぴったり収まらない、とか。?
- 249 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 20:15:13 ID:dqaLLhhf]
- 画面下と右にブロックが半分だけ表示されるのは我慢しようと思います。
800x600だと特定の環境ではちらつきが酷いとかだったら嫌だなぁと思いまして
- 250 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 20:24:18 ID:yokHYtBf]
- >>247
処理速度の問題とユーザの環境の問題 ちなみにカラーモードも256色パレットモードが基本だった しかしそれは過去の話 今はPCのスペックは十分だし、800*600の画面モードの無いPCの方が少ないと思うから問題ないかと
- 251 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 21:25:42 ID:aXKygAOw]
- ちょっと便乗
CRT使いなんでわからないんだけど 液晶の場合、画面サイズに合わない画面モードの表示ってどうなるの? 1)全画面に拡大されてぼやける 2)表示分だけ使われて余白は黒塗りになる
- 252 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 21:28:59 ID:8ZHcqCMQ]
- >>251
A.液晶の設定しだい
- 253 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:00:48 ID:J3zydYCS]
- 初心者で悪いんだが質問。
うまく言えないんだけど player.cpp内でint宣言をして、void player()で増減させる。 そして 「enemy.cpp内」で「player.cppのvoid player()」で増減したint変数を使用して作りたい判定があるんだけど。 こういうのってやっぱり出来ないのかな?
- 254 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:09:20 ID:r3WCUutT]
- extern
- 255 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:12:35 ID:dqaLLhhf]
- player.cppでグローバル変数としてint宣言して
enemy.cppの冒頭にextern宣言すれば判定にも使えるようになるよ
- 256 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:19:36 ID:J3zydYCS]
- >>254-255
ああそれ忘れてたww おもいっくそ素材ファイルの読み込みで使ってたのに ありがと、助かった
- 257 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:34:39 ID:ztObze9Y]
- -- player.cpp --
int i; void player(){ i += 1; } -- enemy.cpp -- extern int i; void enemy(){ if(i) ・・・ ;}
- 258 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:49:50 ID:aXKygAOw]
- >>252
即レスサンクス。 じゃあプログラムする側としては あんまり気にしても意味無いんだ・・ 勉強になりますた。
- 259 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 23:04:32 ID:e0uVhp4S]
- >画面サイズ
最近流行りの低価格ノートPCとかだと、どんな感じなんだろう? 縦600くらい?
- 260 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 01:45:20 ID:E/1bppJy]
- if(enemy01_Life < 0){
DeleteGraph( enemy01 ) ; } else if(hitS < hit ){ PlaySoundMem( hit_test , DX_PLAYTYPE_BACK ); shotflag = 0; enemy01_Life -=1; } このコードで、最後のenemy01_Life -=1の判定を一回だけ判定場合ってどうすればいいの? ダメージ判定だけがどうしても残ってしまう
|

|