[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 01/25 20:51 / Filesize : 266 KB / Number-of Response : 992
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

DXライブラリ 総合スレッド その5



1 名前:名前は開発中のものです。 mailto:sage [2009/12/04(金) 16:49:13 ID:7SKA4I5z]
Cを習得した程度のスキルでも、
GUIのゲームを比較的容易に作成する事を可能にする、
「DXライブラリ」に関するスレッドです。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。

【公式】
homepage2.nifty.com/natupaji/DxLib/

【過去スレ】
DXライブラリ 総合スレッド
pc11.2ch.net/test/read.cgi/gamedev/1197468399/
DXライブラリ 総合スレッド 2008
pc11.2ch.net/test/read.cgi/gamedev/1224923873/
DXライブラリ 総合スレッド その3
pc11.2ch.net/test/read.cgi/gamedev/1238429676/
DXライブラリ 総合スレッド その4
pc11.2ch.net/test/read.cgi/gamedev/1249822550/


2 名前:名前は開発中のものです。 mailto:sage [2009/12/04(金) 17:07:40 ID:2O781c7T]


3 名前:名前は開発中のものです。 [2009/12/04(金) 17:19:26 ID:vm4DXNCA]
Ver3からPlayMovieToGraphで透明色が適用されないのとちょっとフレーム落ちと音ズレが激しいなあ
もちろん確認のために2.25bでも試したが透明色やフレームレート落ちや音ズレなしで問題なし

4 名前:名前は開発中のものです。 mailto:sage [2009/12/04(金) 18:16:40 ID:6AQLzT+8]
DxLibの暗号化ファイル読み込みに対応した暗号化書き込みってなんでライブラリに入れないんだろう
セーブとか実行時に暗号化して書きたい時って割とあるとおもうんだが・・・

5 名前:名前は開発中のものです。 [2009/12/04(金) 23:18:48 ID:XUOEwrjE]
前スレ>>916
弾幕シューティングではないのだが・・・参考になったさ。ありがとう。

6 名前:名前は開発中のものです。 mailto:sage [2009/12/05(土) 00:35:03 ID:FfRkZmBc]
>>4
確かに使いたいときはよくある。でもそれってDirectXの機能じゃないからじゃ?

7 名前:名前は開発中のものです。 mailto:sage [2009/12/05(土) 01:27:00 ID:yZDYDRsN]
>>4
セーブデータなんて自分で暗号化すれば済むからでしょ。

8 名前:名前は開発中のものです。 [2009/12/05(土) 12:30:22 ID:CQOWfBMw]
ToyStudioでアニメーション作って、MQOで出力したんだけど、
ものすごい膨大な量のMQOデータが出てきたんだけど・・・
アニメーションを作るたびに毎回こんなのが出てくるの?
そもそもこういう出力結果をゲーム内でアニメとして使えるの?

9 名前:名前は開発中のものです。 mailto:sage [2009/12/05(土) 14:14:45 ID:Sya3hEP4]
裏画面全体を拡大縮小したり回転させることとか出来ないかな?
ゲームのエフェクトで画面全体をくるくる回したりしたいんだけど

10 名前:名前は開発中のものです。 mailto:sage [2009/12/05(土) 14:22:43 ID:UtZjONga]
動かないんだったら、描画したヤツを取り込んで一枚の画像にしちゃってまわせばいいんじゃない?

動くんだったら計算させて自前で回転描画すればいいだけだし。



11 名前:名前は開発中のものです。 mailto:sage [2009/12/05(土) 15:12:47 ID:GsjhaCrH]
ゲームってグローバル変数使ったほうが普通に綺麗に書ける気がしてきた

12 名前:名前は開発中のものです。 mailto:sage [2009/12/05(土) 15:15:49 ID:UZumt6OG]
>>8
アニメーションxファイルで出せよww
MQOはモーションつかないから連番で出すしかない

13 名前:名前は開発中のものです。 mailto:sage [2009/12/05(土) 16:02:55 ID:gqFDk2ay]
シングルトンはついつい使っちゃうよなあ・・

14 名前:名前は開発中のものです。 mailto:sage [2009/12/05(土) 16:14:43 ID:IYliNqS4]
使っちゃえよ

15 名前:名前は開発中のものです。 mailto:sage [2009/12/05(土) 16:24:59 ID:rsncbGmt]
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R4N2
これのデスクトップの広さ 1024x768 の方を取得する方法について教えて下さい

16 名前:名前は開発中のものです。 mailto:sage [2009/12/05(土) 16:51:52 ID:z1L4m3Am]
DXライブラリに関係なく
GetSystemMetrics(SM_CXSCREEN);
とかで

17 名前:名前は開発中のものです。 mailto:sage [2009/12/05(土) 17:17:35 ID:rsncbGmt]
できました
ありがとうございました

18 名前:名前は開発中のものです。 mailto:sage [2009/12/05(土) 19:31:08 ID:GsjhaCrH]
だめだ俺にはローグライクは早かったようだ・・・テトリスからやり直すぜ

19 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 00:09:46 ID:AxjxjhaV]
俺もグローバル使う位ならスタティック使ってたけど
結局普通にグローバル使った方が楽なことに気付いた
(全てスタティックが駄目というわけではないが)
グローバルでも名前空間とか使えば局所性もある程度保てるんじゃないかなあ

20 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 00:10:45 ID:wryxppBn]
環境変数や外部ファイルはグローバル変数なので使用禁止



21 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 10:11:40 ID:+RNAMjqx]
ゲームに関してはあらゆる関数で共用するものが多いし、
クラスで雁字搦めにして書かない限りグローバル変数使ったほうが分かりやすい

22 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 10:20:30 ID:AO9SCSiS]
いざ対戦機能とか、似たような機能を二つ以上配置することを考えると、
「やっぱグローバルやめときゃよかった」ってなる。

23 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 10:33:36 ID:+HYK3UFu]
グローバルしか使ってないヘタレPGとしては、どういう恩恵があるのか自体想像がつかん。

24 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 10:48:26 ID:goldsq2u]
最悪なのがグローバル変数代わりのシングルトン
>>22のようなことを考えるとグローバルの方がマシ

25 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 11:12:16 ID:Vlb8mlu0]
>>24
なんで?

26 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 12:19:26 ID:jMxq/kh5]
画像復元の処理を追加してたんだが
SetRestoreGraphCallbackに登録する関数で使う変数のために
とりあえず読み込み用クラスのポインタをグローバルなポインタ作ってそこに渡して動作させてる
他に良い方法ない?


27 名前:名前は開発中のものです。 [2009/12/06(日) 14:27:31 ID:vkleFuhi]
文字がだんだん表示させる演出すると、
文字の後ろに・が一緒に表示されるという怪現象が……。
なんだこれ?

まあ、たぶん俺のコードのどっか悪いんだろうが。

28 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 14:53:59 ID:P3Xq2+aM]
いけないことなんだろうなと思いつつ
グローバルばかりでやってたがそうでもないのかな

29 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 15:10:27 ID:AxjxjhaV]
それ文字1文字1文字ずつ表示させるって言う意味かな
全角だと1バイト分読み込んだ時に正しく認識されないから
全角の場合は2バイト分読み込ませればいいんじゃないかな


30 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 15:34:50 ID:L7OXdhxz]
DXライブラリを使ってVC++2008EEでプログラムを作ったんだけれど、
配布するときにDXライブラリをインストールしていないPCでも
起動できるような配布の方法はあるのだろうか
よくわかんないけどDXライブラリランタイムみたいなのがあれば、
それを一緒に配布するみたいな方法とかある?
それとも配布するプログラムとは別にDXライブラリをインストールしてもらうしかないのだろうか。



31 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 15:39:03 ID:bw4St35R]
>>30
よくわかんないけどたぶん上の[Debug]を[Release]に変えて
出てきたReleaseフォルダを配布すればいいと思う

32 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 15:43:00 ID:ez8iS4so]
DxLibはスタティックライブラリだから使うほうはべつになにもいらない
ダイナミックなDxLibがあるのかわからんけど自作とかしたならその場合はDLLも配布しないといけない

33 名前:名前は開発中のものです。 [2009/12/06(日) 15:43:02 ID:CJZjyivE]
>>30
DXライブラリは関数の集合だから、ランタイムパッケージは必要ないんじゃないの?
プログラムが実行ファイルにされるときにすべてC言語からアセンブリ言語にされるはず。
相手に準備が必要なものがあるとすればDIRECTXなんじゃないかな。

34 名前:名前は開発中のものです。 [2009/12/06(日) 15:43:31 ID:vkleFuhi]
>>29
お、直った!
ありがとー。

STLのstring使ってるんだけど、itretorひとつ進めても、
2バイト文字だとふたつ進めたとこからやらないとだめなんだな……勉強になった。

35 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 15:44:56 ID:vkleFuhi]
iteratorだった。
IDEのサポートに頼りっきりはこれだから……。

36 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 16:16:24 ID:L7OXdhxz]
>>31 Releaseの使い方もわかってなかったから、
配布ファイル自体の作り方もわかった。ありがと。(早速、フォルダを作成したら、画像ファイルだけは、出来上がったフォルダに手動で追加することになるみたい。)

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

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

これでとりあえずプログラムの配布ができそう。ありがと。

37 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 16:18:32 ID:RsTxI8Hk]
>>30
Releaseフォルダの中身だけでおk

38 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 16:29:03 ID:AxjxjhaV]
別に[Debug]でもよくね?
まあ普通は[Release]だろうが

39 名前:30 mailto:sage [2009/12/06(日) 16:48:28 ID:L7OXdhxz]
>>31、32,33

ありがとう!!

40 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 17:10:59 ID:bw4St35R]
>>38
そういえばアレ何が違うの?

あとDXライブラリ使ったらReadmeに使ったって書かなきゃダメ?



41 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 17:29:11 ID:+RNAMjqx]
>>40
そのままデバッグが入るか否か 少し重くなる
readmeは要らん ただしソースを配布するなら必須

42 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 17:50:49 ID:bw4St35R]
>>41
ありがとー

43 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 18:03:42 ID:vkleFuhi]
DXライブラリって音のフェードインとかには対応してないっぽい?

44 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 18:15:43 ID:+RNAMjqx]
自分で作れよ

45 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 19:38:55 ID:EqSux42R]
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;
int Flag=0, Vol=255, SoundHandle = LoadSoundMem("test.wav");
PlaySoundMem( SoundHandle, DX_PLAYTYPE_LOOP );
while( !ProcessMessage() && !ClearDrawScreen() && !CheckHitKey(KEY_INPUT_ESCAPE) ){
if( CheckHitKey(KEY_INPUT_Z) ){
Flag = 1;
}
if( Flag ){
Vol -= 2;
ChangeVolumeSoundMem( Vol, SoundHandle ) ;
if( Vol < 0 ){
Flag = 0;
Vol=0;
}
}
clsDx(); printfDx("Vol = %d\n",Vol);
ScreenFlip();
}
DxLib_End();
return 0;
}

46 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 23:30:09 ID:vkleFuhi]
>>45
どうもありがとうございますー。

色々考えてみた結果、マルチタスクに手を出さないとダメっぽいということがわかったので、
なんとか実装するか。

47 名前:名前は開発中のものです。 mailto:sage [2009/12/06(日) 23:59:28 ID:jMxq/kh5]
DxLibはマルチスレッド非対応じゃないっけか

48 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 00:00:23 ID:QTWxMRN0]
普通に出来るしマルチタスクとマルチスレッドは違う

49 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 00:44:06 ID:yr1Q4g2a]
すまんかった

50 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 12:52:27 ID:qjhIwQdC]
なぁに気にすろな



51 名前:名前は開発中のものです。 [2009/12/07(月) 13:02:56 ID:5mIc7NoF]
本家で質問するわけにもいかないので、こっちで。

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

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


OS:WindowsXP SP3
キャプチャーソフト:アマレコ・ライト、Dxtory、DxRec
参考ページ: ttp://www18.atwiki.jp/live2ch/pages/153.html#id_439db353

52 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 13:45:13 ID:SKodZ2cg]
キーボードでAの処理からBの処理へと連続で
同じボタンでやるとします。
この場合あるボタンを押すと勝手にAだけでいいのにBまで処理されて
しまいます。Aで止めて、もう一度同じボタンでBの処理をさせる
にはどうすればいいの? お願いします。

53 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 13:52:55 ID:QTWxMRN0]
>>51
WMEでやったらどうなる
範囲指定でやったらどうなる

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

>>52
連続ってどういうこと?
押しっぱなしじゃなくて連打させたいという意味なら
・キーを押すとONになるフラグを作る
・キーを離すとそのフラグはOFFになる
・キーがOFFの場合しかキーを押したときに処理が行われない
というようにする

54 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 14:15:07 ID:SKodZ2cg]
>>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;

こんな感じですか?
非効率なような気がします。いい案があればおしえてください。
ちなみにシューティングじゃないんで連打はないです。


55 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 14:30:14 ID:QTWxMRN0]
>>54
なんでそうなるんだよ

bool key=FALSE;
int hoge=0;
if(CheckHitKey(KEY_INPUT_TAB)==1) {
 if (!key) {
  key=TRUE;
  if (hoge==0) 処理A
  else 処理B
 hoge++;
 }
else key=FALSE;

あとCheckHitKeyは効率悪いからやめておけ

56 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 14:43:37 ID:GvCDZJ6F]
↑より効率いいやり方ってそうないと思うが
あと、例だからかもしれないが、↑だと処理B→Aが続けて処理されると思うので
int state = 0;
int tab_push = 1;
〜〜〜〜〜〜〜〜〜〜〜〜〜〜
if(CheckHitKey(KEY_INPUT_TAB)==1 && tab_push = 0;)
{
 tab_push = 1;
 if(state = 0)
 {
  処理A;
  state = 1;
 }
 else
 {
  処理B;
  state = 0;
 }
 //  ↑この辺はswitchなりなんなり(処理が2つだけじゃなくたくさんある場合とか)
}
if(CheckHitKey(KEY_INPUT_TAB)==0) tab_push = 0;
//  ↑if(CheckHitKey(KEY_INPUT_TAB)==0 && tab_push = 1) としても変わらない

とここまで書いてすでに>>55でレスされてるのに気付いたが
ほぼ同じだが投稿しちゃう

57 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 14:44:31 ID:GvCDZJ6F]
あ、「↑より効率いいやり方ってそうないと思うが」
の↑は>>54を指すので

58 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 14:44:45 ID:qjhIwQdC]
>>54
if (( btn ) && ( ! isPush )) {

 switch ( step ) {
  case 1 :
   doA ( );
   step ++;
   break;
  case 2 :
   doB ( );
   step ++;
   break;
   ・
   ・
   ・
 }

}

isPush = btn ;

59 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 15:00:21 ID:SKodZ2cg]
みなさんありがとうございます。
制御する変数を使わないとやはり難しいみたいですね。
参考にします。

60 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 16:30:58 ID:eqdM01iG]
状況がよくわからんが一回の入力で連続して押したと判定されるのがいやということかな?だったら↓が汎用的だと思う

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のとき、つまりボタンが押された最初のフレームのみ反応!

// if(count[KEY_INPUT_YYY] % 10 == 0) DoSometing(); //応用して押しっぱなし中なら10フレームごとにイベント、とかできる(シューティングの等間隔のショット処理とかで使える)
}




61 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 17:30:41 ID:03D0QZSj]
DXライブラリ 総合スレッド その3
pc11.2ch.net/test/read.cgi/gamedev/1238429676/315

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

自分が使ってるルーチンのコードを記事にまとめました
d.hatena.ne.jp/kokarage/20090602/p2

62 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 20:24:23 ID:5mIc7NoF]
>>52
さすがにDXライブラリのサイトで
「○○というソフトを使っても動きません!」という質問はできないだろうw
DXライブラリ側に原因があるなら別だが。

WMEはMSのやつかな。
動画作成に関しては今日初めてやったので詳しくないんだ、すまん。

63 名前:名前は開発中のものです。 mailto:sage [2009/12/07(月) 20:49:26 ID:QTWxMRN0]
>>62
2.25で出来て3.xで出来ないならライブラリ側の原因である可能性が多いだろ
とりあえず色んな方法でキャプチャして、上手くいかなかったら本家行き

まあ、WME+SCFH_DSFでは問題なくキャプチャ出来たが。

64 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 02:54:12 ID:CEeKe2FB]
一々全部のキーに対して押し続けたかどうか判断する必要あるのか
余程多くのキー使うのならともかく普通は押し続けの判断したいキーだけでいいんじゃないのか
まあ今のマシンなら全部やっても負荷的には問題ないのかも知れんが

65 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 08:20:15 ID:bmgyrVLx]
キー入力関連はゲームだとよく使うし、関数化しておくと便利ですよ。
「何フレーム入力されているか」が解るようにしておけば、ボタン関連の操作は「1フレーム目」または、「キーを離したフレーム」で処理すれば
連続で不必要な処理まで進んでしまう事がありません。
例えば本家のGetHitKeyStateAllを自分で使いやすいようにしたのが
GetHitKeyStateAll_2関数です。こんな感じで使えます。
(→コードは次へ)

この例ではエンターの入力時間によって処理を分岐しています。
キーの入力状態を格納する変数がint型なので
_2関数をさらに「離された時マイナスのカウントをする」ようにすれば
離されてからのフレーム数も解ると思います。
・・ところでコードを見やすいように字下げする方法無いんでしょうか;

66 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 08:21:20 ID:bmgyrVLx]
/****** エンターキーをおした瞬間だけ四角形を描画する *******/

#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]++;
else KeyStateBuf[i]=0;
}
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int Key[256];
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_RETURN]);//エンター入力カウント
if(Key[KEY_INPUT_RETURN]==1)//今の瞬間押されたら
DrawBox(0,0,640,480,GetColor(255,255,255),TRUE);//画面全体を白い四角で表示
ScreenFlip();
}
DxLib_End();
return 0;
}

67 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 10:08:46 ID:ziZ5aZky]
実際の入力と、返ってくる値は切り分けた方が便利かもね

68 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 11:20:05 ID:U9efz6mV]
>>65
ttp://fatalita.sakura.ne.jp/CGI/OKCode/index.html

69 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 15:24:53 ID:oCon0Lhk]
MakeGraphでウィンドウサイズより大きい空のグラフィックを作成して、そこにマップチップを敷き詰める処理をしたいのですが
グラフィックハンドルを直接指定して描画処理をする方法がわからなくて困っています。
GetDrawScreenGraphを使っていったんウラ画面に描画したものを、空のグラフィックにコピーしようとしたのですが
ウィンドウサイズより大きいところに描画されたものはコピーされないみたいでダメでした。
どなたかこの問題を解決できる方はいませんでしょうか?

70 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 18:10:50 ID:EpEGhfoB]
描画先にグラフィックハンドルを指定したらそこへ描画できるって話をうろ覚え。
ウィンドウサイズ以上にできるかどうかは知らん。

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

まぁ全マップを拡大縮小回転とかガンガンやるならちとずれそうで怖いが。



71 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 19:18:27 ID:oCon0Lhk]
>>70
ありがとうございます、いろいろ調べてきます!
2Dアクションゲームを作ってましてとりあえずマップ全体をメモリに描画しといて
スムーズなスクロールをしようと思ってました。


72 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 19:27:56 ID:EpEGhfoB]
その目的なら止めた方が良いと思う。
普通に毎フレーム描画でいくべきだと。

よほどヘボなPC使うか、プログラムがヘボでないかぎり
スムースさに変わりはない。

73 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 19:37:02 ID:oCon0Lhk]
>>72
そうですか。
しかし自分の知識不足でどうやって毎フレーム描画でドット単位のスクロールをすればいいのかわからなくて
ttp://www.harukitchen.com/rpg_programming/06/06.htm
ここのサイトを参考にしてるんですけど、この方法だと結局ウィンドウサイズ以上の大きさの描画が必要になるし
どなたか知恵を貸していただけないでしょうか?

74 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 19:45:37 ID:B6+BeJXV]
別にその方法で間違ってない
ウィンドウサイズ以外の描画がしたくないならカメラ座標に映らない座標のオブジェクトは描画しなくていいだけだし、
確かdirectXの仕様で画面外は省略されてた気がする

DXライブラリならオリジナルの描画関数作ってDrawRotaGraphなりに飛ばしてやるのがお勧め

75 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 19:46:26 ID:EpEGhfoB]
えーとね。

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

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

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

んでもって、画面表示されない位置のマップチップは描画しなければいい。

76 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 20:11:36 ID:oCon0Lhk]
>>74,>>75
キャラクタの表示もドット単位の移動もできています。
自分の頭の中では
1,ウィンドウサイズより一回り大きいグラフィックハンドルにマップチップを敷き詰める

2,そこから必要な場所だけを切り取って表示する
という流れしか考えられません(´・ω・`)
しかしこれだと1のステップがクリアできなくてダメだし
簡単にアルゴリズムをアドバイスしていただけないでしょうか?

77 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 20:19:13 ID:oCon0Lhk]
書き込んだ瞬間に何故かひらめいた
マップチップを敷き詰めるはじめる座標を(-32-[主人公の座標.x]%32,-32-[主人公の座標.y]%32)
にしてあげて、主人公の座標から必要なマップチップの情報をウィンドウサイズより一回り大きく取り出してあげて
それを描画すればいいんですよね!!

78 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 20:32:31 ID:DQdomlYR]
その通り

79 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 20:35:04 ID:EpEGhfoB]
おめでとう。それが解れば大丈夫だ。

80 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 20:39:47 ID:oCon0Lhk]
皆さん大変おさがわせしました。
今プログラム組んでみたら上手くいきました:)
ありがとうございました、これからもよろしくお願いします。



81 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 20:40:20 ID:EpEGhfoB]
あ、そうそう、君が>>73で示したサイトにもあるけど

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

基本的に主人公の位置とカメラの位置は同じだけど、
マップ端に行った時は違ってくるから。

82 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 20:55:01 ID:8T1WO6Nw]
DxLib使えるだけじゃ無理だと悟った
なんかC++&DxLibがちょっと使えるレベルの人間にふさわしい本とかないすかね

83 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 21:05:16 ID:B6+BeJXV]
何作りたいのかにもよるが
アクションゲームアルゴリズムマニアックスとか?

84 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 21:09:08 ID:EpEGhfoB]
>DxLib使えるだけじゃ無理だと悟った

俺だってC++とDxLibがちょっと使える程度だが、ちょっと使える程度のものを作るには不自由ないぞ。

C++&DxLibで何がしたいのか次第でしょ。

85 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 21:33:24 ID:8T1WO6Nw]
特定ジャンルのゲームというより、共通の基礎的な部分を勉強したい
最終的にはシレンっぽいのを作りたいんだが、その前になんか根本的な部分が抜けてるような気がしたんだ


86 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 21:47:15 ID:trfhK022]
試しにシレンっぽいの作ってみたら何が足りないかわかんじゃね
作りたい物だったらモチベーションも保ちやすいし勉強にも身が入る
わからなさ過ぎると嫌になるかもだけど

87 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 21:47:25 ID:B6+BeJXV]
www.kumei.ne.jp/c_lang/
ほらよ

あとは作るしかない
ゲーム作りのノウハウは他人に教えてもらうのではなく経験で身につけるもの

88 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 22:23:40 ID:nVGvorfQ]
>共通の基礎的な部分を勉強したい

プログラムの基礎を勉強したいのか、
プログラムはわかるが、ゲーム作りの基礎を勉強したいのかでまた違ってきそうだね。

ちなみに俺は独学でゲーム作りしてきたから、ゲームは作れても基礎が全然できてねぇ;;
俺も勉強しなおすかな……。

89 名前:名前は開発中のものです。 mailto:sage [2009/12/08(火) 23:54:13 ID:JpJMUeIi]
プログラムの基礎に不安があるなら、C++だったらeffective C++とかを
読んでみるといいかもね。あとはデータ構造、基本的なアルゴリズム、
デザインパターンあたりがわかると、汎用性があるかな。

でもまあ、趣味でやるなら勉強と思ってやることはないと思うぞ。
問題を解決しようとして見つけた情報の中で、便利そうなのがあったら
その周辺を重点的に調べる、で結構いろいろできるようになる。

ところでDXライブラリって、core以外のソースは公開されていないよね?
掲示板ちょっとみたら、ソース公開に関する質問はスルーされていたので、
全て公開するかは未定ってところかな。

90 名前:名前は開発中のものです。 mailto:sage [2009/12/09(水) 00:17:14 ID:5fGPGOQD]
eff c++はもう読んだし、デザインパターンもある程度知ってる
知りたいのはアニメーションの統一的な制御法とか、膨大(になりそうな)画像やデータファイルの生成・管理法とか
この辺がうまくできなくてコードに直接埋め込んじゃってるからどんどんスパゲッティになっていってわけわからなくなるんだと思う(たぶん)




91 名前:名前は開発中のものです。 mailto:sage [2009/12/09(水) 00:20:33 ID:q6H67G0j]
うんゲームって極論すればプログラム自体はどうでもいいんだよね
データの設計や管理などの方がずっと重要

92 名前:名前は開発中のものです。 mailto:sage [2009/12/09(水) 00:31:54 ID:oBlr8zOS]
>>90
今書いてるコードがスパゲッティになるかどうかは、ゲームを完成させるまで分からない。
幾つもゲームを作りながら、「この書き方だと後々こういうケースにハマって困る」というのを学んでいく
そうやって最適化されていくもんだよ

そこら辺に落ちてるゲームの作り方的な例は最初から最適化されてることが多いが、
何故そのように最適化されてるのか述べてるものはほとんどない
そういう意味も考えながらだと上達が早いと思う

93 名前:名前は開発中のものです。 mailto:sage [2009/12/09(水) 00:47:35 ID:f8b9o6Br]
ぶっちゃけ、デザインパターンようしらんが、
stlとboost使った自作のデータ管理クラスでなんとかなってるよ。
配列の番号とかいちいち覚えてられねーよwwwってことで。

ファイル名と画像なら表示されてるレイヤとか指定すれば色々操作できる仕様。
ただ、俺ゲームどころかまともに作るのすらはじめただから正解かどうかはわからん。
基底クラスのデータ管理で使ってるのは、unordered_map。

94 名前:名前は開発中のものです。 mailto:sage [2009/12/09(水) 01:30:17 ID:+dPnel+v]
>>85
同じにおいを感じるッ!
ゲームの設計に多少時間をさくのがいいんじゃないかな。
シーケンス制御とか、どのクラスがデータを持つのかとか。

俺もとりあえず動くもの作ってみてあれこれ機能つけたしてくってしてたけど
ちょっと規模が大きくなるとワケワカメになってきたから
丁寧に設計してみようと勉強&作成中。

「ゲームプログラマになる前に覚えておきたい技術」って本、高いけど
その辺の要求に答えてくれてる気がする。

あ、DxLib使ってないけど、読めばより使いこなせるようになると思うよ。

95 名前:名前は開発中のものです。 [2009/12/09(水) 01:41:52 ID:OFLUsKk5]
おいしくない創作料理を作るようにクソゲーは作ることに意義がある

96 名前:名前は開発中のものです。 mailto:sage [2009/12/09(水) 01:44:54 ID:uL4RaiqG]
俺もデザパタなんて必須のものかね
俺は使わずにやれてるし、ある程度使わずにやってみずして必要性実感できるものかね
デザパタ学んでからやるべきものかね
ある程度C++使ってから見てみると多少参考にはなるけど

97 名前:名前は開発中のものです。 mailto:sage [2009/12/09(水) 01:46:31 ID:LrcOl5Bl]
口より手を動かせ

98 名前:名前は開発中のものです。 mailto:sage [2009/12/09(水) 06:23:23 ID:kFKKgCNe]
俺の状態

適当に作る

設計に無理があって、どこかで詰まる

作り直しになる

最初よりマシになるがそれでも設計に無理があってどこかで詰まる

作り直しになる。しかも作り直してる最中にまた詰まることがなんとなく分かる。
だが、具体的にどう詰まるのかは分からないし、その解決策も現スキルでは分からない。

どうせまた作り直すことが分かってしまうとモチベが下がる。

今のところ、この繰り返しでいずれゲームの作り方が身につくと信じて
程ほどに考えて、手を止めすぎないようにしている。

99 名前:名前は開発中のものです。 mailto:sage [2009/12/09(水) 06:50:15 ID:aw1FDcJg]
決して他人にアドバイス出来るような身の上ではないけれど、1つだけ。


途中で良い設計が思いついたり、飽きてしまうこともあるけれど、
まずはどんなミニゲームでもいいから、とりあえず完成させるべき。

昔の電子ゲーム(ゲーム&ウォッチ)みたいな単純なゲームなら
悩んだり飽きたりする前に、それこそ勢いだけで完成しちゃう場合も。

100 名前:名前は開発中のものです。 mailto:sage [2009/12/09(水) 08:10:26 ID:cydXuseL]
>>98
俺の自己紹介文をなぜ書けるw



101 名前:名前は開発中のものです。 [2009/12/09(水) 13:02:55 ID:zYgTW+cQ]
ちょっとした作業を自動化するバッチ処理をスクリプト言語で
書いてみたりすると案外プログラム書けて俺スゲーと思うはず
ゲームって作りたいもののイメージが先行して
それを実現するために要求される技術が高すぎるからorzになりやすい

102 名前:名前は開発中のものです。 mailto:sage [2009/12/09(水) 14:56:36 ID:njV6Yik+]
俺もなんとなくC++のサンプルが載ってるとこからコピペで動かしながらゲーム作ってて
そろそろちゃんと基礎からやっとくかーとか思って言語の基礎から説明してくれてる解説サイトを見てみたら
C言語に関しては勉強する部分があんまり残ってなかった






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<266KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef