[過去ログ] DXライブラリ 総合スレッド その5 (1001レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1: 2009/12/04(金)16:49 ID:7SKA4I5z(1) AAS
Cを習得した程度のスキルでも、
GUIのゲームを比較的容易に作成する事を可能にする、
「DXライブラリ」に関するスレッドです。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。

【公式】
外部リンク:homepage2.nifty.com
省9
2: 2009/12/04(金)17:07 ID:2O781c7T(1) AAS

3
(2): 2009/12/04(金)17:19 ID:vm4DXNCA(1) AAS
Ver3からPlayMovieToGraphで透明色が適用されないのとちょっとフレーム落ちと音ズレが激しいなあ
もちろん確認のために2.25bでも試したが透明色やフレームレート落ちや音ズレなしで問題なし
4
(2): 2009/12/04(金)18:16 ID:6AQLzT+8(1) AAS
DxLibの暗号化ファイル読み込みに対応した暗号化書き込みってなんでライブラリに入れないんだろう
セーブとか実行時に暗号化して書きたい時って割とあるとおもうんだが・・・
5: 2009/12/04(金)23:18 ID:XUOEwrjE(1) AAS
前スレ>>916
弾幕シューティングではないのだが・・・参考になったさ。ありがとう。
6: 2009/12/05(土)00:35 ID:FfRkZmBc(1) AAS
>>4
確かに使いたいときはよくある。でもそれってDirectXの機能じゃないからじゃ?
7: 2009/12/05(土)01:27 ID:yZDYDRsN(1) AAS
>>4
セーブデータなんて自分で暗号化すれば済むからでしょ。
8
(1): 2009/12/05(土)12:30 ID:CQOWfBMw(1) AAS
ToyStudioでアニメーション作って、MQOで出力したんだけど、
ものすごい膨大な量のMQOデータが出てきたんだけど・・・
アニメーションを作るたびに毎回こんなのが出てくるの?
そもそもこういう出力結果をゲーム内でアニメとして使えるの?
9: 2009/12/05(土)14:14 ID:Sya3hEP4(1) AAS
裏画面全体を拡大縮小したり回転させることとか出来ないかな?
ゲームのエフェクトで画面全体をくるくる回したりしたいんだけど
10: 2009/12/05(土)14:22 ID:UtZjONga(1) AAS
動かないんだったら、描画したヤツを取り込んで一枚の画像にしちゃってまわせばいいんじゃない?

動くんだったら計算させて自前で回転描画すればいいだけだし。
11: 2009/12/05(土)15:12 ID:GsjhaCrH(1/2) AAS
ゲームってグローバル変数使ったほうが普通に綺麗に書ける気がしてきた
12: 2009/12/05(土)15:15 ID:UZumt6OG(1) AAS
>>8
アニメーションxファイルで出せよww
MQOはモーションつかないから連番で出すしかない
13: 2009/12/05(土)16:02 ID:gqFDk2ay(1) AAS
シングルトンはついつい使っちゃうよなあ・・
14: 2009/12/05(土)16:14 ID:IYliNqS4(1) AAS
使っちゃえよ
15: 2009/12/05(土)16:24 ID:rsncbGmt(1/2) AAS
外部リンク[html]:homepage2.nifty.com
これのデスクトップの広さ 1024x768 の方を取得する方法について教えて下さい
16: 2009/12/05(土)16:51 ID:z1L4m3Am(1) AAS
DXライブラリに関係なく
GetSystemMetrics(SM_CXSCREEN);
とかで
17: 2009/12/05(土)17:17 ID:rsncbGmt(2/2) AAS
できました
ありがとうございました
18: 2009/12/05(土)19:31 ID:GsjhaCrH(2/2) AAS
だめだ俺にはローグライクは早かったようだ・・・テトリスからやり直すぜ
19: 2009/12/06(日)00:09 ID:AxjxjhaV(1/3) AAS
俺もグローバル使う位ならスタティック使ってたけど
結局普通にグローバル使った方が楽なことに気付いた
(全てスタティックが駄目というわけではないが)
グローバルでも名前空間とか使えば局所性もある程度保てるんじゃないかなあ
20: 2009/12/06(日)00:10 ID:wryxppBn(1) AAS
環境変数や外部ファイルはグローバル変数なので使用禁止
21: 2009/12/06(日)10:11 ID:+RNAMjqx(1/3) AAS
ゲームに関してはあらゆる関数で共用するものが多いし、
クラスで雁字搦めにして書かない限りグローバル変数使ったほうが分かりやすい
22
(1): 2009/12/06(日)10:20 ID:AO9SCSiS(1) AAS
いざ対戦機能とか、似たような機能を二つ以上配置することを考えると、
「やっぱグローバルやめときゃよかった」ってなる。
23: 2009/12/06(日)10:33 ID:+HYK3UFu(1) AAS
グローバルしか使ってないヘタレPGとしては、どういう恩恵があるのか自体想像がつかん。
24
(1): 2009/12/06(日)10:48 ID:goldsq2u(1) AAS
最悪なのがグローバル変数代わりのシングルトン
>>22のようなことを考えるとグローバルの方がマシ
25: 2009/12/06(日)11:12 ID:Vlb8mlu0(1) AAS
>>24
なんで?
26: 2009/12/06(日)12:19 ID:jMxq/kh5(1/2) AAS
画像復元の処理を追加してたんだが
SetRestoreGraphCallbackに登録する関数で使う変数のために
とりあえず読み込み用クラスのポインタをグローバルなポインタ作ってそこに渡して動作させてる
他に良い方法ない?
27: 2009/12/06(日)14:27 ID:vkleFuhi(1/5) AAS
文字がだんだん表示させる演出すると、
文字の後ろに・が一緒に表示されるという怪現象が……。
なんだこれ?

まあ、たぶん俺のコードのどっか悪いんだろうが。
28: 2009/12/06(日)14:53 ID:P3Xq2+aM(1) AAS
いけないことなんだろうなと思いつつ
グローバルばかりでやってたがそうでもないのかな
29
(1): 2009/12/06(日)15:10 ID:AxjxjhaV(2/3) AAS
それ文字1文字1文字ずつ表示させるって言う意味かな
全角だと1バイト分読み込んだ時に正しく認識されないから
全角の場合は2バイト分読み込ませればいいんじゃないかな
30
(4): 2009/12/06(日)15:34 ID:L7OXdhxz(1/3) AAS
DXライブラリを使ってVC++2008EEでプログラムを作ったんだけれど、
配布するときにDXライブラリをインストールしていないPCでも
起動できるような配布の方法はあるのだろうか
よくわかんないけどDXライブラリランタイムみたいなのがあれば、
それを一緒に配布するみたいな方法とかある?
それとも配布するプログラムとは別にDXライブラリをインストールしてもらうしかないのだろうか。
31
(1): 2009/12/06(日)15:39 ID:bw4St35R(1/3) AAS
>>30
よくわかんないけどたぶん上の[Debug]を[Release]に変えて
出てきたReleaseフォルダを配布すればいいと思う
32
(1): 2009/12/06(日)15:43 ID:ez8iS4so(1) AAS
DxLibはスタティックライブラリだから使うほうはべつになにもいらない
ダイナミックなDxLibがあるのかわからんけど自作とかしたならその場合はDLLも配布しないといけない
33
(1): 2009/12/06(日)15:43 ID:CJZjyivE(1) AAS
>>30
DXライブラリは関数の集合だから、ランタイムパッケージは必要ないんじゃないの?
プログラムが実行ファイルにされるときにすべてC言語からアセンブリ言語にされるはず。
相手に準備が必要なものがあるとすればDIRECTXなんじゃないかな。
34: 2009/12/06(日)15:43 ID:vkleFuhi(2/5) AAS
>>29
お、直った!
ありがとー。

STLのstring使ってるんだけど、itretorひとつ進めても、
2バイト文字だとふたつ進めたとこからやらないとだめなんだな……勉強になった。
35: 2009/12/06(日)15:44 ID:vkleFuhi(3/5) AAS
iteratorだった。
IDEのサポートに頼りっきりはこれだから……。
36: 2009/12/06(日)16:16 ID:L7OXdhxz(2/3) AAS
>>31 Releaseの使い方もわかってなかったから、
配布ファイル自体の作り方もわかった。ありがと。(早速、フォルダを作成したら、画像ファイルだけは、出来上がったフォルダに手動で追加することになるみたい。)

>>32 ダイナミックなDxLibというのはよくわかんないけど、多分そこまで複雑な機能を使いこなしてないから、
DLLの心配はしなくていいととりあえず思う。

>>33 DIRECTXの準備が必要ということか。
これは、さすがにインストールしてもらうしかないということだね。

これでとりあえずプログラムの配布ができそう。ありがと。
37: 2009/12/06(日)16:18 ID:RsTxI8Hk(1) AAS
>>30
Releaseフォルダの中身だけでおk
38
(1): 2009/12/06(日)16:29 ID:AxjxjhaV(3/3) AAS
別に[Debug]でもよくね?
まあ普通は[Release]だろうが
39: 30 2009/12/06(日)16:48 ID:L7OXdhxz(3/3) AAS
>>31、32,33

ありがとう!!
40
(1): 2009/12/06(日)17:10 ID:bw4St35R(2/3) AAS
>>38
そういえばアレ何が違うの?

あとDXライブラリ使ったらReadmeに使ったって書かなきゃダメ?
41
(1): 2009/12/06(日)17:29 ID:+RNAMjqx(2/3) AAS
>>40
そのままデバッグが入るか否か 少し重くなる
readmeは要らん ただしソースを配布するなら必須
42: 2009/12/06(日)17:50 ID:bw4St35R(3/3) AAS
>>41
ありがとー
43: 2009/12/06(日)18:03 ID:vkleFuhi(4/5) AAS
DXライブラリって音のフェードインとかには対応してないっぽい?
44: 2009/12/06(日)18:15 ID:+RNAMjqx(3/3) AAS
自分で作れよ
45
(1): 2009/12/06(日)19:38 ID:EqSux42R(1) AAS
ChangeVolumeSoundMem関数使えば簡単に実装出来ますよ。例えば

/****** Zキーを押すとフェードアウトを始める *******/
/****** test.wavはサンプルプログラム実行用フォルダ参照 *******/

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;
省20
46: 2009/12/06(日)23:30 ID:vkleFuhi(5/5) AAS
>>45
どうもありがとうございますー。

色々考えてみた結果、マルチタスクに手を出さないとダメっぽいということがわかったので、
なんとか実装するか。
47: 2009/12/06(日)23:59 ID:jMxq/kh5(2/2) AAS
DxLibはマルチスレッド非対応じゃないっけか
48: 2009/12/07(月)00:00 ID:QTWxMRN0(1/4) AAS
普通に出来るしマルチタスクとマルチスレッドは違う
49: 2009/12/07(月)00:44 ID:yr1Q4g2a(1) AAS
すまんかった
50: 2009/12/07(月)12:52 ID:qjhIwQdC(1/2) AAS
なぁに気にすろな
51
(1): 2009/12/07(月)13:02 ID:5mIc7NoF(1/2) AAS
本家で質問するわけにもいかないので、こっちで。

試験的に、ゲームのプレイ動画を撮ろうと思ったんだが、DXライブラリ3.xで作ったゲームを録画しようとしても全く録画できない。
画面が映らないというより、プロセスを正しく取得できていないような感じ。
ちなみに手元の2.25cだと、ゲームプログラムは弄らずにキャプチャー出来た。(3D機能は未使用)

に多様な状況になったひとっている?
自分の環境が悪いのか、キャプチャーソフトが悪いのか、ライブラリ側の都合なのか調べたい。

OS:WindowsXP SP3
省2
52
(2): 2009/12/07(月)13:45 ID:SKodZ2cg(1/3) AAS
キーボードでAの処理からBの処理へと連続で
同じボタンでやるとします。
この場合あるボタンを押すと勝手にAだけでいいのにBまで処理されて
しまいます。Aで止めて、もう一度同じボタンでBの処理をさせる
にはどうすればいいの? お願いします。
53
(1): 2009/12/07(月)13:52 ID:QTWxMRN0(2/4) AAS
>>51
WMEでやったらどうなる
範囲指定でやったらどうなる

というか仕様的なことならむしろ本家に行った方がいいと思うが

>>52
連続ってどういうこと?
押しっぱなしじゃなくて連打させたいという意味なら
省4
54
(3): 2009/12/07(月)14:15 ID:SKodZ2cg(2/3) AAS
>>53
CheckHitKey関数しか知らないんで key=0;
if(CheckHitKey(KEY_INPUT_TAB)==1 && key==0) 処理A,key=1;
if(CheckHitKey(KEY_INPUT_TAB)==0 && key==1) key=2;
if(CheckHitKey(KEY_INPUT_TAB)==1 && key==2) 処理B, key=0;

こんな感じですか?
非効率なような気がします。いい案があればおしえてください。
省1
55
(1): 2009/12/07(月)14:30 ID:QTWxMRN0(3/4) AAS
>>54
なんでそうなるんだよ

bool key=FALSE;
int hoge=0;
if(CheckHitKey(KEY_INPUT_TAB)==1) {
 if (!key) {
  key=TRUE;
省6
56: 2009/12/07(月)14:43 ID:GvCDZJ6F(1/2) AAS
↑より効率いいやり方ってそうないと思うが
あと、例だからかもしれないが、↑だと処理B→Aが続けて処理されると思うので
int state = 0;
int tab_push = 1;
〜〜〜〜〜〜〜〜〜〜〜〜〜〜
if(CheckHitKey(KEY_INPUT_TAB)==1 && tab_push = 0;)
{
省17
57: 2009/12/07(月)14:44 ID:GvCDZJ6F(2/2) AAS
あ、「↑より効率いいやり方ってそうないと思うが」
の↑は>>54を指すので
58: 2009/12/07(月)14:44 ID:qjhIwQdC(2/2) AAS
AA省
59: 2009/12/07(月)15:00 ID:SKodZ2cg(3/3) AAS
みなさんありがとうございます。
制御する変数を使わないとやはり難しいみたいですね。
参考にします。
60: 2009/12/07(月)16:30 ID:eqdM01iG(1) AAS
状況がよくわからんが一回の入力で連続して押したと判定されるのがいやということかな?だったら↓が汎用的だと思う

unsigned count[256] = {0};

while(true) { //メインループ
char buf[256];
CheckHitKeyAll(buf);

for(int i = 0; i < 256; ++i) if(buf[i] == 1) ++count[i]; else count[i] = 0; //押しっぱなしならカウント数をインクリメントして保存、押されてないとゼロにもどる

if(count[KEY_INPUT_XXX] == 1) DoSometing(); //カウントが1のとき、つまりボタンが押された最初のフレームのみ反応!
省2
61: 2009/12/07(月)17:30 ID:03D0QZSj(1) AAS
DXライブラリ 総合スレッド その3
2chスレ:gamedev

315 名前:名前は開発中のものです。[sage] 投稿日:2009/06/02(火) 21:23:19 ID:CgQN485t
>キー入力

自分が使ってるルーチンのコードを記事にまとめました
外部リンク:d.hatena.ne.jp
62
(1): 2009/12/07(月)20:24 ID:5mIc7NoF(2/2) AAS
>>52
さすがにDXライブラリのサイトで
「○○というソフトを使っても動きません!」という質問はできないだろうw
DXライブラリ側に原因があるなら別だが。

WMEはMSのやつかな。
動画作成に関しては今日初めてやったので詳しくないんだ、すまん。
63: 2009/12/07(月)20:49 ID:QTWxMRN0(4/4) AAS
>>62
2.25で出来て3.xで出来ないならライブラリ側の原因である可能性が多いだろ
とりあえず色んな方法でキャプチャして、上手くいかなかったら本家行き

まあ、WME+SCFH_DSFでは問題なくキャプチャ出来たが。
64: 2009/12/08(火)02:54 ID:CEeKe2FB(1) AAS
一々全部のキーに対して押し続けたかどうか判断する必要あるのか
余程多くのキー使うのならともかく普通は押し続けの判断したいキーだけでいいんじゃないのか
まあ今のマシンなら全部やっても負荷的には問題ないのかも知れんが
65
(1): 2009/12/08(火)08:20 ID:bmgyrVLx(1/2) AAS
キー入力関連はゲームだとよく使うし、関数化しておくと便利ですよ。
「何フレーム入力されているか」が解るようにしておけば、ボタン関連の操作は「1フレーム目」または、「キーを離したフレーム」で処理すれば
連続で不必要な処理まで進んでしまう事がありません。
例えば本家のGetHitKeyStateAllを自分で使いやすいようにしたのが
GetHitKeyStateAll_2関数です。こんな感じで使えます。
(→コードは次へ)

この例ではエンターの入力時間によって処理を分岐しています。
省4
66: 2009/12/08(火)08:21 ID:bmgyrVLx(2/2) AAS
/****** エンターキーをおした瞬間だけ四角形を描画する *******/

#include "DxLib.h"
int GetHitKeyStateAll_2(int KeyStateBuf[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++;
省17
67: 2009/12/08(火)10:08 ID:ziZ5aZky(1) AAS
実際の入力と、返ってくる値は切り分けた方が便利かもね
68: 2009/12/08(火)11:20 ID:U9efz6mV(1) AAS
>>65
外部リンク[html]:fatalita.sakura.ne.jp
69: 2009/12/08(火)15:24 ID:oCon0Lhk(1/6) AAS
MakeGraphでウィンドウサイズより大きい空のグラフィックを作成して、そこにマップチップを敷き詰める処理をしたいのですが
グラフィックハンドルを直接指定して描画処理をする方法がわからなくて困っています。
GetDrawScreenGraphを使っていったんウラ画面に描画したものを、空のグラフィックにコピーしようとしたのですが
ウィンドウサイズより大きいところに描画されたものはコピーされないみたいでダメでした。
どなたかこの問題を解決できる方はいませんでしょうか?
70
(1): 2009/12/08(火)18:10 ID:EpEGhfoB(1/6) AAS
描画先にグラフィックハンドルを指定したらそこへ描画できるって話をうろ覚え。
ウィンドウサイズ以上にできるかどうかは知らん。

しかしマップチップ敷き詰めたとしても、どうせ表示サイズ以上には表示できないんだし、
普通に毎フレーム描画でいいと思うが。

まぁ全マップを拡大縮小回転とかガンガンやるならちとずれそうで怖いが。
71: 2009/12/08(火)19:18 ID:oCon0Lhk(2/6) AAS
>>70
ありがとうございます、いろいろ調べてきます!
2Dアクションゲームを作ってましてとりあえずマップ全体をメモリに描画しといて
スムーズなスクロールをしようと思ってました。
72
(1): 2009/12/08(火)19:27 ID:EpEGhfoB(2/6) AAS
その目的なら止めた方が良いと思う。
普通に毎フレーム描画でいくべきだと。

よほどヘボなPC使うか、プログラムがヘボでないかぎり
スムースさに変わりはない。
73
(1): 2009/12/08(火)19:37 ID:oCon0Lhk(3/6) AAS
>>72
そうですか。
しかし自分の知識不足でどうやって毎フレーム描画でドット単位のスクロールをすればいいのかわからなくて
外部リンク[htm]:www.harukitchen.com
ここのサイトを参考にしてるんですけど、この方法だと結局ウィンドウサイズ以上の大きさの描画が必要になるし
どなたか知恵を貸していただけないでしょうか?
74
(1): 2009/12/08(火)19:45 ID:B6+BeJXV(1/3) AAS
別にその方法で間違ってない
ウィンドウサイズ以外の描画がしたくないならカメラ座標に映らない座標のオブジェクトは描画しなくていいだけだし、
確かdirectXの仕様で画面外は省略されてた気がする

DXライブラリならオリジナルの描画関数作ってDrawRotaGraphなりに飛ばしてやるのがお勧め
75
(1): 2009/12/08(火)19:46 ID:EpEGhfoB(3/6) AAS
えーとね。

キャラクターの表示はできる?
それをドット単位で動かせる?

それができるならマップもできよ。

マップったって、結局マップチップというキャラクターを並べて表示してるだけだからね。
ドット単位で表示ずらせばいいだけ。

んでもって、画面表示されない位置のマップチップは描画しなければいい。
76: 2009/12/08(火)20:11 ID:oCon0Lhk(4/6) AAS
>>74>>75
キャラクタの表示もドット単位の移動もできています。
自分の頭の中では
1,ウィンドウサイズより一回り大きいグラフィックハンドルにマップチップを敷き詰める

2,そこから必要な場所だけを切り取って表示する
という流れしか考えられません(´・ω・`)
省2
77: 2009/12/08(火)20:19 ID:oCon0Lhk(5/6) AAS
書き込んだ瞬間に何故かひらめいた
マップチップを敷き詰めるはじめる座標を(-32-[主人公の座標.x]%32,-32-[主人公の座標.y]%32)
にしてあげて、主人公の座標から必要なマップチップの情報をウィンドウサイズより一回り大きく取り出してあげて
それを描画すればいいんですよね!!
78: 2009/12/08(火)20:32 ID:DQdomlYR(1) AAS
その通り
79: 2009/12/08(火)20:35 ID:EpEGhfoB(4/6) AAS
おめでとう。それが解れば大丈夫だ。
80: 2009/12/08(火)20:39 ID:oCon0Lhk(6/6) AAS
皆さん大変おさがわせしました。
今プログラム組んでみたら上手くいきました:)
ありがとうございました、これからもよろしくお願いします。
81: 2009/12/08(火)20:40 ID:EpEGhfoB(5/6) AAS
あ、そうそう、君が>>73で示したサイトにもあるけど

「主人公の位置」じゃなくて「カメラの位置」で考えてね。

基本的に主人公の位置とカメラの位置は同じだけど、
マップ端に行った時は違ってくるから。
1-
あと 920 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.027s