トップページgamedev
1001コメント397KB

DXライブラリ 総合スレッド 2008

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2008/10/25(土) 17:37:53ID:BCFbbKco
Cを習得した程度のスキルでも、
GUIのゲームを比較的容易に作成する事を可能にする、
「DXライブラリ」に関するスレッドです。

DXライブラリの詳細ついては
http://homepage2.nifty.com/natupaji/DxLib/
を参照して頂きたい。

DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。

過去スレ:DXライブラリ 総合スレッド
      http://pc11.2ch.net/test/read.cgi/gamedev/1197468399/
0161名前は開発中のものです。2008/11/25(火) 22:39:54ID:MBrRa9Zc
640 / dot ←この計算をfor文の前にやって適当な変数に代入しておく
0162名前は開発中のものです。2008/11/25(火) 23:02:53ID:EDWbdjkC
>>160
i < 640/dot

i < 160/dot
くらいにまで下げてみる


ぼかすのがゲーム上そんなに大事じゃなかったら
このくらいで妥協するのが一番
01631572008/11/26(水) 02:18:18ID: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);
}
0164名前は開発中のものです。2008/11/26(水) 04:53:23ID:mqCcsZAV
>>160
本当に速度が必要で、それなりのクオリティーが欲しいなら
LoadSoftImage関数とLoadSoftImageToMem関数を使うといいかもしれない。

自分は近頃、DXライブラリまったく触ってなかったから、どんなもんか
わからんが、説明を読む限りではこっちの関数で処理して
GraphHandleをつけて、表画させる方が高速みたいだし・・・・・
0165名前は開発中のものです。2008/11/27(木) 05:33:03ID:9lHdy+ss
DXライブラリとは直接関係ないのですが、

DXライブラリとかの関数を変な使い方すると、めっちゃ重くなったりして(コンパイルエラーが出るわけではない)、
上手く扱わないとたとえ数百行のプログラムでさえ上手く動かないのに
市販されてる3Dゲームとかだとそれこそ想像もつかない量のプログラム書いてると思うんですが
それを全く重くならないように作るというのはまさに神の所業としか思えないんですが・・・
やはり職人的なひとはそれほどすごいってことでしょうか?
それとも単にまだ自分が未熟なだけでしょうか?

なんか抽象的な質問ですみません。
0166名前は開発中のものです。2008/11/27(木) 07:22:55ID:UFJsiMGy
>>165
普通に使っている分には問題ないと思うけど…
コード量も関係ないし。
メインのループ(秒間30〜60回くらい回しているとこ)の外で1回やれば済む処理を
ループの中で毎回やってたりしてない?
例えばグラフィックハンドルへの画像の読み込みを毎回やっているとか。
0167名前は開発中のものです。2008/11/27(木) 12:05:54ID:tLRoJzh6
DXライブラリもよっぽど変な使い方しない限りめっちゃ重くはならんでしょ。
そりゃまぁPCの性能にもよるけど。

市販されてる3Dゲームとかは、俺はヘボプログラマだからそれこそ神の領域にしか思えないけど
同じ市販ゲームでも、すごいグラフィックなのに軽快なのとか、やったらもっさりして重いのとかあるから
そこらへんはプログラマの腕次第でしょ。

凄腕のプログラマは極限まで無駄な処理を省いてるんだと思う。
0168名前は開発中のものです。2008/11/27(木) 17:02:45ID:HwZNU9zJ
メモリの1バイトは血の一滴ですね
0169名前は開発中のものです。2008/11/27(木) 18:56:41ID:9lHdy+ss
>>166-167
なるほどサンクス・・・
確かに無駄に繰り返してるかもしれない・・・。
0170名前は開発中のものです。2008/11/27(木) 20:46:39ID:GnzSYpCC
フォントのサイズ変更とかと勝手に予想
0171名前は開発中のものです。2008/11/27(木) 22:41:46ID:LOD/UyCK
>>161-164
ありがとうございます。
回数がご指摘の通り多すぎました。
>>157のコードと併用して、思っていたぼかしができました。
コードは私の作成したコードと>>157のコードを関数化しただけなので省略させていただきます。
0172名前は開発中のものです。2008/11/27(木) 22:48:28ID:tLRoJzh6
フォントのサイズ変更はしゃれにならんほど遅いからな……。
別フォント用意すりゃいいことだが。
0173名前は開発中のものです。2008/11/28(金) 05:15:28ID:10isJ4oY
SetWaitVSyncFlag(FALSE);

にしたらドラゴンボールの世界になってワロタ
0174名前は開発中のものです。2008/11/29(土) 16:25:44ID:BtMciNRd
PlayMusic関数で再生位置の指定ってできないの?
0175名前は開発中のものです。2008/11/29(土) 22:48:46ID:kaHILOZB
>>101

いますぐ昔の再放送の刑事ドラマやドラマの
事務所シーンを見るんだ!!!


パソコンのディスプレイあるだろアレみるとわかりやすい
0176名前は開発中のものです。2008/11/30(日) 02:55:10ID:Kx1+nHAm
>>175
あれ今見るとなんでそう見えるか理解出来るな
タイヤが逆回転して見えるのとかも
0177名前は開発中のものです。2008/12/01(月) 09:18:57ID:PQmt2oZj
3Dでゼルダみたいなゲーム作りたいんだけど
DXライブラリ(3D)で完璧に作ったのと
DirectXで完璧に作ったのだったら動きのサクサクさにどれくらい差が出るのかな?
PCの性能は結構良いのでそれは関係なく
個人的にはマリオ64くらいのクオリティーは出したいと思ってるんだけど
始めての大型ゲームなんで全く想像付かない
0178名前は開発中のものです。2008/12/01(月) 09:51:01ID:Mqk5OkvC
3Dのゼルダってまんま64とGCのゼルダじゃね?
0179名前は開発中のものです。2008/12/01(月) 10:23:13ID:PQmt2oZj
はい
0180名前は開発中のものです。2008/12/01(月) 16:53:55ID:B+fc1nCX
DirectXで作るって言ったってどうせ自分でラッピングするんだから一緒だと思うぞ
0181名前は開発中のものです。2008/12/01(月) 16:57:45ID:Mqk5OkvC
>>177
そのプロセッサ専用のライブラリを熟知してれば
サクサク動くゲームになる

例えばPS2ならEEとかのベクトル計算のためのライブラリの仕様とか
windowsマシンにはそんな計算機能はデフォルトじゃついてないから
どうしてもグラボ依存になる
0182名前は開発中のものです。2008/12/02(火) 00:02:20ID: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を超えてしまったら、重くなるという別の影響は出てくる。』
というものだと解釈していいのでしょうか?

(すみません。アク禁中の代レスなので、返事できないかもしれません。)
0183名前は開発中のものです。2008/12/02(火) 08:48:55ID:jLo5RDUc
どうでもいいがProcessMessage()の場所が俺の好みじゃなかった。
本文は読んでいない。
0184名前は開発中のものです。2008/12/02(火) 08:53:50ID:l3NK/S0H
SetWaitVSyncFlagがFALSEで無い限りは
0185名前は開発中のものです。2008/12/02(火) 09:50:01ID:ptyOGcVX
リフレッシュレートに依存する。
0186名前は開発中のものです。2008/12/02(火) 21:13:42ID:xSROB0kK
x^nの計算なんか描画処理に比べたらほんの一瞬
0187名前は開発中のものです。2008/12/02(火) 22:13:19ID:g62jpxUX
そういやCを独学でやってて最初に詰まったのがべき乗計算だったなw
0188名前は開発中のものです。2008/12/03(水) 05:14:23ID: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);
}
0189名前は開発中のものです。2008/12/03(水) 05:38:32ID:ecRDRm37
同一内容の文字列を毎フレーム表示する処理があり、

空のサーフェスを作成 → 一旦バックバッファに文字列を描画 → バックバッファから空のサーフェスに文字列の画像を取得

こうして予め文字列を描画しておいたサーフェスから
毎回メイン処理でDrawGraphしているのですが、どうもスッキリしません。
しかもGetDrawScreenGraphの説明にもある通り透過色が使用出来ません。
DXライブラリでは作成したサーフェスに直接描画出来ないのでしょうか?
やりたい事は「同じ文字列を毎フレーム描画する処理を軽くしたい」だけなのですが、
文字グラフィックファイルを用意することは出来れば避けたいので、良い方法があったら教えて下さい1
01901892008/12/03(水) 05:45:19ID:ecRDRm37
無駄に長くて分かり難くなってしまいました。
(例えば説明文等の)同一の文字列を毎フレーム描画する処理を軽くしたいが
文字グラフィックファイルを用意する以外で良い方法があったら誰か教えて下さいです。
0191名前は開発中のものです。2008/12/03(水) 09:09:23ID:Zrkeui/r
DrawStringで十分軽いと思う
フォントハンドルを毎回読み込んだりしていない?
01921892008/12/03(水) 17:18:45ID:ecRDRm37
>>191
お返事遅くなって申し訳ありません。
当方の環境ではDrawStringでやった場合のFPSが30くらいでDrawGraphにすると60になりました。
DirectX自体、文字描画にGDIを使っているのでビデオカードで処理できるBitBltの方が高速だと思っていました。数年前の知識ですが。。
低スペックでも快適に動くように作りたいので、DrawStringは極力使いたくないです。
01931892008/12/03(水) 17:29:14ID:ecRDRm37
フォントの変更は行っていないので、フォントハンドルは使用していないです。
0194名前は開発中のものです。2008/12/03(水) 18:07:17ID:o+fnXJLe
そんなにたくさんの文字を同時に表示してるのかな?
それともPC環境が悪すぎる?

俺普通にDrawString使ってるけど別に遅くなった事ないよ?
普通に60FPS出てる。古いノートパソコンで。
最高でまぁ10行程度の表示しかしてないけど。
0195名前は開発中のものです。2008/12/03(水) 18:30:58ID:JlppSG1I
いやそれじゃ全くテストになってないから。
192の知識通り、今も文字列表示は遅いよ。
189の方法が適切だと思うし、他に方法を提示できないのは申し訳ないけど、
少なくとも文字列表示が遅いって前提でレスされると無駄だと思ったので口を出してみた。
0196名前は開発中のものです。2008/12/03(水) 18:37:18ID:JlppSG1I
×少なくとも文字列表示が遅いって前提でレスされると無駄だと
○少なくとも文字列表示が遅いって前提を否定するレスは無駄だと
0197名前は開発中のものです。2008/12/03(水) 19:17:52ID:o+fnXJLe
俺の事?
別にテストしたわけじゃなくて、普通に使ってるだけなんだが。

文字列表示が遅いってのが前提なら、そもそもグラフィック表示だって遅いだろ。

グラフィック表示が遅いから他の方法はありますか? って質問があったとしたら
まず現在どういう環境でどれだけのグラフィックをどういう方法で表示させてるのか教えろってのは普通の流れだろ?

そこをかっとばしてグラフィック表示処理そのものを早くする方法を考えるのは無駄な話だ。
0198名前は開発中のものです。2008/12/03(水) 19:27:15ID:zxrZF3eH
確かに
今与えられた情報だけではなんともいえんな
0199名前は開発中のものです。2008/12/03(水) 19:41:02ID:RJPTfL79
文字列の長さ、量がまずわからない。

「フォントの変更は行っていない」というのが、フォントの大きさやアンチエイリアス有無の変更は行っているかもしれないとも読める。
0200名前は開発中のものです。2008/12/04(木) 00:31:01ID:jlPFeEOB
>>197
文字列表示はグラフィック表示より遅いって常識知らないの?
そこは議論の余地なしだから言ったまで。
それと、テストじゃないなら>>194の報告は不適切。
まあ上記の前提を知らなかった故だからしかたないと言えばしかたないが、ややこしくなるのでなかったほうがよかったな。

情報は少ないが、前提を知っているば容易に共感できるし、解決方法を知っている人ならこの情報量でも回答できるかもしれない。
0201名前は開発中のものです。2008/12/04(木) 00:33:46ID:GF73/yq8
>>197
>文字列表示が遅いってのが前提なら、そもそもグラフィック表示だって遅いだろ。

(;^ω^)
0202名前は開発中のものです。2008/12/04(木) 02:05:10ID:z7drhJqc
何人か偉そうにレスしてるけど、誰もライブラリのソース見てないのか?

DXライブラリは文字を描画する前にテクスチャにキャッシュしてるから
同じ文字なら2回目以降はほぼDrawGraphと同じコストで処理は完了する
キャッシュ用のテクスチャは512x512だから画面一杯に異なった文字を
描画するくらいしない限りは文字列描画特有の遅さは発生しないぞ

まあ、毎フレームキャッシュに無い文字を描画したら一般に言うところの
「文字列表示が遅い」ってのに当てはまるけど
0203名前は開発中のものです。2008/12/04(木) 09:46:46ID:ggjOtlxc
良スレage
みなぎってきた、学校でゲーム作ってくる
0204名前は開発中のものです。2008/12/04(木) 10:33:56ID:763fKCgi
>>200

何を言ってるんだ君は。
60FPSで動いてるゲームに、一回のDrawString処理を追加しただけで30FPSにまで落ちたりするか?
普通はしないだろ?

じゃあどういう処理にしてるんだ? っつーレベルの話だぞ?

192が出してる情報はその程度って事。
0205名前は開発中のものです。2008/12/04(木) 12:47:01ID:GF73/yq8
>>204
>>202

分からない(・∀・)カエレ!!
0206名前は開発中のものです。2008/12/05(金) 18:06:46ID:YY5q+8z/
ソフトウェア描画モードと言う物があるらしいのですが、
どれのことなのでしょうか?
一部のPCだと動かなかったりする時にこれを使えばいいらしいのですが……。
リファレンスを見た限りそれっぽいのがありませんでした。
0207名前は開発中のものです。2008/12/05(金) 18:19:39ID: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
0208名前は開発中のものです。2008/12/05(金) 20:49:20ID:YY5q+8z/
>>207
ありがとうございます。
SetScreenMemToVramFlag( FALSE );
と、
SetUse3DFlag( FALSE );
を使ったらよさそうなのでこの二つを使ってみようと思います。
0209名前は開発中のものです。2008/12/06(土) 03:56:27ID:5bnbt+Lt
>>204
垂直同期を使って処理していれば僅かな処理の遅さでFPSは半分になることがある
そしてGDIは遅い

>>189はDrawStringを使用せずに同等の文字描画処理をする方法を模索しているであって
デバッグをしてくれと言っているわけじゃないんだから君がムキになるのは頓珍漢な話
俺を含め解決策が分からない初心者が回答することが間違い
0210名前は開発中のものです。2008/12/06(土) 04:17:22ID:MshHJhkd
俺もよくわからないけど、>>189

>DXライブラリでは作成したサーフェスに直接描画出来ないのでしょうか?

と明確に聞いてるぞ。
それを初心者が関係ない知ったか話をしてるとしか見えない。
「俺は平気だよ?」とか言う話もいらないと思うww

>>202もヒントになると思うけど多分新しい文字列を頻繁に表示しようとしてるんじゃないかな。
毎フレーム更新される数値を表示するって事も多いと思うし。
0211名前は開発中のものです。2008/12/06(土) 06:11:31ID:VA5mVjgv
ファイナルファンタジーの裏ワザででてくる
数字ゲームとかあれ作ると面白そう
0212名前は開発中のものです。2008/12/06(土) 09:55:12ID:DCsCuBVu
ブラックジャックといいたまへ
0213名前は開発中のものです。2008/12/06(土) 11:21:34ID:gOAp6PdO
>>189は「同じ文字列」って書いてるじゃないか。
まあ任意のオフスクリーンバッファに描いてそれを転送したい、というのはわかるが
できる機能を追加するかDXライブラリをやめるしかないのでは。
0214名前は開発中のものです。2008/12/06(土) 16:48:54ID:KujsLoK9
クリックイベントを使いたいのですがどうすればよいのでしょうか?
公式などにクリックイベントのコードがなかったのでここで質問させてください
0215名前は開発中のものです。2008/12/06(土) 17:16:43ID:t9JSHoeE
SetWaitVSyncFlagをFalseにしておいて、16666マイクロミリセカンド待機し描画

↑で描画すると30フレームあたりまで落ちるんですが、SetWaitVSyncFlagをFalseにしてても同期するってあるんでしょうか?

待機を16200にすると60フレームになるので、同期でひっかかってるんだと思うのですが……
0216名前は開発中のものです。2008/12/06(土) 17:19:10ID:KujsLoK9
自己解決しました
0217名前は開発中のものです。2008/12/06(土) 20:30:15ID:JBa6ugiY
なんだったのよw
02182152008/12/07(日) 18:55:49ID:OyZdJ9xq
すいません、こちらも自己解決しました……
0219名前は開発中のものです。2008/12/08(月) 00:25:32ID:2qR4Oo16
Cの入門書見てる段階なんですが、DXライブラリでのゲーム製作講座を見てみたら、
C言語というより、DXライブラリ言語でのプログラミングという印象を受けました。
DXライブラリを使ってプログラミングする場合は、
Cのほうは入門書を一通り読んだだけの知識でよくて、
あとはDXライブラリの使い方をきちんとやるほうがいいんですよね?
0220名前は開発中のものです。2008/12/08(月) 00:31:03ID:A0APKyuo
Cも一通りの知識は要るだろうから
平行して勉強しなはれ。
0221名前は開発中のものです。2008/12/08(月) 00:55:25ID:FYgRMyd9
いやいや
もろCで作ってるよ
printfが絵を表示する関数になるだけ
0222名前は開発中のものです。2008/12/08(月) 03:17:20ID:tsVxmfWH
>>219
「C言語 = printfやscanf、fopen等の標準関数」だと思ってるんならそれは間違いだ
0223名前は開発中のものです。2008/12/08(月) 03:37:47ID:ghLgcWkz
>>219
それでいいと思うよー。
Cの文法なんて覚える事少ないし、入門書片手に取り掛かっちゃえば大丈夫。
今後も、プログラミングで何かを作る時、基本的にDXライブラリのような、外部のライブラリの使い方を覚えるって作業が大半になるよ。
入門書に書いてあるstdio.hのprintfみたいな標準関数を覚えるみたいに。
0224名前は開発中のものです。2008/12/08(月) 11:27:49ID:tq0zLS+0
>>210

>>>202もヒントになると思うけど多分新しい文字列を頻繁に表示しようとしてるんじゃないかな。
>毎フレーム更新される数値を表示するって事も多いと思うし。

それこそ仕様を見直せとしか言いようがないようなw
毎フレーム更新する数値や文章ならプレイヤーに全文しっかり読ませるためものじゃないだろうし。
0225名前は開発中のものです。2008/12/08(月) 18:07:49ID:ofH1nP7I
ノベルとかアドベンチャーのサンプルがあるサイト教えてください
0226名前は開発中のものです。2008/12/08(月) 18:55:26ID:dZklSLE8
公式にあったような気がするが……。
0227名前は開発中のものです。2008/12/08(月) 20:50:58ID:vtoynrkC
Dxライブラリを使って
60フレーム固定のシューティングを作ろうと思ったんですが

公式をみると「グラフィックがぶれがひどくなる」と書いてあって
ttp://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N13

で、実際にサンプル試してみたら
確かに時々ひっかかる感じが。

これって改善はできないものなんでしょうか?
0228名前は開発中のものです。2008/12/08(月) 20:56:58ID:a6vLxw2w
内部の更新処理(当たり判定,posX += vXなど)のフレームレートを倍にするとか
0229名前は開発中のものです。2008/12/09(火) 01:42:49ID:osPjvukM
>>227
int Time; を
LONGLONG Time; に、

Time = GetNowCount(); を
Time = GetNowHiPerformanceCount(); に

while( GetNowCount() - Time < 17) {} を
while (GetNowHiPerformanceCount() - Time < (1000000 / 60)) {} に

書き換えてみたら?

0230名前は開発中のものです。2008/12/09(火) 13:46:02ID:uZqK3Qyt
>>224
RPGやアドベンチャーゲームなら
1文字ずつゲーム内Windowに描画され、ゲーム内Windowごと表示非表示を切り替えられるって仕様は普通に有るでしょう
0231名前は開発中のものです。2008/12/09(火) 15:29:12ID:hNxQdCPd
>>226
文字表示ぐらいしかないと思うけど・・・
0232名前は開発中のものです。2008/12/09(火) 15:52:37ID:R5xGo07t
サンプルゲームみたいなのでなかったっけ?
前はあったはずなんだが。
0233名前は開発中のものです。2008/12/09(火) 17:32:59ID:PL50HxGw
「DXライブラリサンプルゲームのダウンロード」のページにある
「スクリプトプレーヤー」の事じゃないかな。
0234名前は開発中のものです。2008/12/09(火) 18:26:23ID:hNxQdCPd
スクリプトプレーヤーはソースの意味が分からない
いきなりスクリプトのソースみろとか言われてもなにがなにやらって感じ
0235名前は開発中のものです。2008/12/09(火) 19:12:36ID:PIQiSLzg
サンプル見たいって話を聞くたびに
見てもわかるの?
という疑問が湧く。
同じ動きをするものを自分で書けるくらいの技量がなければ結局読めない気がする。

他人のソース読むのが超苦手で自分で書いた方が早い俺限定の話だが。
0236名前は開発中のものです。2008/12/09(火) 19:35:05ID:aLvm7Uo6
>>235
アルゴリズムは同程度の技量がないと読めないけど、設計はそんなことないよ。

スクリプトプレイヤーのソース見たけどちょっと酷いな。
マジックナンバー、関数長すぎる、グローバル変数使いまくりetc...
たしかにこれ読めとか言われても俺も困る。


自作2Dライブラリ作ってたんだが、画像系の実装が終了したところで
面倒になってきたんでDXライブラリを使うことにした。おまいらよろしく。
0237名前は開発中のものです。2008/12/09(火) 20:33:33ID:PIQiSLzg
>>236
ああ確かに設計は読みたいかも。
うまい人のクラス構成とかはみてみたい。
0238名前は開発中のものです。2008/12/09(火) 20:44:39ID:HfON+uiV
うまい人のコードは,クラスやメソッドの実装にどんどんステップインしていかなくても
表面だけ見れば理解できるよね
0239名前は開発中のものです。2008/12/09(火) 20:59:26ID:MCEWLRF6
>>228
すいません、内部処理は一定化したかったので・・

>>229
ありがとうございます!
引っかかりが無くなりました。
タイマーの精度の問題だったみたいですね。
0240名前は開発中のものです。2008/12/10(水) 15:43:30ID:LwDc2Tc0
>>220
>>221
>>222
>>223
printfなどが関数だということを意識していませんでした。
まさに、C言語=標準関数のつもりで勉強していました。
外部ライブラリを使うのだから、それから提供される関数の使い方を勉強するのは当たり前ですね。
プログラミングに対する疑問が少し解けました。どうもありがとうございました。
0241名前は開発中のものです。2008/12/11(木) 09:38:29ID:oww0q0NN
画像の、ある部分だけを拡大して描画することは出来ますか?
ループ表示する背景の一部分だけを拡大表示したいです。
0242名前は開発中のものです。2008/12/11(木) 10:38:54ID:qrB4r20j
やった事ないけど、指定領域だけで新しいグラフィックハンドルを作るとかできるはずだから、
それをしてから拡大表示させればいいんじゃないかな。

前提条件として矩形範囲のみって事になるけど。
0243名前は開発中のものです。2008/12/11(木) 11:00:28ID:oww0q0NN
>>242
なるほど、ありがとうございます。矩形なのでその辺は大丈夫です。
でもアクションゲームみたいに、リアルタイムにバックグラウンドをスクロールさせつつ、
拡大率を変えてバックグラウンド表示するのはその方法ではコストが掛かり過ぎて無理なようですね。
DrawExtendGraphの描画元矩形指定関数があれば一発なのに><
0244名前は開発中のものです。2008/12/11(木) 11:23:00ID:qrB4r20j
背景をスクロールさせつつ、拡大部分もスクロールさせるのかな。
それじゃ無理だね。

それならいっそ、

背景を普通の大きさで書く → 画面の描画範囲を設定(SetDrawArea) → 背景を拡大して書く

ってやってみるのはどうだろう。
背景を二回描くから、やり方によってはコストかかるけど……。
0245名前は開発中のものです。2008/12/11(木) 12:23:15ID:Otp3maXe
つDrawRectExtendGraph
0246名前は開発中のものです。2008/12/11(木) 12:49:25ID:oww0q0NN
>>244
そうですそうです、元画像の一部分を拡大表示したいんです。

>>245
おお!ありがとうございます。そんな関数があったんですねw
面倒でも自分でDxLib.hをチェックしないと駄目ですねw
0247名前は開発中のものです。2008/12/12(金) 18:14:48ID:dqaLLhhf
今 トルネコやシレンみたいな2Dダンジョン探索ゲームを
800 x 600 ウィンドウモードで作っているんですが
2Dゲームは 640 x 480 が基本だと聞きました。

800x600だと何か不都合でも起こるんでしょうか?
0248名前は開発中のものです。2008/12/12(金) 19:08:10ID:e0uVhp4S
32x32とか16x16のブロックがぴったり収まらない、とか。?
0249名前は開発中のものです。2008/12/12(金) 20:15:13ID:dqaLLhhf
画面下と右にブロックが半分だけ表示されるのは我慢しようと思います。
800x600だと特定の環境ではちらつきが酷いとかだったら嫌だなぁと思いまして
0250名前は開発中のものです。2008/12/12(金) 20:24:18ID:yokHYtBf
>>247
処理速度の問題とユーザの環境の問題
ちなみにカラーモードも256色パレットモードが基本だった
しかしそれは過去の話
今はPCのスペックは十分だし、800*600の画面モードの無いPCの方が少ないと思うから問題ないかと
0251名前は開発中のものです。2008/12/12(金) 21:25:42ID:aXKygAOw
ちょっと便乗
CRT使いなんでわからないんだけど
液晶の場合、画面サイズに合わない画面モードの表示ってどうなるの?

1)全画面に拡大されてぼやける
2)表示分だけ使われて余白は黒塗りになる
0252名前は開発中のものです。2008/12/12(金) 21:28:59ID:8ZHcqCMQ
>>251
A.液晶の設定しだい
0253名前は開発中のものです。2008/12/12(金) 22:00:48ID:J3zydYCS
初心者で悪いんだが質問。

うまく言えないんだけど

player.cpp内でint宣言をして、void player()で増減させる。
そして
「enemy.cpp内」で「player.cppのvoid player()」で増減したint変数を使用して作りたい判定があるんだけど。

こういうのってやっぱり出来ないのかな?
0254名前は開発中のものです。2008/12/12(金) 22:09:20ID:r3WCUutT
extern
0255名前は開発中のものです。2008/12/12(金) 22:12:35ID:dqaLLhhf
player.cppでグローバル変数としてint宣言して
enemy.cppの冒頭にextern宣言すれば判定にも使えるようになるよ
0256名前は開発中のものです。2008/12/12(金) 22:19:36ID:J3zydYCS
>>254-255
ああそれ忘れてたww
おもいっくそ素材ファイルの読み込みで使ってたのに

ありがと、助かった
0257名前は開発中のものです。2008/12/12(金) 22:34:39ID:ztObze9Y
-- player.cpp --
int i;
void player(){ i += 1; }

-- enemy.cpp --
extern int i;
void enemy(){ if(i) ・・・ ;}
0258名前は開発中のものです。2008/12/12(金) 22:49:50ID:aXKygAOw
>>252
即レスサンクス。

じゃあプログラムする側としては
あんまり気にしても意味無いんだ・・

勉強になりますた。
0259名前は開発中のものです。2008/12/12(金) 23:04:32ID:e0uVhp4S
>画面サイズ
最近流行りの低価格ノートPCとかだと、どんな感じなんだろう?
縦600くらい?
0260名前は開発中のものです。2008/12/13(土) 01:45:20ID: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の判定を一回だけ判定場合ってどうすればいいの?
ダメージ判定だけがどうしても残ってしまう
■ このスレッドは過去ログ倉庫に格納されています