5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :名前は開発中のものです。:2008/10/25(土) 17:37:53 ID:BCFbbKco
Cを習得した程度のスキルでも、
GUIのゲームを比較的容易に作成する事を可能にする、
「DXライブラリ」に関するスレッドです。

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

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

過去スレ:DXライブラリ 総合スレッド
      http://pc11.2ch.net/test/read.cgi/gamedev/1197468399/

2 :名前は開発中のものです。:2008/10/25(土) 18:16:32 ID:iksgntZe
やったー新スレだ

3 :名前は開発中のものです。:2008/10/25(土) 18:23:00 ID:a4ucCzN6
あれ?タイトル名普通は「DXライブラリ総合スレッド その2」みたいにするんじゃないの?まあいいか。スレ立て乙

4 :名前は開発中のものです。:2008/10/25(土) 20:53:06 ID:YbKt+gKn
やっと規制解除された!
>1乙

5 :名前は開発中のものです。:2008/10/25(土) 21:50:29 ID:/GWPXvud
もうすぐ3009年になるのにこのスレそれまでに埋まるんだろうか・・

6 :名前は開発中のものです。:2008/10/25(土) 21:51:12 ID:/GWPXvud
あ、ごめん20099ねんだxちゅt

7 :名前は開発中のものです。:2008/10/25(土) 21:54:26 ID:/GWPXvud
ちょ・・ごめんなさい。途中で送信してしまいました。昭和2009年の間違いです。

8 :名前は開発中のものです。:2008/10/25(土) 22:16:04 ID:Vt8TEo7A
                           , ヘ          /\ 
                  /´ ̄`ヽ /: : : \_____/: : : : ヽ、
              ,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
               /: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
     ,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
    /: :.,.-ァ: : : |: : : : : : : : :    :\: : : : :: : : :ヽ  \   /: : : :/
    ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i  / /: : : : :/
     /: :     ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/  /: : : : :/         、
.    /: : /  . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : |  /: : : : :/            |\
   /: : ィ: : : : :.i: : |   \!___/ ヽ:: : : : : : :\|:.:.:.:/:!  ,': : : : /              |: : \
   / / !: : : : :.ト‐|-    ヽ    \: : : : : l::::__:' :/  i: : : : :{              |: : : :.ヽ
   l/   |: : :!: : .l: :|            \: : : l´r. Y   {: : : : :丶_______.ノ: : : : : :}
      l: : :l: : :ト、|         、___,ィ ヽ: :| ゝ ノ    '.: : : : : : : : : : : : : : : : : : : : : : /
      |: : :ト、: |: :ヽ ___,彡     ´ ̄´   ヽl-‐'     \: : : : : : : : : : : : : : : : : : イ
        !: :从ヽ!ヽ.ハ=≠' , ///// ///u /           ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      V  ヽ|    }///  r‐'⌒ヽ  イ〉、
              ヽ、______ー‐‐' ィ´ /:/:7rt‐---、       こ、これは>>1乙じゃなくて
                  ィ幵ノ ./:/:./:.! !: : : : :!`ヽ     ポニーテールなんだから
              r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\   変な勘違いしないでよね!
               /: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\

9 :名前は開発中のものです。:2008/10/25(土) 22:27:37 ID:4olZVcWC
ああ、規制でおれも立てられなかったんだよ、>>1乙。
一応3D版も奴も張っちゃえ

http://fatalita.sakura.ne.jp/3DLib/

10 :名前は開発中のものです。:2008/10/25(土) 22:29:25 ID:Vt8TEo7A
個人的な意見を言えば、次スレからは前スレで結構話題になった、
DXライブラリ3DのURLもテンプレに入れた方が良いと思う。
私は結構期待しているし、私以外にも注目している人は多いはず。

というわけで自分なりにテンプレ入れてみる。


また、DXライブラリと互換性を持ったライブラリ、
「DXライブラリ3D」が開発も非公式ながらも行われている。
DXライブラリ3Dを用いることにより、DXライブラリの機能に加え、
3Dの処理を容易に行えることが期待できる。
http://fatalita.sakura.ne.jp/3DLib/

11 :10:2008/10/25(土) 22:30:40 ID:Vt8TEo7A
>>9
かぶった。
スマソ。

12 :名前は開発中のものです。:2008/10/25(土) 23:34:54 ID:BCFbbKco
>>9-10
FireFox3なんだけどそのリンク先、マウスにDxMainの透明ソースがくっついてはがれなくてクリックできない。

あ、実はDirectXについて調べててたまたま来ただけなんですが、ちょうど埋まってたので立ててみました。
DXライブラリの歴史は古いっぽいからスレタイの番号抜けちゃったのかなと年を入れて見たんですが、
次スレは2009年になりそうだしかまわないかなと。

僕がやりたかったのはDirectX使うゲームの画面をDirectXで静止画キャプチャなんですが、
DirectXでキャプチャするというHyperSnapでキャプチャしても画面が一瞬ロックしちゃうんであきらめました。
いろんなところにもBitBltより遅くなるって書いてあったし。
どんなゲームでもロックするとは限らないけど、ネトゲのセキュリティ機能が影響してるかもしれない。
廃スペックな人からは「そんなロックかからないよ」って言われたし、スペックでカバーできるっぽいし。

こういったライブラリは自前窓への描画や画面への出力前提だろうから、方向性もちょっと違いましたね。


13 :名前は開発中のものです。:2008/10/25(土) 23:54:35 ID:ZbA2BxSK
たまたま来てスレ立てとな!

14 :名前は開発中のものです。:2008/10/25(土) 23:56:47 ID:4olZVcWC
シルバーガンとかレイストームみたいな奴を手っ取り早く作りたい!
……って時には結構強いよね、3D版。

ポリゴンモデルを用意できるかどうかは別として。

15 :名前は開発中のものです。:2008/10/27(月) 14:23:21 ID:Jt+1Mejf
>>12
クリックできないとは?
うちもFirefox3だけど問題ないが

16 :名前は開発中のものです。:2008/10/27(月) 15:24:06 ID:nBdNvLmf
DXライブラリの参考になるサイトも一通りテンプレにいれたらいいのに

17 :名前は開発中のものです。:2008/10/27(月) 22:20:31 ID:nZeh8WoA
DXライブラリで、超単純な当たり判定ってどんなのがある?

画像が重なった瞬間消すだけでもいいんだけど、どうすればいいかよくわからん

18 :名前は開発中のものです。:2008/10/27(月) 22:24:13 ID:OObvFpvs
DXライブラリで、ってのがよく分からんが、ごく普通の当たり判定じゃダメなのか。
最も単純って言うと、

 if ( x1 == x2 && y1 == y2 )

とか?

19 :名前は開発中のものです。:2008/10/27(月) 22:48:15 ID:zN//f5BC
矩形の当たり判定が基本でしょ

20 :名前は開発中のものです。:2008/10/27(月) 23:21:07 ID:nBdNvLmf
円の当たり判定が一番簡単じゃない?
普通にピタゴラスの定理使えばいいだけ

21 :18:2008/10/27(月) 23:28:42 ID:OObvFpvs
ぶっちゃけどれも基本だよな。

22 :名前は開発中のものです。:2008/10/27(月) 23:42:59 ID:zN//f5BC
円の当たり判定はベクトル使うと異常に綺麗に書けるよね

23 :名前は開発中のものです。:2008/10/27(月) 23:52:30 ID:nBdNvLmf
>>22
ピタゴラスの定理より簡単になるの?

24 :名前は開発中のものです。:2008/10/28(火) 09:43:23 ID:/xky1qOF
通過しちゃったやつも当たったと判定しなきゃならんこともあるし

25 :名前は開発中のものです。:2008/10/28(火) 10:06:09 ID:jGlZfuVr
ベクトル使うと当たり判定が菱形にならないか?

26 :名前は開発中のものです。:2008/10/28(火) 11:15:02 ID:Ot+vqO8g
>>24
あるあるw 処理時間の関係でどうしてもなるよな。あれが厄介

27 :名前は開発中のものです。:2008/10/28(火) 19:25:08 ID:Ot+vqO8g
http://www.nicovideo.jp/watch/sm5018275
DXライブラリ3Dの動画発見した

28 :名前は開発中のものです。:2008/10/28(火) 21:25:44 ID:mug6SHfM
ニコニコでDXライブラリで検索したら16件ほど出てくるのね

29 :名前は開発中のものです。:2008/10/29(水) 04:50:01 ID:yue3f1oW
>>26
あれは線と線の交差を計算するだけ


30 :名前は開発中のものです。:2008/10/29(水) 04:51:17 ID:HeG9A7jn
>>29 kwsk

31 :名前は開発中のものです。:2008/10/29(水) 05:21:45 ID:yue3f1oW
>>30
移動前と後の座標間を結ぶ線を引く。線を引くといっても直進なら2つの座標が直線を表す式になる。
直線1本を座標変換によってX軸と一致すると仮定する。
検査対象のオブジェクトのY座標が全てプラスまたは全てマイナスなら交差していない。

検査対象が1本の直線だとしよう。
直線は2つの座標で表されるので、その座標がプラスとマイナス座標の組み合わせなら交差していることになる。
数学では交点を求めるが、交差のみ検査するなら、Y座標だけ調べればいい。
二つの座標を(x1,y1)と(x2,y2)として、y1×y2がプラスなら交差なし、マイナスなら交差ありになる。
ポリゴンは線の集合なので、ポリゴンを構成する全ての直線についてこの計算をするもよし、
正の座標と負の座標それぞれの数を数えるもよし。

座標変換については高校数学で習うけど、ゆとり教育の今は大学まで進まないと習わないだろうね。
コンピューターグラフィックとかシミュレーションやるなら絶対必要な数学なんだけど、
大学生になってから学び始めても理解できるわけがない。
ようするに日本人は優秀なプログラマにはなれない。


32 :名前は開発中のものです。:2008/10/29(水) 08:48:56 ID:46mBxw3n
論理飛躍しすぎだろjk

33 :名前は開発中のものです。:2008/10/29(水) 15:25:49 ID:S9yFdqtr
>>31
>Y座標だけ調べればいい。

という意味がわからん・・。
x軸と一致するように回転した線分の定義域x0の範囲を
x01< x0 <x02
としたら、この範囲の中でyの掛け算結果がマイナスになれば交差とわかるけど。
もし交点がこのx0の範囲じゃないところで交差していたらどうするの?
直線と直線の交差ならこれでいけるけど、
使いたいときってほとんど線分と線分じゃない?

34 :名前は開発中のものです。:2008/10/29(水) 15:36:57 ID:HeG9A7jn
>>33
横レスすみません。直線と線分って定義上違うんですか?
直線と長方形という意味でしょうか?

35 :名前は開発中のものです。:2008/10/29(水) 15:41:55 ID:p+8U8df2
>>34
直線の長さは無限大。(線分には端が存在するが、直線には端が存在しない)
だから、二本の直線は必ず交差する

注1 並行である場合を除く
注2 2Dの場合に限定

36 :名前は開発中のものです。:2008/10/29(水) 15:45:07 ID:HeG9A7jn
>>35
詳しい説明ありがとうございました。なるほどそういう違いがあるんですね。

37 :名前は開発中のものです。:2008/10/31(金) 03:09:52 ID:wPwg2eVl
結局>>31の方法で線分の交差は判定できるの?

38 :31:2008/10/31(金) 06:44:39 ID:SBgHi4S/
直線と言ってしまったのは悪かった。
まあ確かに>>33の言うとおり、x座標の範囲も見ないと実際は分からないけど、
直線とみなさないとy座標だけでは上にあるとも下にあるとも言えないから。

両方を直線とみなせば並行じゃない場合必ず交差する。
でも、平行じゃない直線が取るx座標、y座標は無限となるでしょ。
y座標のみ見るというのは、点として見ているから交差しない。
僕が言いたかったのは、基本的には数学の計算を利用するけど、交点まで求める必要はないということ。

計算手順としては、座標変換後、それぞれのx座標のみについて基準の線分の範囲内にあるかどうかを見て、
次に>>31で説明したようにy座標のみを見れば大体判断できる。
x座標が範囲の内と外をまたぐ線はあいまいだけど、
基準線の交差する側の端点を基準にしてx成分とy成分の比率を見れば交差するかどうかが分かる。

ちなみにこの計算方法はキャノンが特許申請してるが
常識なので却下するべき。
http://www.j-tokkyo.com/2003/G06T/JP2003-085568.shtml


39 :名前は開発中のものです。:2008/10/31(金) 07:17:25 ID:2oP1KQG/
こんなのが特許なら俺のソースは特許500個くらいあるな。

40 :名前は開発中のものです。:2008/10/31(金) 07:37:16 ID:ypJM5WNC
>>31
あんた詳しいな。いろいろと。差し支えなければ職業とか聞きたい。

41 :名前は開発中のものです。:2008/10/31(金) 20:29:02 ID:2jgW7Qyq
この休みはゲーム作るか……

42 :名前は開発中のものです。:2008/11/01(土) 15:44:46 ID:NPyLG5nz
ポリゴンもそうだが球の当たり判定でいくのが一番簡単
中心と半径だけで計算できる。


43 :名前は開発中のものです。:2008/11/02(日) 08:06:57 ID:lCIgFzJ9
何気なく質問した当たり判定だけどピンキリだって事だな

44 :名前は開発中のものです。:2008/11/02(日) 11:25:09 ID:N/BXqZR7
で、DXライブラリに当たり判定してくれる関数はないの?

45 :名前は開発中のものです。:2008/11/02(日) 12:31:49 ID:5aCVFStd
3D版にはあるね。
本家の隠し関数の中にあるかどうかまでは知らない。

46 :名前は開発中のものです。:2008/11/02(日) 15:48:59 ID:HThmNcwB
>44
DXライブラリって、そういう系統の関数は用意しないという設計思想のよーな。

47 :名前は開発中のものです。:2008/11/02(日) 19:05:58 ID:tamTTJ4k
DXライブラリの2Dの方は2Dだし別に衝突判定とか用意しなくていいと思う。
初心者なら四角か球同士の判定を自分で実装することの勉強にもなるし2Dは
高校の数学程度で十分自力で実装可能。
3Dならそれだけで分厚い本があったり研究者がいたりするくらいだから面倒だけど。

48 :名前は開発中のものです。:2008/11/02(日) 19:10:46 ID:R+WQmTm1
3DでもAABBや球の辺り判定なら2Dと変わらないよ
2Dでも面倒なことするなら面倒

49 :名前は開発中のものです。:2008/11/07(金) 09:51:29 ID:D/J6e6ls
3DのAABBは、スキンメッシュだと非常に面倒


50 :名前は開発中のものです。:2008/11/07(金) 17:21:25 ID:F7VY1GkH
あー、ブロッコリー食いたくなってきた。スレチガイかもしれませんがあれってどうやって食べるの?

51 :名前は開発中のものです。:2008/11/07(金) 17:24:04 ID:F7VY1GkH
すみません。板間違えてました。野菜板で聞いてみますノシ

52 :名前は開発中のものです。:2008/11/07(金) 17:32:26 ID:AIGNp4++
ちょwww

53 :名前は開発中のものです。:2008/11/08(土) 04:58:31 ID:AWLKZdyA
DXライブラリのスレは勘違いでいいから賑わって欲しい・・w

54 :名前は開発中のものです。:2008/11/08(土) 14:28:00 ID:zrv99/58
WMPの視覚エフェクトをまねたいんだけど
リアルタイムの画像処理はDXライブラリじゃ難しい?

55 :名前は開発中のものです。:2008/11/08(土) 14:45:42 ID:cVyljR6E
>>54
DXライブラリを詳しくわからないのだけど、
DXライブラリってテクスチャつかえますよね?
レンダリングターゲットをテクスチャに設定して
そこに視覚エフェクトを描画。
それを、通常レンダリングターゲットにもどして
そのテクスチャを描画してみては?
視覚エフェクトのアルゴリズムがわかれば可能だと思います。




56 :名前は開発中のものです。:2008/11/08(土) 15:49:01 ID:eTLcPw0w
特定のキー以外を取得したいのですが、
例えばエンターキー以外が押されている場合を取得するのはどうやればいいのでしょうか?

if (CheckHitKey(KEY_INPUT_0) == 1)
{
flgOn = true;
}
if (CheckHitKey(KEY_INPUT_1) == 1)
{
flgOn = true;
}
if (CheckHitKey(KEY_INPUT_2) == 1)
{
flgOn = true;
}
....
if (CheckHitKey(KEY_INPUT_RETURN ) == 1)
{
flgOn = false;
}
のようにして、一つずつどのキーが押されているかを判定して、
その押されたくないキーの時だけフラグをONにしないと言う方法を考えたのですが、
大量に判定(255個?)しないといけません。
それに書く量も多いです。
何か良い方法はないでしょうか?

57 :名前は開発中のものです。:2008/11/08(土) 16:18:22 ID:QvZXcY8M
>56
普通に考えればそうなるんじゃないかなあ。
タイピングを必要とするソフトなんだろうか。

58 :名前は開発中のものです。:2008/11/08(土) 16:22:15 ID:mEomuEol
>>56
KEY_INPUT_○○を全部一つの配列に入れとけばループで処理できる
KEY_INPUT_RETURNが来たときだけ別にすればいい

59 :名前は開発中のものです。:2008/11/08(土) 16:30:21 ID:L3IthcNy
flgOn = false;
if (CheckHitKey(KEY_INPUT_RETURN) == 0)
{
flgOn = true;
}

じゃだめなの?

60 :名前は開発中のものです。:2008/11/08(土) 16:31:40 ID:L3IthcNy
あーごめん、だめだ。 エンター押されてない かつ ほかのキーが押されてる だったね

61 :名前は開発中のものです。:2008/11/08(土) 16:31:51 ID:jD220VQN
>>56
CheckHitKeyAll( void )を使って、キーボードの状態を監視しておいて、
何か押されたとき、CheckHitKey(KEY_INPUT_RETURN)で、
エンターが押されているかどうか判別する。
エンターが押されていなければ、エンター以外の何かが押されたことになる。

62 :名前は開発中のものです。:2008/11/08(土) 17:05:01 ID:cnhuR5Wy
CheckHitKeyAll(void) だとマウスボタンとゲームパッドも反応するので
CheckHitKeyAll(DX_CHECKINPUT_KEY) で。

……これでもパッドが反応するんでコードチェックしたらバグだった。

DxInput.cpp:
 >// ジョイパッドのチェック
 >if( CheckType & DX_CHECKINPUT_KEY )  // DX_CHECKINPUT_PAD のはず

気になるならバグ報告して修正を依頼してください。

63 :名前は開発中のものです。:2008/11/08(土) 17:08:47 ID:eTLcPw0w
みなさんありがとうございます。
一応タイピングのゲームです。

ループ処理をヒントに、
bool flgOn = false;
for (int i = 0; i < 256; i++ )
{
if (i != KEY_INPUT_RETURN)
{
if (CheckHitKey(i) == 1)
{
flgOn = true;
}
}
}
という風な処理にしたら、一応望み通りの動きができました。
でもバグ有りそうな予感がします。
CheckHitKeyAllを使えばもう少しスマートに書ける……のかな?

64 :名前は開発中のものです。:2008/11/08(土) 17:24:48 ID:QvZXcY8M
タイピングゲームって言っても、使わないキーはあるだろうから
そのあたりを省いた方がいいかも

65 :名前は開発中のものです。:2008/11/09(日) 13:19:18 ID:YyCrr7f5
KEYリテラルはビットフラグを利用してると思うから
&を使えばシンプルにすっきり書けるはずだよ。

66 :名前は開発中のものです。:2008/11/09(日) 15:04:32 ID:wPDrFVAu
だれかDXライブラリで作ったすごいゲーム等紹介してください

67 :名前は開発中のものです。:2008/11/09(日) 15:37:16 ID:d71QR9Rf
>>66がすごいと思うかは知らんが、
公式で紹介されてない所だと夜光蛾4とかDiadraEmptyとか。
同人系は「DXライブラリでここまで作れる」っていう良い例が多いな。

68 :名前は開発中のものです。:2008/11/09(日) 16:53:27 ID:HksuFgRc
DiadraEmptyすげえな。
個人的にはモノリスフィア。

69 :名前は開発中のものです。:2008/11/09(日) 17:01:59 ID:p4NI5+2s
>>66
四聖龍神録は?半オープンソースだし。


70 :名前は開発中のものです。:2008/11/09(日) 18:19:57 ID:/7amOdfc
DXライブラリってDirectXのラッパーなんだから2Dならなんでもいけるだろ

71 :54:2008/11/10(月) 00:04:21 ID:fweGd5hJ
>>55
描画先変更できたのかーー!
こいつは便利だ

他にも見落としてる便利な関数あるかもと思って久しぶりに本家リファレンスページ見たら
”ドット単位で画像にアクセスしたい関係”ってのが追加されてて便利すぎフヒヒきゃっほう!!!11


もうひとつ質問です。DrawPolygon3Dかなにかで3D平面を、空気遠近法で表示させたいのですが
似非でもいいのでいい方法ないでしょうか

72 :名前は開発中のものです。:2008/11/10(月) 17:51:27 ID:22QGh1G7
DrawPolygon3DのZ値を変えれば距離が変わるよ。
本家のリファレンスみたらわかるはず。

73 :名前は開発中のものです。:2008/11/11(火) 01:35:00 ID:g6Sl8AVb
>>66
あとはゲームではないが
ウディタ(WOLFRPGエディタ)もそうだ。

74 :名前は開発中のものです。:2008/11/11(火) 16:04:15 ID:VHeofJsH
8時から11階から目薬の企画実行移します。場所は↑のとこで。
参加者は今のとこ私の他は3人です。その後焼き鳥でも食べに行きましょう。

75 :名前は開発中のものです。:2008/11/11(火) 19:37:44 ID:ktqf9Hz0
最近のグラボは、古いDirectXにマトモに対応しておらず
DXライブラリもその煽りを食らってるって聞いたんだけど、どうなん?

76 :名前は開発中のものです。:2008/11/12(水) 06:22:06 ID:yL4++M3C
そうなの?
9600GT,8800GTS,6600GTの3つ使ってるけどどれも不具合出たこと無いよ。

それよりVistaでたまにおかしなことになる・・。
同じコードで動かしてもXPとVistaじゃ違う挙動することが。

一つ一つのサンプル動かしても全然違わないんだけど、
スゲー大きなプログラムを動かしてみると違いが出てくることがある。
どうしてなんだろ・・。
DX管理人さんはそんなことないって言ってるから
自分のプログラムが悪いだけかもしれんが・・。
みんなそういうこと無い?

77 :名前は開発中のものです。:2008/11/12(水) 08:00:35 ID:10ZLablI
>>76
VISTAに最初からはいってるのはDirectX10だからね。それも中途半端な。
MSの中途半端な対応のせいでゲーム開発者はみんな迷惑してる。
DirectX9とか新しいDirectX10とかを入れてみると改善すると思う。

78 :名前は開発中のものです。:2008/11/12(水) 08:10:38 ID:wRCT4Vg2
>>76
ビデオドライバ類が関係しているとかないかな

79 :75:2008/11/12(水) 18:00:22 ID:IPCAcIHc
グラボじゃなくてVistaってことかもしれん。
自分は持ってないんで確認できないまま適当に書いた、すまん。

80 :76:2008/11/12(水) 20:17:02 ID:yL4++M3C
DirectX10の影響はいろいろ聞くね。
今度出るwindows7だっけ?あれはどうなるんだろう・・。

>>75

VistaとXPデュアルブートするといいよ。
作ったゲーム色んな環境で試してみれる

81 :名前は開発中のものです。:2008/11/12(水) 20:59:00 ID:IPCAcIHc
>80

2000 orz

82 :名前は開発中のものです。:2008/11/12(水) 22:09:52 ID:10ZLablI
Windows7でMSコケたらDirectX終わってLinux+OpenGLが盛んになる予感

83 :名前は開発中のものです。:2008/11/13(木) 01:05:13 ID:mdnPfmFM
ビスタって結局なんだったんだ・・。
なんかうちの周りだと、PCに詳しくない奴が買ってるOSってイメージがある。
そのまま終わっていくのかビスタ。

84 :名前は開発中のものです。:2008/11/13(木) 07:38:57 ID:lJxFlB+u
諸刃の剣素人には(ry ってやつじゃない?

85 :名前は開発中のものです。:2008/11/13(木) 19:45:16 ID:EnpEGfrm
>>83
ネットできりゃそれでいいってやつが買ってる印象だな
あとはofficeでも使えりゃ困らないしな

86 :名前は開発中のものです。:2008/11/13(木) 23:48:34 ID:mdnPfmFM
レンダリング処理やエンコードとかしても、ビスタは遅くてしかたないよ・・。

87 :名前は開発中のものです。:2008/11/14(金) 00:26:08 ID:5PrZBKJs
>>80
今時デュアルブートって流行らないんじゃない?
VPCとかさ。

88 :名前は開発中のものです。:2008/11/14(金) 01:06:10 ID:71kfvXp8
今の最新技術は知らんけど、VirtualPC、VMWareは
グラフィックボード使ってなくて、CPU依存

89 :名前は開発中のものです。:2008/11/14(金) 01:26:37 ID:ZojnRlhq
デュアルブートって流行ってるからとかでやるもんじゃないだろ

90 :名前は開発中のものです。:2008/11/14(金) 01:28:06 ID:5PrZBKJs
どこから突っ込めばいいのか…

91 :名前は開発中のものです。:2008/11/14(金) 01:28:54 ID:BF+CzcYi
>>90
つ*

92 :名前は開発中のものです。:2008/11/14(金) 13:57:39 ID:foiTr96E
800*600のサイズでウインドウモードにしたいんだが、
SetGraphModeとChangeWindowModeを同時に使うと、
かなりの確率でOSごと落ちるorz

93 :名前は開発中のものです。:2008/11/14(金) 14:22:12 ID:foiTr96E
DxLib_Initの後にChangeWindowMode置いたらフリーズしなくなった
サーセンwwwフヒヒwwwww

94 :名前は開発中のものです。:2008/11/14(金) 14:48:29 ID:ZojnRlhq
>>93
初期化の前にウィンドウモードにした方が処理が早いよ

95 :名前は開発中のものです。:2008/11/14(金) 14:50:12 ID:foiTr96E
初期化(DxLib_Init)の前にSetGraphModeとChangeWindowMode書くと、
うちの環境ではなぜかフリーズするんです

96 :名前は開発中のものです。:2008/11/15(土) 19:53:04 ID:MzdFlqka
質問させてください

ゲームの速度をどのPCでも一定になるようにするために、
ScreenFlipを使う前と後の時間差を利用してる方法が本にあったのですが、
そもそもScreenFlip一回の時間はどのように決まっているのでしょうか?

97 :名前は開発中のものです。:2008/11/15(土) 20:12:06 ID:56rIt8Hu
リフレッシュレート。

画面のプロパティ→設定→詳細→モニタ で、リフレッシュレートが確認できる。
つってもこれは俺のPC(windows2000)だから他の環境だとちょっと違うかも。

98 :名前は開発中のものです。:2008/11/15(土) 20:17:30 ID:56rIt8Hu
補足。

ScreenFlipがリフレッシュレート通りになるのは
デフォルトで垂直同期信号待ちをしてるからであって、

「SetWaitVSyncFlag  ScreenFlip関数実行時にCRTの垂直同期信号待ちをするかのフラグセット 」

で、垂直同期信号待ちを切った場合は関係ない。

また、条件は知らないが特定の環境(うちの場合はサブのノートPC)では
垂直同期信号待ち設定にしていても、ScreenFlipで垂直同期信号待ちしてくれない場合が
ある事を確認済み。

99 :名前は開発中のものです。:2008/11/15(土) 20:27:43 ID:MzdFlqka
>>97-98
返事ありがとう。

リフレッシュレート自体はわかったんですが
後半よくわからなかったのでちょっと調べてみます・・・。

100 :名前は開発中のものです。:2008/11/15(土) 20:51:40 ID:56rIt8Hu
>ScreenFlipを使う前と後の時間差を利用してる方法

ってのがどんなのか判らないけど、
ScreenFlipの垂直同期信号待ちを利用した方法だとすると
前述したようにリフレッシュレートに依存するから
「どのPCでも一定の速度」にはならないよ。

リフレッシュレートを60にしてるPCと70にしてるPCではスピードが違う。

まぁそれを踏まえた上でいちばん簡単で代表的な速度を一定にする方法なんだけどね。
(つまり、リフレッシュレートが60の場合を前提としてゲームを作り、
 60以外にしてる人は60にしてからプレイしてください、となるw)

101 :名前は開発中のものです。:2008/11/15(土) 21:13:47 ID:56rIt8Hu
垂直信号同期待ちについて、おおざっぱに説明してみようか。
俺も聞きかじりの知識だが。

最近はテレビにしろディスプレイにしろ、液晶が主流で「薄型」になってるが
もしブラウン管(分厚い)のテレビなりディスプレイがあるなら、画面の前で手を振ってみるといい。
残像がぶつ切りに、ストップモーションのように見えるはずだ。

これはどういう事かというと、画面が60分の1秒に一回、点滅してるからそう見えるんだ。
(厳密には60分の1秒に画面半分)
つまり、画面が光ってる時に「手の影が見えて」、画面が消えてる時には「見えない」から
手の動きがぶつ切りに見えるわけだ。

そうやって点滅してるのに、ずっと光ってるように見えるのは残像のせい。

もっとも「眼(瞳孔)」の方は反射で動いてるから、画面が光ってる時には瞳孔が小さくなり
画面が消えてる時は瞳孔が大きくなってたりするはず。
だから画面に近づいたり、暗い部屋で画面を見たりすると極端に眼が疲れる。

102 :名前は開発中のものです。:2008/11/15(土) 21:24:13 ID:56rIt8Hu
さて、画面が点滅してる、と言ったが、画面全体がぱっとついたり消えたりしてるわけじゃない。
ブラウン管ってのは、奥から電子ビームを画面に向けて照射して、その部分のみを光らせてるわけだから
実際に光ってるのは1点のみ。(もっとも一度照射されるとしばらくは持続するらしいが)
その電子ビームの照準が、画面の左上から始まって、右端まで動き、
一段さがってまた左端から始まって右まで動き、を繰り返し、画面の右下まで進む。
つまり
┏━━━┓
┃□ぬ□┃
┃□る□┃ みたいな画面が表示されてると、それは実際は
┃□ぽ□┃
┗━━━┛

┏━━━┓
┃□ぬ□┃
┃■■■┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃□る□┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃■■■┃
┃□ぽ□┃
┗━━━┛
という感じで高速に書き換えられてるという事。

103 :名前は開発中のものです。:2008/11/15(土) 21:30:19 ID:56rIt8Hu
ここでゲームの話になるわけだが、ゲームのキャラクターは画面上をあちこちに動く事になる。
もしこの「動く」のが前述した「画面を書き換えてるタイミング」だったらどうなる?
┏━━━┓
┃ぬ□□┃
┃る□□┃ この状態から
┃ぽ□□┃
┗━━━┛
┏━━━┓
┃□□ぬ┃
┃□□る┃ この状態からにまで移動しようとすると
┃□□ぽ┃
┗━━━┛
┏━━━┓
┃ぬ□□┃
┃■■■┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃□る□┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃■■■┃という感じになり、
┃□□ぽ┃
┗━━━┛
┏━━━┓
┃ぬ□□┃
┃□る□┃ 人間の目にはこう映ってしまう。この現象をティアリングと呼ぶ。
┃□□ぽ┃
┗━━━┛

104 :名前は開発中のものです。:2008/11/15(土) 21:38:19 ID:zVe3F0+t
>>100
「ScreenFlipを使う前と後の時間差を利用してる方法」ってのを普通に解釈したらリフレッシュレートに依存せずに一定になるよ。
ScreenFlipの待ち時間に関係なく、1フレーム(1ループ)の差時間から移動距離を割り出せばok。
ただし、ゲーム画面がアクティブでなくても実際に時間は経過してるので、ゲームに戻るとその分進む(進んだ)ことになる。
これを回避するなら、ゲーム内で独自にインクリメントカウントを設置し、そこから移動距離を割り出せばok。
ゲームプログラミング独特の考え方だね。

105 :名前は開発中のものです。:2008/11/15(土) 21:40:57 ID:zVe3F0+t
>>101
ブラウン管テレビは29.97fpsだよ。

106 :名前は開発中のものです。:2008/11/15(土) 21:41:23 ID:56rIt8Hu
このティアリング(ちらつき)をさせないためにはどうすればいいか?

これが「垂直同期信号待ち」であって、つまりは
ディスプレイが画面全体の書き換えが終わるまで、
次の描画処理をしないで待ってるってわけだ。

これがScreenFlipではデフォルトで行われてる。
だからScreenFlipを使うと速度が一定に保たれる……のだが、

「画面の点滅は60分の1秒」と言ったが前述したが、これが要するにリフレッシュレートの事。
つまりこの速度をPC側で自由に変更できたりする。

リフレッシュレート60の場合はScreenFlipは60分の1秒経つまで待つわけだが、
リフレッシュレート70の場合は70分の1秒しか待ってくれない。
その分ゲーム速度は速くなってしまうわけだ。
(もしプログラム処理自体が重くて、70分の1秒で終わらなかったら
 70分の2秒、つまり35分の1秒かかるわけで、逆に遅くなる)



107 :名前は開発中のものです。:2008/11/15(土) 21:47:42 ID:56rIt8Hu
移動距離を割り出すという方法は知ってるし理屈も解るけど、
当たり判定もそれ相応の処理にしなくてはいけないし、
そうなるとリプレイ記録&再生をどうやればいいのかわからなくなる。
そこらへんはどうやってるのかな。

ってこれはDXライブラリと関係ないか。

108 :名前は開発中のものです。:2008/11/15(土) 21:57:26 ID:zVe3F0+t
当たり判定もリプレイ記録も問題ないよ。
でもScreenFlipの待ち時間を基準にするなんて誰もしないと思うから
あたかもScreenFlipを使うとスピードがリフレッシュレート依存になるみたいな解説はやめたほうがいいと思うよ。

109 :名前は開発中のものです。:2008/11/15(土) 22:29:29 ID:PnDW3j7Q
画面を書き換えたときに時間を取得し、前回取得した時間と比較して、
1ループが17ミリ秒(60FPS)になるまでウェイトをかけてやればいい
これが一番簡単で確実

110 :名前は開発中のものです。:2008/11/15(土) 22:34:05 ID:RlpGwAN3
リフレッシュレートが60のときはScreenFlip依存でいいんじゃね
それ以外はタイマで

111 :名前は開発中のものです。:2008/11/15(土) 23:12:07 ID:56rIt8Hu
>でもScreenFlipの待ち時間を基準にするなんて誰もしないと思うから

いや、俺してたし、してるしw

112 :名前は開発中のものです。:2008/11/15(土) 23:32:40 ID:zVe3F0+t
>>111
その話をしてるのは君だけど、実際にそれを採用してる人はいないって事だよ。

もしかして君は採用もしてるの?
だとしたら自分が長々と説明したデメリットが解消できてないよね。
それを解消したくて質問したいならそれなりの場所でそれなりの質問方法を取ればいいと思うよ。
もしそうじゃないなら誰も採用しない方法を解説されてもややこしくなるだけだから…。

113 :名前は開発中のものです。:2008/11/15(土) 23:41:52 ID:56rIt8Hu
ティアリングが嫌だから切り替え方式にしてるます。
最初はゲーム起動時に測って自動切換えにしてたけど
それもやめて結局手動切り替えに……。

114 :名前は開発中のものです。:2008/11/15(土) 23:43:35 ID:56rIt8Hu
切り替えってのはリフレッシュレート依存方法と、タイマでウェイトかける方法の二つね。
移動距離算出方法はやった事ないです。

115 :名前は開発中のものです。:2008/11/16(日) 00:40:12 ID:H38ODQJJ
ティアリングとスピードは関係ないでしょう。
とりあえずDXライブラリを使うならScreenFlip()で垂直同期を待てば良いと思うよ。
スピードの話はまた別の話。

>>113
ゲーム起動時に何を測るの?
それと、切り替える必要性が見えないんだけど・・・?

116 :名前は開発中のものです。:2008/11/16(日) 01:43:29 ID:Hwka3oLK
>>115
>ゲーム起動時に何を測るの?

ScreenFlipを一秒間繰り返して、その回数で判断。
>>98で書いたけど、垂直同期信号待ちをしてるはずなのに
ScreenFlipで待ってくれない場合があるから、
FPS値が異常に高かったらそうだと判断して
タイマー値によるウェイトかけるようにしてた。

>それと、切り替える必要性が見えないんだけど・・・?

それはどっちを基準にして?

ScreenFlipを基本として考えるなら、リフレッシュレートが変更された場合や
上で書いた垂直同期信号待ちしてくれない環境の時に異状スピードになってしまう。

タイマ値でウェイトかける場合は、やっぱりティアリングが気になるし、
1フレームごとに点滅するエフェクトとかがきちんと点滅しなくなる。

117 :名前は開発中のものです。:2008/11/16(日) 02:40:28 ID:H38ODQJJ
>>116
えっと、だからね、ScreenFlipとティアリングは関係あるけど、
それらとウェイトは関係ないって事だよ。

ゲーム起動時にScreenFlipの待ち時間からリフレッシュレートを判断してるようだけど、
それも結局ScreenFlip基準でタイマー取る方式だよね。
てことは例えば60Hzを基準にウェイトをかけるって事だよね。
だとしたらはじめからリフレッシュレートのウェイトなんかに頼らずに、
マルチメディアタイマーででも1/60sを基準にコードを書けばいいでしょ?
だから起動時に測る必要もないし、リフレッシュレートの変更やVsyncを待たない場合は考慮しなくていいの。
繰り返すけど、タイマーでウェイトかけてもScreenFlipを使うならティアリングはないよ。

118 :名前は開発中のものです。:2008/11/16(日) 03:40:07 ID:Hwka3oLK
何か齟齬がある気がする。

タイマでウェイトかける場合は、ScreenFlipのVsync待ちはOFFにしてあるんだけど、
それでもティアリングは発生しない?

んじゃ発生してる俺のプログラムは何か間違ってるのか。

理屈上、1/60sを基準にウェイトかけるようにすれば
ゲームスピードは一定になるが、タイミング次第で
ティアリングが発生しない状態か、
あるいはティアリングが発生し続ける状態が
維持されるものだと思っていたのだが。



119 :名前は開発中のものです。:2008/11/16(日) 04:22:31 ID:H38ODQJJ
Vsync待ち、かつ、タイマーで制御するんだよ。
これを前提に最初から読み返してみて。

120 :名前は開発中のものです。:2008/11/16(日) 14:59:43 ID:Yf+kFgNP
ScreenFlipもやって、1/60secも待って、ってやらないと一定にならないし、ちらつきも解消されないよ。

121 :名前は開発中のものです。:2008/11/16(日) 17:43:53 ID:fHnaEgZY
タイマー待ちを使うんならVsync待ち無しのScreenFlipじゃないと
ティアリングは発生しないけど動きが凄いガクつくぞ
ADVみたいに動きの少ないゲームならそれでも良いと思うけど、
STGやACTでは見るに耐えない

122 :名前は開発中のものです。:2008/11/16(日) 18:33:07 ID:H38ODQJJ
60Hzに合わせれば60Hzの環境なら結局タイマーでウェイトしないから問題ないよ。
75Hzの環境なら60fpsに制限されるから多少はガクつくけどこれはトレードだね。
ちなみに3Dモノとか海外のゲームはfpsを出来るだけあげて垂直同期しないっていうのが主流みたい。

>>121みたいにfps制限はするわ垂直同期しないわっていうのは愚の骨頂。
ティアリングするわfps制限されてるわでひどいもんですわ。

123 :名前は開発中のものです。:2008/11/16(日) 21:17:57 ID:gVsDrcFZ
>>102-103
ガッ

124 :名前は開発中のものです。:2008/11/16(日) 21:57:20 ID:fHnaEgZY
>>122
なんでそんなに相手を見下したような態度なの?

>60Hzに合わせれば60Hzの環境なら結局タイマーでウェイトしないから問題ないよ。
それはわかってるよ
だから最初にリフレッシュレート測って垂直同期主体にするかタイマー同期にするか判断するんでしょ?
121はあくまでfpsとリフレッシュレートが一致していない場合の話

>75Hzの環境なら60fpsに制限されるから多少はガクつくけどこれはトレードだね。
ここで122の言うとおり垂直同期とるかとらないかはプレイヤーの好みの問題
オプションで選択できるようにすべきだと思う

>ちなみに3Dモノとか海外のゲームはfpsを出来るだけあげて垂直同期しないっていうのが主流みたい。
そうだね。3Dモノは可変fpsと相性良いよね。

>>121みたいにfps制限はするわ垂直同期しないわっていうのは愚の骨頂。
垂直同期をとらないことで手軽に入力に対するレイテンシを下げることができるし、
リプレイを取る目的でfpsを固定しなければならない場合もあるんだから、
短絡的に愚の骨頂というのはどうだろう

122的には60fps固定+垂直同期してない東方緋想天は愚の骨頂?
俺はそうは思わないけど・・・

125 :名前は開発中のものです。:2008/11/16(日) 22:50:57 ID:5RilDqvE
2Dシューティングを過去いくつか作ってきましたが、
リプレイ周りの実装も含めて、やっぱりFPSは60に固定でロジックを組みますよ。
オプションで「Vsync待ちをするかタイマーか」を選択させてます。
124さんもリプレイの話をしているから、そういう前提で言ってるのだと思うのですが。


126 :名前は開発中のものです。:2008/11/16(日) 23:07:43 ID:xtMr6+ch
リプレイって別にFPS固定必要ないような
入力があったキーとその時の経過フレーム数があればいいんだし

127 :名前は開発中のものです。:2008/11/16(日) 23:30:59 ID:0yDeWpwc
おまいら もちつけよ.

128 :名前は開発中のものです。:2008/11/17(月) 01:36:47 ID:GetktCW+
>>124
何そのゲーム。>東方なんたら
最悪だね〜。

>>126
だよねぇ。

129 :名前は開発中のものです。:2008/11/17(月) 03:32:51 ID:qWlXMT4E
なんだ釣りか

130 :名前は開発中のものです。:2008/11/17(月) 18:51:51 ID:TAngTg8T
なんだこんなすばらしいスレがあったのか>>1

131 :名前は開発中のものです。:2008/11/17(月) 21:49:06 ID:E1tboJG/
DXライブラリで作った横スクロールアクションのソースってどこかに転がってない?

132 :名前は開発中のものです。:2008/11/17(月) 22:00:58 ID:tSUha7RY
転がってるって・・・
作者の好意で公開してるソースをそんな言い方するなよ

133 :名前は開発中のものです。:2008/11/17(月) 22:04:49 ID:Zhr1hzWJ
ニコニコで一時話題になった、しかけが外道なスーパーマリオもどきはソース公開してたと思う

134 :125:2008/11/17(月) 22:57:25 ID:pxmPH9a8
>126
たしかにそうですね。
ただ、自分の場合は、FPSを固定すればあとはキー入力さえきちんと記録できていれば
リフレッシュレートが違えどもリプレイがずれることがないのでそうしていました。



135 :名前は開発中のものです。:2008/11/17(月) 23:31:08 ID:OriaVhLm
移動量固定方式か、経過時間による移動量計算方式かで
やり方も違ってくるんじゃないかな。

136 :名前は開発中のものです。:2008/11/18(火) 13:05:35 ID:FZcPiuDy
>>133
しょぼんのアクション だっけ?
やっと1−1クリアだと思ったのに愕然とした記憶がある。

137 :名前は開発中のものです。:2008/11/19(水) 13:43:13 ID:xnzA6xl6
DirectXのバージョンを9に移行するらしいね

138 :名前は開発中のものです。:2008/11/19(水) 14:54:42 ID:TpPgoKXn
>>133
あれはやばいです
あれはほんとうに・・やばい・・。
この道10年のベテランですらあれを見ると悶絶して悶え死ぬレベル。
あのソースを読んだあの日、私は自分の人生について考えさせられました。

139 :名前は開発中のものです。:2008/11/19(水) 15:08:39 ID:lxkh5WN5
そんなにすばらしいのか

140 :名前は開発中のものです。:2008/11/19(水) 15:11:10 ID:Lz0a0oQh
思わず3回DLし直す位のレベル

141 :名前は開発中のものです。:2008/11/19(水) 18:41:54 ID:TpPgoKXn
あれは伝説のソースですよ

142 :名前は開発中のものです。:2008/11/20(木) 23:58:11 ID:UIc9LZep
DLしてみたが・・・凄まじいソースだな

143 :名前は開発中のものです。:2008/11/21(金) 00:08:16 ID:AZA6fSH/
俺のソースも似たようなもんだなw

144 :名前は開発中のものです。:2008/11/21(金) 00:14:35 ID:IPu5qEL0
汚いコード書ける奴って尊敬するわ
むしろ逆に頭良いと思う

145 :名前は開発中のものです。:2008/11/21(金) 00:46:35 ID:PFCyKir9
部屋が汚くても気にしないやつがいるのと同じ

146 :名前は開発中のものです。:2008/11/21(金) 05:06:26 ID:0gMw7+uw
http://fatalita.sakura.ne.jp/Software/cuirpgfordq3.lzh
これもマジキチ

147 :名前は開発中のものです。:2008/11/21(金) 05:58:28 ID:VvYw+mZM
>>146
これはアイテム4つで実装力尽きるw
配列すら使ってないとかやべぇ

でもスレチ

148 :名前は開発中のものです。:2008/11/21(金) 12:55:25 ID:3m8CIP+t
BASIC覚えたての頃、そんな風にGOTO文メインでテキストアドベンチャーゲームを作ったなあ…。
それにしてもその作者はDXライブラリ3Dの作者なの?
なんか色々考えさせられるな…。

149 :名前は開発中のものです。:2008/11/21(金) 15:36:28 ID:ELcxKG7H
でもスレチ

150 :名前は開発中のものです。:2008/11/21(金) 19:40:33 ID:yD9XL+v+
自分のスパゲティソースを晒す勇者はおらんのか・・

151 :名前は開発中のものです。:2008/11/21(金) 21:42:08 ID:FU8hvFU5
さらしてどうすんのよw

152 :名前は開発中のものです。:2008/11/22(土) 22:21:51 ID:j0m39ynA
タイピングゲーム作ってるけど疲れてきたぜ。
ゲーム一本完成させるって難しいな。

153 :名前は開発中のものです。:2008/11/23(日) 02:26:12 ID:YAgqgFQm
完全体になる前にリリースすればいいじゃない(マリー

154 :名前は開発中のものです。:2008/11/23(日) 02:27:42 ID:Ef5lma7p
プログラム歴3ヶ月おれもタイピングゲーム作ってます
プログラム練習としても面白いジャンルのような気がします
がんばりましょう

155 :名前は開発中のものです。:2008/11/23(日) 14:21:16 ID:bJorsnCE
>>153
俺知ってるよ
そういうのをあじゃいるって言うんだよね

156 :名前は開発中のものです。:2008/11/23(日) 17:55:00 ID:pnQpCtQf
画面全体をぼかしたいのですが、どうすればいいのでしょうか?

SaveDrawScreen()で画面全体を保存した後に、
その画像を加工して表示するという方法を試しましたが、遅くてとても使えませんでした。
ちなみに手順は
保存→加工→保存→表示です。
加工と二回目の保存の処理の間がとても遅かったです。

直接DXライブラリで描画してる画像をぼかせばもっと早くなると思うのですが、
DXライブラリで直接ぼかす方法がさっぱりわからりません。
どういう方法でぼかせれるのでしょうか?

157 :名前は開発中のものです。:2008/11/23(日) 20:09:39 ID:YAgqgFQm
ブレンドモードを上手く使えばどうにかなるんじゃなかろうか。
昔、モーションブラーもどきを自分で作ったが細かいやり方は忘れた。

158 :名前は開発中のものです。:2008/11/25(火) 00:31:59 ID:xYyBQpV1
>156
そのまま画像を描画

αブレンドを適当に128くらいに指定してxy数ドットずらして描画×数回…

こんなのでどう?

159 :157:2008/11/25(火) 20:03:29 ID:5UMAw8SP
>>158
ああ、そうそう。
そんな感じでできると思う。たぶん。
ずらし量やブレンド率でぼけ足上手いこと調整してどうにかする。
関数化できたら楽そうだ。

160 :名前は開発中のものです。: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 :名前は開発中のものです。:2008/11/25(火) 22:39:54 ID:MBrRa9Zc
640 / dot ←この計算をfor文の前にやって適当な変数に代入しておく

162 :名前は開発中のものです。:2008/11/25(火) 23:02:53 ID:EDWbdjkC
>>160
i < 640/dot

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


ぼかすのがゲーム上そんなに大事じゃなかったら
このくらいで妥協するのが一番

163 :157: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 :名前は開発中のものです。: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 :名前は開発中のものです。:2008/11/27(木) 07:22:55 ID:UFJsiMGy
>>165
普通に使っている分には問題ないと思うけど…
コード量も関係ないし。
メインのループ(秒間30〜60回くらい回しているとこ)の外で1回やれば済む処理を
ループの中で毎回やってたりしてない?
例えばグラフィックハンドルへの画像の読み込みを毎回やっているとか。

167 :名前は開発中のものです。:2008/11/27(木) 12:05:54 ID:tLRoJzh6
DXライブラリもよっぽど変な使い方しない限りめっちゃ重くはならんでしょ。
そりゃまぁPCの性能にもよるけど。

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

凄腕のプログラマは極限まで無駄な処理を省いてるんだと思う。

168 :名前は開発中のものです。:2008/11/27(木) 17:02:45 ID:HwZNU9zJ
メモリの1バイトは血の一滴ですね

169 :名前は開発中のものです。:2008/11/27(木) 18:56:41 ID:9lHdy+ss
>>166-167
なるほどサンクス・・・
確かに無駄に繰り返してるかもしれない・・・。

170 :名前は開発中のものです。:2008/11/27(木) 20:46:39 ID:GnzSYpCC
フォントのサイズ変更とかと勝手に予想

171 :名前は開発中のものです。:2008/11/27(木) 22:41:46 ID:LOD/UyCK
>>161-164
ありがとうございます。
回数がご指摘の通り多すぎました。
>>157のコードと併用して、思っていたぼかしができました。
コードは私の作成したコードと>>157のコードを関数化しただけなので省略させていただきます。

172 :名前は開発中のものです。:2008/11/27(木) 22:48:28 ID:tLRoJzh6
フォントのサイズ変更はしゃれにならんほど遅いからな……。
別フォント用意すりゃいいことだが。

173 :名前は開発中のものです。:2008/11/28(金) 05:15:28 ID:10isJ4oY
SetWaitVSyncFlag(FALSE);

にしたらドラゴンボールの世界になってワロタ


174 :名前は開発中のものです。:2008/11/29(土) 16:25:44 ID:BtMciNRd
PlayMusic関数で再生位置の指定ってできないの?

175 :名前は開発中のものです。:2008/11/29(土) 22:48:46 ID:kaHILOZB
>>101

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


パソコンのディスプレイあるだろアレみるとわかりやすい

176 :名前は開発中のものです。: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 :名前は開発中のものです。:2008/12/01(月) 09:51:01 ID:Mqk5OkvC
3Dのゼルダってまんま64とGCのゼルダじゃね?

179 :名前は開発中のものです。:2008/12/01(月) 10:23:13 ID:PQmt2oZj
はい

180 :名前は開発中のものです。:2008/12/01(月) 16:53:55 ID:B+fc1nCX
DirectXで作るって言ったってどうせ自分でラッピングするんだから一緒だと思うぞ

181 :名前は開発中のものです。:2008/12/01(月) 16:57:45 ID:Mqk5OkvC
>>177
そのプロセッサ専用のライブラリを熟知してれば
サクサク動くゲームになる

例えばPS2ならEEとかのベクトル計算のためのライブラリの仕様とか
windowsマシンにはそんな計算機能はデフォルトじゃついてないから
どうしてもグラボ依存になる

182 :名前は開発中のものです。: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 :名前は開発中のものです。:2008/12/02(火) 08:48:55 ID:jLo5RDUc
どうでもいいがProcessMessage()の場所が俺の好みじゃなかった。
本文は読んでいない。

184 :名前は開発中のものです。:2008/12/02(火) 08:53:50 ID:l3NK/S0H
SetWaitVSyncFlagがFALSEで無い限りは

185 :名前は開発中のものです。:2008/12/02(火) 09:50:01 ID:ptyOGcVX
リフレッシュレートに依存する。

186 :名前は開発中のものです。:2008/12/02(火) 21:13:42 ID:xSROB0kK
x^nの計算なんか描画処理に比べたらほんの一瞬

187 :名前は開発中のものです。: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 :名前は開発中のものです。:2008/12/03(水) 05:38:32 ID:ecRDRm37
同一内容の文字列を毎フレーム表示する処理があり、

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

こうして予め文字列を描画しておいたサーフェスから
毎回メイン処理でDrawGraphしているのですが、どうもスッキリしません。
しかもGetDrawScreenGraphの説明にもある通り透過色が使用出来ません。
DXライブラリでは作成したサーフェスに直接描画出来ないのでしょうか?
やりたい事は「同じ文字列を毎フレーム描画する処理を軽くしたい」だけなのですが、
文字グラフィックファイルを用意することは出来れば避けたいので、良い方法があったら教えて下さい1


190 :189:2008/12/03(水) 05:45:19 ID:ecRDRm37
無駄に長くて分かり難くなってしまいました。
(例えば説明文等の)同一の文字列を毎フレーム描画する処理を軽くしたいが
文字グラフィックファイルを用意する以外で良い方法があったら誰か教えて下さいです。

191 :名前は開発中のものです。:2008/12/03(水) 09:09:23 ID:Zrkeui/r
DrawStringで十分軽いと思う
フォントハンドルを毎回読み込んだりしていない?

192 :189:2008/12/03(水) 17:18:45 ID:ecRDRm37
>>191
お返事遅くなって申し訳ありません。
当方の環境ではDrawStringでやった場合のFPSが30くらいでDrawGraphにすると60になりました。
DirectX自体、文字描画にGDIを使っているのでビデオカードで処理できるBitBltの方が高速だと思っていました。数年前の知識ですが。。
低スペックでも快適に動くように作りたいので、DrawStringは極力使いたくないです。

193 :189:2008/12/03(水) 17:29:14 ID:ecRDRm37
フォントの変更は行っていないので、フォントハンドルは使用していないです。

194 :名前は開発中のものです。: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 :名前は開発中のものです。:2008/12/03(水) 19:17:52 ID:o+fnXJLe
俺の事?
別にテストしたわけじゃなくて、普通に使ってるだけなんだが。

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

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

そこをかっとばしてグラフィック表示処理そのものを早くする方法を考えるのは無駄な話だ。

198 :名前は開発中のものです。:2008/12/03(水) 19:27:15 ID:zxrZF3eH
確かに
今与えられた情報だけではなんともいえんな

199 :名前は開発中のものです。:2008/12/03(水) 19:41:02 ID:RJPTfL79
文字列の長さ、量がまずわからない。

「フォントの変更は行っていない」というのが、フォントの大きさやアンチエイリアス有無の変更は行っているかもしれないとも読める。

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

情報は少ないが、前提を知っているば容易に共感できるし、解決方法を知っている人ならこの情報量でも回答できるかもしれない。

201 :名前は開発中のものです。:2008/12/04(木) 00:33:46 ID:GF73/yq8
>>197
>文字列表示が遅いってのが前提なら、そもそもグラフィック表示だって遅いだろ。

(;^ω^)

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

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

まあ、毎フレームキャッシュに無い文字を描画したら一般に言うところの
「文字列表示が遅い」ってのに当てはまるけど

203 :名前は開発中のものです。:2008/12/04(木) 09:46:46 ID:ggjOtlxc
良スレage
みなぎってきた、学校でゲーム作ってくる

204 :名前は開発中のものです。:2008/12/04(木) 10:33:56 ID:763fKCgi
>>200

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

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

192が出してる情報はその程度って事。

205 :名前は開発中のものです。:2008/12/04(木) 12:47:01 ID:GF73/yq8
>>204
>>202

分からない(・∀・)カエレ!!

206 :名前は開発中のものです。:2008/12/05(金) 18:06:46 ID:YY5q+8z/
ソフトウェア描画モードと言う物があるらしいのですが、
どれのことなのでしょうか?
一部のPCだと動かなかったりする時にこれを使えばいいらしいのですが……。
リファレンスを見た限りそれっぽいのがありませんでした。

207 :名前は開発中のものです。: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 :名前は開発中のものです。:2008/12/05(金) 20:49:20 ID:YY5q+8z/
>>207
ありがとうございます。
SetScreenMemToVramFlag( FALSE );
と、
SetUse3DFlag( FALSE );
を使ったらよさそうなのでこの二つを使ってみようと思います。

209 :名前は開発中のものです。:2008/12/06(土) 03:56:27 ID:5bnbt+Lt
>>204
垂直同期を使って処理していれば僅かな処理の遅さでFPSは半分になることがある
そしてGDIは遅い

>>189はDrawStringを使用せずに同等の文字描画処理をする方法を模索しているであって
デバッグをしてくれと言っているわけじゃないんだから君がムキになるのは頓珍漢な話
俺を含め解決策が分からない初心者が回答することが間違い

210 :名前は開発中のものです。:2008/12/06(土) 04:17:22 ID:MshHJhkd
俺もよくわからないけど、>>189

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

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

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

211 :名前は開発中のものです。:2008/12/06(土) 06:11:31 ID:VA5mVjgv
ファイナルファンタジーの裏ワザででてくる
数字ゲームとかあれ作ると面白そう

212 :名前は開発中のものです。:2008/12/06(土) 09:55:12 ID:DCsCuBVu
ブラックジャックといいたまへ

213 :名前は開発中のものです。:2008/12/06(土) 11:21:34 ID:gOAp6PdO
>>189は「同じ文字列」って書いてるじゃないか。
まあ任意のオフスクリーンバッファに描いてそれを転送したい、というのはわかるが
できる機能を追加するかDXライブラリをやめるしかないのでは。

214 :名前は開発中のものです。:2008/12/06(土) 16:48:54 ID:KujsLoK9
クリックイベントを使いたいのですがどうすればよいのでしょうか?
公式などにクリックイベントのコードがなかったのでここで質問させてください

215 :名前は開発中のものです。:2008/12/06(土) 17:16:43 ID:t9JSHoeE
SetWaitVSyncFlagをFalseにしておいて、16666マイクロミリセカンド待機し描画

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

待機を16200にすると60フレームになるので、同期でひっかかってるんだと思うのですが……

216 :名前は開発中のものです。:2008/12/06(土) 17:19:10 ID:KujsLoK9
自己解決しました

217 :名前は開発中のものです。:2008/12/06(土) 20:30:15 ID:JBa6ugiY
なんだったのよw

218 :215: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 :名前は開発中のものです。:2008/12/08(月) 00:31:03 ID:A0APKyuo
Cも一通りの知識は要るだろうから
平行して勉強しなはれ。

221 :名前は開発中のものです。:2008/12/08(月) 00:55:25 ID:FYgRMyd9
いやいや
もろCで作ってるよ
printfが絵を表示する関数になるだけ

222 :名前は開発中のものです。:2008/12/08(月) 03:17:20 ID:tsVxmfWH
>>219
「C言語 = printfやscanf、fopen等の標準関数」だと思ってるんならそれは間違いだ

223 :名前は開発中のものです。:2008/12/08(月) 03:37:47 ID:ghLgcWkz
>>219
それでいいと思うよー。
Cの文法なんて覚える事少ないし、入門書片手に取り掛かっちゃえば大丈夫。
今後も、プログラミングで何かを作る時、基本的にDXライブラリのような、外部のライブラリの使い方を覚えるって作業が大半になるよ。
入門書に書いてあるstdio.hのprintfみたいな標準関数を覚えるみたいに。

224 :名前は開発中のものです。:2008/12/08(月) 11:27:49 ID:tq0zLS+0
>>210

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

それこそ仕様を見直せとしか言いようがないようなw
毎フレーム更新する数値や文章ならプレイヤーに全文しっかり読ませるためものじゃないだろうし。

225 :名前は開発中のものです。:2008/12/08(月) 18:07:49 ID:ofH1nP7I
ノベルとかアドベンチャーのサンプルがあるサイト教えてください

226 :名前は開発中のものです。: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 :名前は開発中のものです。:2008/12/08(月) 20:56:58 ID:a6vLxw2w
内部の更新処理(当たり判定,posX += vXなど)のフレームレートを倍にするとか

229 :名前は開発中のものです。: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 :名前は開発中のものです。:2008/12/09(火) 13:46:02 ID:uZqK3Qyt
>>224
RPGやアドベンチャーゲームなら
1文字ずつゲーム内Windowに描画され、ゲーム内Windowごと表示非表示を切り替えられるって仕様は普通に有るでしょう

231 :名前は開発中のものです。:2008/12/09(火) 15:29:12 ID:hNxQdCPd
>>226
文字表示ぐらいしかないと思うけど・・・

232 :名前は開発中のものです。:2008/12/09(火) 15:52:37 ID:R5xGo07t
サンプルゲームみたいなのでなかったっけ?
前はあったはずなんだが。

233 :名前は開発中のものです。:2008/12/09(火) 17:32:59 ID:PL50HxGw
「DXライブラリサンプルゲームのダウンロード」のページにある
「スクリプトプレーヤー」の事じゃないかな。


234 :名前は開発中のものです。:2008/12/09(火) 18:26:23 ID:hNxQdCPd
スクリプトプレーヤーはソースの意味が分からない
いきなりスクリプトのソースみろとか言われてもなにがなにやらって感じ

235 :名前は開発中のものです。:2008/12/09(火) 19:12:36 ID:PIQiSLzg
サンプル見たいって話を聞くたびに
見てもわかるの?
という疑問が湧く。
同じ動きをするものを自分で書けるくらいの技量がなければ結局読めない気がする。

他人のソース読むのが超苦手で自分で書いた方が早い俺限定の話だが。

236 :名前は開発中のものです。:2008/12/09(火) 19:35:05 ID:aLvm7Uo6
>>235
アルゴリズムは同程度の技量がないと読めないけど、設計はそんなことないよ。

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


自作2Dライブラリ作ってたんだが、画像系の実装が終了したところで
面倒になってきたんでDXライブラリを使うことにした。おまいらよろしく。

237 :名前は開発中のものです。:2008/12/09(火) 20:33:33 ID:PIQiSLzg
>>236
ああ確かに設計は読みたいかも。
うまい人のクラス構成とかはみてみたい。

238 :名前は開発中のものです。:2008/12/09(火) 20:44:39 ID:HfON+uiV
うまい人のコードは,クラスやメソッドの実装にどんどんステップインしていかなくても
表面だけ見れば理解できるよね

239 :名前は開発中のものです。:2008/12/09(火) 20:59:26 ID:MCEWLRF6
>>228
すいません、内部処理は一定化したかったので・・

>>229
ありがとうございます!
引っかかりが無くなりました。
タイマーの精度の問題だったみたいですね。

240 :名前は開発中のものです。:2008/12/10(水) 15:43:30 ID:LwDc2Tc0
>>220
>>221
>>222
>>223
printfなどが関数だということを意識していませんでした。
まさに、C言語=標準関数のつもりで勉強していました。
外部ライブラリを使うのだから、それから提供される関数の使い方を勉強するのは当たり前ですね。
プログラミングに対する疑問が少し解けました。どうもありがとうございました。

241 :名前は開発中のものです。:2008/12/11(木) 09:38:29 ID:oww0q0NN
画像の、ある部分だけを拡大して描画することは出来ますか?
ループ表示する背景の一部分だけを拡大表示したいです。

242 :名前は開発中のものです。:2008/12/11(木) 10:38:54 ID:qrB4r20j
やった事ないけど、指定領域だけで新しいグラフィックハンドルを作るとかできるはずだから、
それをしてから拡大表示させればいいんじゃないかな。

前提条件として矩形範囲のみって事になるけど。

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

244 :名前は開発中のものです。:2008/12/11(木) 11:23:00 ID:qrB4r20j
背景をスクロールさせつつ、拡大部分もスクロールさせるのかな。
それじゃ無理だね。

それならいっそ、

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

ってやってみるのはどうだろう。
背景を二回描くから、やり方によってはコストかかるけど……。

245 :名前は開発中のものです。:2008/12/11(木) 12:23:15 ID:Otp3maXe
つDrawRectExtendGraph

246 :名前は開発中のものです。:2008/12/11(木) 12:49:25 ID:oww0q0NN
>>244
そうですそうです、元画像の一部分を拡大表示したいんです。

>>245
おお!ありがとうございます。そんな関数があったんですねw
面倒でも自分でDxLib.hをチェックしないと駄目ですねw

247 :名前は開発中のものです。:2008/12/12(金) 18:14:48 ID:dqaLLhhf
今 トルネコやシレンみたいな2Dダンジョン探索ゲームを
800 x 600 ウィンドウモードで作っているんですが
2Dゲームは 640 x 480 が基本だと聞きました。

800x600だと何か不都合でも起こるんでしょうか?

248 :名前は開発中のものです。:2008/12/12(金) 19:08:10 ID:e0uVhp4S
32x32とか16x16のブロックがぴったり収まらない、とか。?

249 :名前は開発中のものです。:2008/12/12(金) 20:15:13 ID:dqaLLhhf
画面下と右にブロックが半分だけ表示されるのは我慢しようと思います。
800x600だと特定の環境ではちらつきが酷いとかだったら嫌だなぁと思いまして

250 :名前は開発中のものです。:2008/12/12(金) 20:24:18 ID:yokHYtBf
>>247
処理速度の問題とユーザの環境の問題
ちなみにカラーモードも256色パレットモードが基本だった
しかしそれは過去の話
今はPCのスペックは十分だし、800*600の画面モードの無いPCの方が少ないと思うから問題ないかと


251 :名前は開発中のものです。:2008/12/12(金) 21:25:42 ID:aXKygAOw
ちょっと便乗
CRT使いなんでわからないんだけど
液晶の場合、画面サイズに合わない画面モードの表示ってどうなるの?

1)全画面に拡大されてぼやける
2)表示分だけ使われて余白は黒塗りになる

252 :名前は開発中のものです。:2008/12/12(金) 21:28:59 ID:8ZHcqCMQ
>>251
A.液晶の設定しだい

253 :名前は開発中のものです。:2008/12/12(金) 22:00:48 ID:J3zydYCS
初心者で悪いんだが質問。

うまく言えないんだけど

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

こういうのってやっぱり出来ないのかな?


254 :名前は開発中のものです。:2008/12/12(金) 22:09:20 ID:r3WCUutT
extern

255 :名前は開発中のものです。:2008/12/12(金) 22:12:35 ID:dqaLLhhf
player.cppでグローバル変数としてint宣言して
enemy.cppの冒頭にextern宣言すれば判定にも使えるようになるよ

256 :名前は開発中のものです。:2008/12/12(金) 22:19:36 ID:J3zydYCS
>>254-255
ああそれ忘れてたww
おもいっくそ素材ファイルの読み込みで使ってたのに

ありがと、助かった

257 :名前は開発中のものです。: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 :名前は開発中のものです。:2008/12/12(金) 22:49:50 ID:aXKygAOw
>>252
即レスサンクス。

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

勉強になりますた。

259 :名前は開発中のものです。:2008/12/12(金) 23:04:32 ID:e0uVhp4S
>画面サイズ
最近流行りの低価格ノートPCとかだと、どんな感じなんだろう?
縦600くらい?

260 :名前は開発中のものです。: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の判定を一回だけ判定場合ってどうすればいいの?
ダメージ判定だけがどうしても残ってしまう

261 :名前は開発中のものです。:2008/12/13(土) 02:02:18 ID:Swo2xfir
>260
具体的に何がしたいが、何が起こってるのかを示せ。
コードにはコメントを入れろ。第三者には何をやってるか分からない。


んで、だ。
ショットが命中した時、

 (1)ショット自体を消す(敵に当たると弾が消える)
 (2)敵ごとにカウンタを作っておき、「一度当たったら10フレームの間は無敵」とかにする
 (3)弾ごとに自分がどの敵に命中したかを覚えておき、2度目は命中扱いにならないようにする

こんな感じ?

262 :名前は開発中のものです。:2008/12/13(土) 02:20:00 ID:E/1bppJy
>>261
玉の画像は消えるんだけど、当たり判定だけが「次にショットボタンを押すまで」残るんだ。
何がしたいかは、「玉一つにつき一回だけダメージ判定」をしたい。
ショットコード↓

if( Key & PAD_INPUT_A && shotflag == 0){ //ショットボタンが押されたら
PlaySoundMem( p_shot_se , DX_PLAYTYPE_BACK );//ショット音を鳴らす
shotX = PlayerX ;
shotY = PlayerY ; //プレイヤーの現在位置を取得
shotflag = 1 ; //ショットフラグONにする
}
if( shotflag == 1 ){ //ショットフラグONになったら
shotY -= SHOT_SPEED ;
DrawGraph( shotX+10 , shotY , p_shot_img , TRUE ) ;
if(shotY < SHOT_DELAY){
shotflag = 0 ;
}
}

判定コード↓
GetGraphSize( enemy01 , &SizeX , &SizeY ) ; //グラフィックのサイズを取得
hit = SizeX/2 ; //グラフィックの当たり判定(半径)
hitX = shotX - enemy01X;
hitY = shotY - enemy01Y; //三角形の斜辺を除くXYの長さ
hitS = sqrt(hitX*hitX+hitY*hitY); //斜辺
if(enemy01_Life < 0){ //敵死亡してる時
DeleteGraph( enemy01 ) ;
}
else if(hitS < hit ){ //(ヒット時)
PlaySoundMem( hit_test , DX_PLAYTYPE_BACK );
shotflag = 0;
enemy01_Life -=1;

263 :名前は開発中のものです。:2008/12/13(土) 02:39:09 ID:DJ2YFwb1
>>262
判定のコードがifにかかってない

if( shotflag == 1 ){ //ショットフラグONになったら
shotY -= SHOT_SPEED ;
DrawGraph( shotX+10 , shotY , p_shot_img , TRUE ) ;
if(shotY < SHOT_DELAY){
shotflag = 0 ;
}

判定コード↓
GetGraphSize( enemy01 , &SizeX , &SizeY ) ; //グラフィックのサイズを取得
hit = SizeX/2 ; //グラフィックの当たり判定(半径)
hitX = shotX - enemy01X;
hitY = shotY - enemy01Y; //三角形の斜辺を除くXYの長さ
hitS = sqrt(hitX*hitX+hitY*hitY); //斜辺
if(enemy01_Life < 0){ //敵死亡してる時
DeleteGraph( enemy01 ) ;
}

264 :名前は開発中のものです。:2008/12/13(土) 02:43:12 ID:DJ2YFwb1
なんか伝わる気がしないから書き方を変えると

if(shotflagが真)
{
  //ここに判定のコードも書く
}

265 :名前は開発中のものです。:2008/12/13(土) 02:56:17 ID:E/1bppJy
えっと、つまり

ショットコード内で
if( shotflag == 1 ){ //ショットフラグONになったら

この部分に判定コード(>>263のGetGraphSize〜DeleteGraph( enemy01 ) ;)

}

を入れないとダメってこと?

266 :名前は開発中のものです。:2008/12/13(土) 03:06:51 ID:DJ2YFwb1
そう
shotflagって弾があるかないかのフラグでしょ?
今のままだとshotflagが0の時にも判定される

あといろいろ突っ込みどころがあるけど
そういう書き方してると確実にスパゲティソースになる

267 :名前は開発中のものです。:2008/12/13(土) 11:56:05 ID:E/1bppJy
>>266
マジかw
プログラム初心者で全然分からんから適当に組んでる
既にややこしくなってる


268 :名前は開発中のものです。:2008/12/13(土) 12:55:29 ID:6PMqtPt6
動けば結構。
実際に作って慣れればいいのだ。

269 :名前は開発中のものです。:2008/12/13(土) 13:01:52 ID:E/1bppJy
>>263-264
そのとおりにやってみたけど
やっぱり玉一つで「次にショットボタンが押されるまで」の間に複数回攻撃判定が出ちゃう・・・。



270 :名前は開発中のものです。:2008/12/13(土) 13:08:45 ID:WaQfNGav
>>267
初心者なら仕方なら、一回スパゲティコード書いて捨てる経験もしてみるといいかもね。
それがいやならオブジェクト指向の簡単な本があるからそれ読んでみるといいよ。
オブジェクト指向とゲームは相性がよい部類。

ためしにオブジェクト指向で書き直してみようかと思ったけど、半分ほど書いた時点で
長くなった上に果たしてこれを理解できるのかという疑問がわいてきたので捨てた^w^)


271 :名前は開発中のものです。:2008/12/13(土) 13:10:15 ID:WaQfNGav
仕方ならってなんだよOTL 仕方ない、ね

272 :名前は開発中のものです。:2008/12/13(土) 13:19:00 ID:klDdA96T
OOとゲームって相性いいかなぁ。
素人の俺がいうのもなんだけどむしろ相性はよくない方だと思うけど、経験が足りないからかな?
一応ゲーム作りはDXライブラリ使ってもOO(OO風ともいう)を意識して書いてるけど、
C++の便利な機能(クラスや継承程度)を使うくらいでこれぞOOって感じでもないなぁ。
C#でちょっとしたツールなんか作るとOOだなぁって感じるけど。

273 :名前は開発中のものです。:2008/12/13(土) 13:48:06 ID:WaQfNGav
>>272
ツールを作る件はオブジェクト指向じゃなくて提供されるオブジェクト指向ライブラリが優秀
ってだけだと思う。

>相性はよくない方
どの辺が?ならデータ指向で作る?手続き指向で?俺は絶対いやだけどなー。

パラダイムってのはつまるところコードの整理術なわけで、それを感じないってのは別に
不思議じゃないよ。

さっきでたコード、弾丸と敵との当たり判定がでてきだけど、

int dx = shot->getX() - enemy->getX();
int dy = shot->getY() - enemy->getY();
double distance = sqrt( dx*dx + dy*dy );
if( distance < HIT_SIZE )
{
/*ヒット処理*/
}

って書いてたらお前ちょっと表に出ろだけど、ちゃんとTell, dont ask の原則にのっとって書いたら

if( shot->hitTest( enemy ) )
{
/*ヒット処理*/
}

変更にも強く、なおかつコードはわかりやすくなる。

274 :名前は開発中のものです。:2008/12/13(土) 17:56:36 ID:E/1bppJy
もー全然できねーよおおおおおおお

いっそコレ仕様にすっか
敵の端っこにショット当てた状態でショットボタンを押さないと一定時間大ダメージ!

画期的と言えば画期的だが生憎ただのバグだ。

275 :名前は開発中のものです。:2008/12/13(土) 18:54:39 ID:DJ2YFwb1
>>274
今じっくり見たけど
>>262のif( shotflag == 1 )のブロックを>>262の一番最後で閉じるか
else if(hitS < hit )のブロックの中でhitSを条件満たさないように変更する
これで正常になると思うが、違ったらすまそ

276 :名前は開発中のものです。:2008/12/13(土) 18:56:46 ID:O5bnNqrG
shotflagっていうのは弾の生死状態を管理するフラグなんだから、
弾が生きているときだけ判定をすればいいわけだよね。
>>>264が言う通り当たり判定をするブロックを if ( shotflag == 1 ){}で囲めば出来ると思うんだけどなあ。
弾が死んでても玉の座標は留まって、さらにshotflagが機能していないから(セットが上手く行っていないか判定処理に考慮されていない)
何度も当たっていると思われるんだけど。

てか敵をデタッチするのにDeleteGraph()で画像そのものを削除するって激しすぎないか?w
if ( enemy_alive ) { Task(); } // 敵が生きているときのみ敵に関する処理を行う
とかにした方が良いと思うんだが。

277 :名前は開発中のものです。:2008/12/13(土) 18:59:29 ID:O5bnNqrG
ごめん、if ( enemy_alive ) → if ( enemy01_Life >= 0 )

278 :名前は開発中のものです。:2008/12/13(土) 21:59:39 ID:E/1bppJy
>>274だけど、ちょっと検証した
当たり判定は座標で行ってたから

http://www.uploda.org/uporg1853070.jpg

この画像の様に(hit>hitS)になってる時に判定が出て、その判定が次玉を出すときまで残るんだ。
だからこの画像はhitは21でhitSは13.9.....ってなってるので次に玉が出るまで(hitSの数値が変わるまで)凄い勢いでenemy_Lifeが減り続けてる

敵に当たった瞬間にhitSをリセットすればいいのかな?

279 :名前は開発中のものです。:2008/12/13(土) 22:22:05 ID:O5bnNqrG
もうソースうpしてくれよ

280 :名前は開発中のものです。:2008/12/13(土) 22:28:29 ID:E/1bppJy
http://www2.uploda.org/uporg1853197.zip.html
パスは274

問題のソースはenemy_moveとplayerにあります。

初心者だからすげー読みずらいと思う

281 :名前は開発中のものです。:2008/12/13(土) 22:30:08 ID:DJ2YFwb1
>>275では解決しなかったか?

282 :名前は開発中のものです。:2008/12/13(土) 22:32:35 ID:E/1bppJy
>>281
うん、その通りにやってみても何故か結果は変わらずだった

283 :名前は開発中のものです。:2008/12/13(土) 22:32:46 ID:O5bnNqrG
hitSっていうのは敵と弾との距離でしょ
それは当たり判定をする必要があるとき、
つまり弾と敵が生きているときに毎フレーム計算すればいい
弾の座標を遥か彼方にリセットしたりhitSを直接いじくって
当たり判定が真にならないようにすれば確かに上手く行くだろうけど
本質的には当たり判定をする必要が無いときに判定しているのが問題なんじゃないの?

284 :名前は開発中のものです。:2008/12/13(土) 22:45:11 ID:E/1bppJy
>>283
毎回計算して判定してるんだけど
ヒットした時に計算が次玉出すときまで止まっちゃう

285 :名前は開発中のものです。:2008/12/13(土) 22:47:31 ID:O5bnNqrG
>>280
全然修正されてないじゃないかw

「enemy_move.cpp」の
GetGraphSize( enemy01 , &SizeX , &SizeY ) ; //グラフィックのサイズを取得
の前に一行追加して
if ( shotflag == 1 ){
GetGraphSize( enemy01 , &SizeX , &SizeY ) ; //グラフィックのサイズを取得
とする。
次に、その下のほうの
int Color ;
の前に閉じ括弧を追加して
}
int Color ;
とする。
つまり、当たり判定をしている部分を
if ( shotflag == 1 ){
}
で括る。

それとインデントをきっちりしないとネストレベルが分からなくなるよ。

286 :名前は開発中のものです。:2008/12/13(土) 22:53:39 ID:klDdA96T
>>273
んーていうかC#の件は、ライブラリが優秀で作りやすい=オブジェクト指向って事じゃなくて、
コントロール一つ設置してイベントを呼び出すってだけでオブジェクト指向を感じる。
もっと具体的に言えばイベントハンドラ(やデリゲート)がオブジェクト指向だなぁって。

提示してくれた下のコードも、それだけじゃオブジェクト指向を感じない。
結果的に言わんとしようとしてることはわかるけどね。
ただそれだけじゃただのサブルーチン呼び出し。

言いたいのはそのコードだけを見てオブジェクト指向じゃないって事じゃないし、
自分でゲーム作る時もオブジェクト指向で書きたいわけだけど、
概念的に無理やり感があるのと、非オブジェクト指向でも書けるってので、
GUIアプリと比べて相性がいい方ではないって事。


287 :名前は開発中のものです。:2008/12/13(土) 23:05:58 ID:E/1bppJy
>>285
おおおおおおお!!!ありがとおおおおお
一つのライフしか減らないwwwwwww

すげー!ショットフラグがONの時にしか判定しないようにするってそういう事だったのかwww

ちなみにプログラムの書き方?はこんな感じでいいのかな?


288 :名前は開発中のものです。:2008/12/13(土) 23:22:28 ID:HImZ/jwv
どうでもいいけど定数を#defineで書くのとconstで書くのってどっちがいいのけ?
俺は気持ち悪いからconstでやってるわけだが

289 :名前は開発中のものです。:2008/12/13(土) 23:33:22 ID:Swo2xfir
>288
・歴史的な経緯とかはあるかも
・特に理由が無ければconstでいいんじゃね?
・defineじゃないと出来ないこと、スマートなこともあるから気をつけろ

290 :名前は開発中のものです。:2008/12/13(土) 23:34:35 ID:Swo2xfir
>287
とりあえず、何でもいいので1つ完成させてからじゃないと
定番の書き方とかは説明しても意味が無いし、おそらく理解できないと思う。

291 :名前は開発中のものです。:2008/12/13(土) 23:42:11 ID:MCFYNnvA
#defineは計算式入れられるのがいいな
気を付けないと間違った結果が返ってくるハメになるが

292 :名前は開発中のものです。:2008/12/14(日) 00:49:54 ID:UsQn7VQk
>>287
おめでとう。お世辞にも綺麗なソースとは言えないけど、
モノとして動いているということはとても大事なこと、すごいことだよ。
作り続けていれば段々上手くなって行くはず。

あと>>285の修正をした段階で、今度は敵の消滅タイミングがおかしくなると思う。
敵のライフが-1になった瞬間には敵は消滅せず、その後自機が弾を発射した瞬間に消滅する、っていう風に。

これを修正するには、敵をデタッチ(殺す)処理をしている部分を移動させればいい。

/* ↓elseは消し、必要なら if ( enemy01_Life >= 0 && hitS < hit ) などとする。しなくても出来るが。
  または if ( shotflag == 1 ) のところに敵の生死チェックを入れる。即ち if ( enemy01_Life >= 0 && shotflag == 1 ) とする。しなくてもでき(ry */
if(hitS < hit ){ //敵の画像と自機の玉を直角三角形結んだ時の斜辺が当たり判定より小さい時(hit!!)
    PlaySoundMem( hit_test , DX_PLAYTYPE_BACK );
    shotflag = 0;
    enemy01_Life -=1;
    if(enemy01_Life < 0){ //敵死亡してる時 /* この3行を */
        DeleteGraph( enemy01 ) ;        /* ここに */
    }                        /* 移動 */
}

まずはインデント(ソースコードの段落処理)から始めよう。

293 :名前は開発中のものです。:2008/12/14(日) 01:24:21 ID:2jf1rfQx
そこでPythonとrubyの登場ですね

294 :名前は開発中のものです。:2008/12/14(日) 07:22:24 ID:HIyGZizO
>>286
さっき提示したコードの価値をただのサブルーチン呼び出しとか
言っちゃってる時点でなんかもう全然わかってない。

あれはShotオブジェクトにEnemyとの当たり判定を”頼んで”いるんだよ。
この違いがわからないんならいつまでたっても素人のまま。

というか
>もっと具体的に言えばイベントハンドラ(やデリゲート)がオブジェクト指向だなぁって。
デリゲートなんか関数型プログラミング言語の概念の拝借だよ。
これがオブジェクト指向!なんてデザインパターンこそがオブジェクト指向!というのと同じくらい笑えるんだが。

>概念的に無理やり感があるのと、非オブジェクト指向でも書けるってので、
>GUIアプリと比べて相性がいい方ではないって事。
どこが無理やりなんだよw
さっきのコード、Enemy,Player,Shotというクラスを抽出できるけど、これのどこが無理やりなんだよ。自然だろうに。

それとGUIアプリだって手続き型で書ける。イベントハンドラやデリゲートはオブジェクト指向の一機能を使って
実装されてるけれど、それ自体はオブジェクト指向じゃない。だからVBでもGUIアプリが組めるわけだ。


ここまで言ってゲームをオブジェクト指向で組むのは向いてないと言うならもうしらね
というかもっと勉強してくださいいやマジで

295 :名前は開発中のものです。:2008/12/14(日) 09:52:32 ID:1zOFBaLD
C#6年やってるんだけど未だにオブジェクト指向わからねえ。
でもゲームとオブジェクト指向は相性いいと思うよ。

296 :名前は開発中のものです。:2008/12/14(日) 11:03:33 ID:DFScKmBl
イベントを使ってたところをEventListenerとか使ってobserver剥き出しに変更したら
オブジェクト指向になるのか? 実質的に全く等価なのに?
>>294の言うオブジェクト指向って何なんだ

297 :名前は開発中のものです。:2008/12/14(日) 11:38:14 ID:NFgVN8d3
オブジェクト指向って単純に、人が走っても車が走っても同じ「走る」だ、ってだけじゃねーの

298 :名前は開発中のものです。:2008/12/14(日) 12:16:50 ID:h39ltAFv
オブジェクト指向って考え方が出る前からプログラム作って遊んでるが
未だにオブジェクト指向が理解できん。
273で言うならちょっと表へ出ろレベル以下だ。

299 :名前は開発中のものです。:2008/12/14(日) 17:59:02 ID:17g8Fdx4
>>294は釣りだよな?w
突っ込むところが多すぎるww
「ShotオブジェクトにEnemyとの当たり判定を”頼んで”いる」だけでオブジェクト指向とかww

ところで、ゲームをオブジェクト指向で組むのは向いてないって話題は誰がしてるの?してない気がする。。

300 :名前は開発中のものです。:2008/12/14(日) 18:01:31 ID:17g8Fdx4
>>297
たぶんオブジェクト指向入門書にはそういう概念的な事が書いてあると思うけど、
オブジェクト指向って本当は概念の事じゃないよ。
もっと具体的なプログラミングの事。
「ShotオブジェクトにEnemyとの当たり判定を”頼んで”」も別にオブジェクト指向じゃないww

301 :名前は開発中のものです。:2008/12/14(日) 18:44:57 ID:CDnr1Yv3
>>300
そうなん?
レシーバか引数が違えばそれは別物だっていう名前空間の概念がまずあって
そいつを楽に実現するための補助がクラスやテンプレートやインターフェースなんだって認識だったが
具体的なプログラミングの事を言うなら言語がクラスベースかどうかで相当違ってくると思うし
あと>>299最後の行は>>272

302 :名前は開発中のものです。:2008/12/14(日) 18:58:29 ID:AhiFoxCU
構造体に関数がくっついただけのクラスのインスタンスを生成して
それで動かしたらオブジェクト指向。
そう思っている俺が通りますよ。

303 :名前は開発中のものです。:2008/12/14(日) 19:02:22 ID:ST598Jfh
何もめてんだよ

>>272は基本的に用語を間違っているがそれに気付いていない
で、親切に答えてくれた>>273と会話がかみ合っていない

>>272はVBライクなコンポーネント貼りつけとプロパティ設定での
プログラミングスタイルとオブジェクト指向を混同している
また、Windowsのイベントドリブン構造を言語仕様と勘違いしてる

-まとめ-

Q.DXライブラリを使うとVBでアプリ作るみたいにコンポーネント貼ってプロパティ設定だけでプログラムできますか?
A.できません

Q.イベントドリブンがオブジェクト指向ですよね?
A.違います

Q.イベントドリブンでゲームプログラムは書けますか?
A.書けます

Q.オブジェクト指向でゲームプログラムは書けますか?
A.書けます


304 :名前は開発中のものです。:2008/12/14(日) 19:18:54 ID:mrF69eoK
ん〜・・・?
>>272
>DXライブラリ使ってもOO(OO風ともいう)を意識して書いてるけど
っていうのはDXライブラリ自体がC(非OOPL)で書かれてるけどって意味だろ
>>303こそ勘違いしてるだろ

305 :名前は開発中のものです。:2008/12/14(日) 19:22:31 ID:17g8Fdx4
厳密に言えばC/C++使ってる時点でピュアなオブジェクト指向は無理だけどな。
メッセージ呼び出しっていう機能はないし、それに似た機能はメソッド呼び出し(=関数呼び出し)でしかないし。
組み込み型もオブジェクトじゃないしいきなりint main(){}で始まるしww

306 :名前は開発中のものです。:2008/12/14(日) 19:33:16 ID:5menpJL8
幸せって何ですか?

307 :名前は開発中のものです。:2008/12/14(日) 20:33:18 ID:P8eg6rH1
オブジェクト指向ってそんなに高度な事なの?
それとも人それぞれ考え方が変わるモノなの?

308 :名前は開発中のものです。:2008/12/14(日) 20:46:29 ID:uHyIUedU
CしかわかんなくてもDirextXゲームプログラムがさっくりできちゃうのがウリの
DXライブラリのスレでオブジェクト指向を熱っぽく語る男の人って……

309 :名前は開発中のものです。:2008/12/14(日) 21:04:56 ID:SEtb8HBj
        ____   
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \    < 厳密に言えばC/C++使ってる時点で
    |      |r┬-|    |        ピュアなオブジェクト指向は無理だけどな。
     \     `ー'´   /
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / //  だっておwwwww
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /     バ
 |    |   l||l 从人 l||l      l||l 从人 l||l  バ   ン
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、    ン
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


310 :名前は開発中のものです。:2008/12/14(日) 21:23:33 ID:a4AnO2Cl
DXライブラリで質問が・・・



あ、スレ間違えました!すみません

311 :名前は開発中のものです。:2008/12/14(日) 21:47:10 ID:17g8Fdx4
>>309
int main()ってオブジェクト指向的になんなの?www

312 :名前は開発中のものです。:2008/12/14(日) 22:41:43 ID:ST598Jfh
>>304
何がん〜・・・?だ
そんな事だから

>>286
>んーていうかC#の件は、ライブラリが優秀で作りやすい=オブジェクト指向って事じゃなくて、
>コントロール一つ設置してイベントを呼び出すってだけでオブジェクト指向を感じる。

とかマヌケな事を書いてしまうのさ
>>303のまとめでいいんだよ

RADツールと言語の区別もついてない質問に対して、みんなにちゃんと答えてもらってる事をまず理解するべきだな
元々スレ違いだ、感謝こそすれ相手を見下すとか勘違いすぎるんだよww

313 :名前は開発中のものです。:2008/12/14(日) 23:20:03 ID:17g8Fdx4
なんか常に話がちょいズレの人いるな

314 :さらに話がちょいズレの人:2008/12/15(月) 00:08:20 ID:JJfbOdAj
>>303には、同意だけど。 OOなんて元の発生が3つぐらいあって、
さらに様々な言語にそれらのOOが混同されながら導入される過程で
どんどんと複雑に入り組んでいってる。
(しかも、良くも悪くも元がProgramming言語における概念だから、
 普通の言葉に意味を汲み出す過程で色々とノイズや過不足が起こる。
さらに、OOAだ、OODだなんだので純粋なOOよりも
とりあえず使える道具としてのOOが今のメインストリームだと思うし。)
だから、結果的には、人によってOOの概念も色々な違いがある。


あと、そんな訳だからと言う訳じゃないがCだって、OOPLは可能。
ただし、言語的なサポートが対応してないから、
様々な工夫をする必要があったりする。
また、逆の意見としても>>305のint main()で始まるからオブジェクト指向じゃない。
ってのもどうかと思う。
OSも含めたアプリケーションをProgramとみるならば、
int main()は、ズバリそのアプリの呼び出しメッセージと見做しても誤解ではないしね。

あと、>>301の言ってる事は別にOOじゃないと思うぞ。
それらは単に多態性とかであって、OOとしてあったら好ましいが、

さらに>>300のプログラミングの概念と具体的なプログラミングが別モノっぽいのも違うんじゃない?
基本アセンブリでやるでもない限りは、プログラムは概念に概念を積み上げた産物だし、
それらの概念を如何につかうか?どのように解釈するか?がプログラミングでしょ。
だからこそ、gotoは悪!!やJavaにはポインタはありません!!みたいな話も出てくるわけでww

315 :名前は開発中のものです。:2008/12/15(月) 00:20:00 ID:xNu63hXk
俺は別にピュアだか厳密だか理想的だかなOOじゃなくても
それなりに作れてメンテできればいいかな
ピュアなのがいい人はその人が納得する言語なりなんなりを使えばいいし

316 :名前は開発中のものです。:2008/12/15(月) 00:48:36 ID:syJyrDB+
ついこの前DXライブラリでゲームを作り始めた初心者なんですが。
時間のとり方について質問があります
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R7N1
のサイトを見て時間所得して表示までできたのですが、ボタン(たとえばスペースボタン)を押して時間を最初からやり直すのはどうすればいいでしょうか?(キー入力状態の取得はできています)
日本語わかりずらかったらすいませんm(_ _;)m

317 :名前は開発中のものです。:2008/12/15(月) 00:52:41 ID:r0Y4Aqo3
int ゲーム内ではこっちを使う;

ゲーム内ではこっちを使う = GetNowCount();
if (ボタンが押された) ゲーム内ではこっちを使う = 0;

318 :317:2008/12/15(月) 00:57:14 ID:r0Y4Aqo3
間違えた。正しくは
int ゲーム内ではこっちを使う;
int 前にリセットした時間;

int now = GetNowCount();
ゲーム内ではこっちを使う = now - 前にリセットした時間;
if (ボタンが押された) { ゲーム内ではこっちを使う = 0; 前にリセットした時間 = now; }

319 :名前は開発中のものです。:2008/12/15(月) 05:27:51 ID:dny0TB5O
>>148
いや、スレチでもないぞ。ライブラリ作者の古い作品だから

320 :名前は開発中のものです。:2008/12/15(月) 11:37:12 ID:gYDVxSnY
>>273
if( shot->hitTest( enemy ) )
{
/*ヒット処理*/
}
って書くとたしかに変更に強くわかりやすくなるけどそれがOOだっていうのは尚早だよ。
hitTest()の中身は結局上と同じ事してるんだから。
だからその部分がOOだって言われるとただのリファクタリング手法でしかない。
もしその部分だけでOOだっていえるならGUIアプリだって
TextBox tb = new TextBox;
list.add(tb);
ほら、同じ。
でも両方ともただオブジェクトを渡してるって事実しかないよ。
それを推しておきながらデリゲートだけじゃOOじゃない!っていうのは横暴だなぁ。
ちなみにVBは今はOOPLだよ。
OOは議論が起きるくらい曖昧なところもあるけど、やっぱりカプセル化・継承・ポリモーフィズムの3つは最低限主張すべきだね。
個人的にはわざわざなんでカプセル化なんてあるのか疑問だけどw(隠蔽や最小の原則なんかは構造化言語からずっとあった)

321 :名前は開発中のものです。:2008/12/15(月) 11:46:55 ID:gYDVxSnY
>>303
煽るわけじゃないけど流れを読んできてなんでいきなりWindowsのイベントドリブンが出てくるのかなって思ったんだけど、
きっと>>305のメッセージ呼び出し機能って言葉からそう思ったのかな?
たしかにイベントドリブンもメッセージっていうけどOOのメッセージっていうのは全く別物だよ。
純粋なOOPL(Smalltalkなど)ではメッセージ機能っていうのがあるんだ。
メソッド呼び出しに似てるけどちょっと違う。
C++ではメンバ関数、Javaではメソッド呼び出しで実現してるけどね。
詳しくは自分で調べてみて。

322 :名前は開発中のものです。:2008/12/15(月) 13:36:35 ID:Mi5wQEEl
>>321
>>286
>コントロール一つ設置してイベントを呼び出すってだけでオブジェクト指向を感じる。
>もっと具体的に言えばイベントハンドラ(やデリゲート)がオブジェクト指向だなぁって。
いや、Windowsのイベントドリブン構造の事だ
読めばわかる

323 :名前は開発中のものです。:2008/12/15(月) 17:20:30 ID:k3xYLtfr
オブジェクト指向は僕達の心の中にあります

324 :名前は開発中のものです。:2008/12/15(月) 18:27:06 ID:VbZykIE5
俺の中でオブジェクトっつったらスプライトの事だ!

325 :名前は開発中のものです。:2008/12/15(月) 20:55:40 ID:0kk0L8Su
じゃあ俺は、この形。

int WINAPI WinMain(うんたらかんたら〜){
    Application App;
    App.Run();
    return 0;
}

Applicationのインスタンスが生成されてる間はアプリが生きてる。
App破棄と同時にアプリも終了する、この形がいちばん美しいと思う。

326 :名前は開発中のものです。:2008/12/15(月) 21:40:30 ID:fyQ9eFTJ
>>325
シングルスレッドであれば、確かに良いアイディアだと思う。

327 :名前は開発中のものです。:2008/12/15(月) 21:43:08 ID:WW1gkqvT
そこまでやる必要あるか?

328 :名前は開発中のものです。:2008/12/15(月) 23:22:35 ID:A6pVWDv7
>>326
中でタスクマネージャー的なものでCPU毎に負荷分散させているかもしれんぞ?

329 :名前は開発中のものです。:2008/12/16(火) 00:20:42 ID:fzHt/ZSS
>>325のやりかたにどこかまずいところあるの?

330 :名前は開発中のものです。:2008/12/16(火) 00:26:55 ID:JBSSxUHl
>>324
用語が適当すぎるよな。

メモリを占拠した実体→「オブジェクト」
コンパイルして出来るファイル→「オブジェクト」
自分自身で処理させる論理機構→「オブジェクト」

名前付けたやつちょっとツラ貸せっていうか
昔、書籍読んだときさっぱり意味わからんかったぜ・・

331 :名前は開発中のものです。:2008/12/16(火) 00:44:36 ID:o3pFEybH
メモリを占拠した実体ってインスタンスのこと?

332 :名前は開発中のものです。:2008/12/16(火) 01:58:01 ID:r2TMQqJU
変数じゃないの?変数もオブジェクトだよね

333 :名前は開発中のものです。:2008/12/16(火) 04:02:55 ID:dNyohwYS
>324はもっと誉められていいと思う

334 :名前は開発中のものです。:2008/12/16(火) 11:37:43 ID:IA9CyF+N
昔読んだ本には、OOPは

オブエクとは「物」と訳される。曖昧さの象徴である。
頭の中でイメージしなさい。
物と呼ばれる、段ボール箱「みかん箱」がたくさんある。
みかん箱の中身は隠されている、知らなくて良い。
みかん箱を紐で結ぶ事が「プログラム」である。
みかん箱には切替スイッチが付いている、それで位置、色、大きさが変化する。
みかん箱が「オブジェクト」である。


335 :名前は開発中のものです。:2008/12/16(火) 14:57:03 ID:j+OyGE8J
基本的にOOやマイノリティ言語のウンチクや自分語りはスレ違いだな

336 :名前は開発中のものです。:2008/12/17(水) 01:37:25 ID:SDA7SaR9
>>334
簡単に言うと
バカでも切り替えスイッチをポチって押せば変化する事が出来る。
けどその変化する「仕組み」を理解する必要は無い。

って事?

オブジェクト指向あんまよく分からないけど、そうなると定数#defineって簡単なオブジェクト指向に入るの?

例えば
#define SPEED 25//数値を変えると速度が変えられます。
ってあったら数字を変えるだけで変化が実装できるし。

なんか違うかw

337 :名前は開発中のものです。:2008/12/17(水) 02:09:42 ID:adQIUXL6
>>336
それだけだとただのブラックボックス化。
OOの一部ではあるけどCの関数だってブラックボックスでしょ?

338 :名前は開発中のものです。:2008/12/17(水) 02:33:05 ID:S1ZUobQv
グラフィック表示させる関数いろいろあるじゃない
DrawGraphとかDrawTurnGraphとかDrawExtendGraphとかDrawRotaGraphとかDrawRotaGraph2とかDrawModiGraphとか
あれみんな同じ重さなのかな
あと、やっぱ画像の大きさと重さにも関係あるのかな
あと、同じ四角のグラを表示させるのでもその四角のグラ用意して読み込んで表示させるのと
DrawBoxで表示させるとでは重さは変わらないのかな

339 :名前は開発中のものです。:2008/12/17(水) 02:38:22 ID:S1ZUobQv
自分でOO使ってゲーム作ろうとすると結局グローバル多用したりパブリック多用しちまうんだよなあ

340 :名前は開発中のものです。:2008/12/17(水) 02:53:08 ID:dezoAnwU
>>336
>>337
ttp://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0

341 :名前は開発中のものです。:2008/12/17(水) 02:59:26 ID:dezoAnwU
>>338
自分で実際に比べてみればいいんじゃね

342 :名前は開発中のものです。:2008/12/17(水) 03:20:54 ID:adQIUXL6
>>338
”重さ”ってなんだ?^^;
ソース見てベンチ測って見ればいいじゃん。

343 :名前は開発中のものです。:2008/12/17(水) 06:22:20 ID:S1ZUobQv
なるほど
その発想はなかったわ
そんなこといままでしたことなかったからな
面倒臭さと相談してやるかどうか考えてみる

344 :名前は開発中のものです。:2008/12/17(水) 07:31:49 ID:dezoAnwU
>>343
やるならGetNowHiPerformanceCount()を使うのはどうだ?
で、計測した方法と結果をここに書けば聞きっぱなしじゃなく他のやつの参考にもなる

345 :名前は開発中のものです。:2008/12/17(水) 08:18:15 ID:/BQwBqZh
DXライブラリでスムーズに最大値合成できませんかね?
「画像を減算合成→重ねて加算合成」で実装すると、色深度が16ビットの時汚くなるし、描画コストも倍になるんですが……

346 :名前は開発中のものです。:2008/12/17(水) 20:28:28 ID:S1ZUobQv
VC6.0でLONGLONG型表示させるには%I64dでよかったかな

347 :名前は開発中のものです。:2008/12/18(木) 10:36:19 ID:Gli++Azx
sprintfの話?
__int64 を使うならそれだね。

348 :名前は開発中のものです。:2008/12/22(月) 14:30:15 ID:3lSGgVQC
DXライブラリいいね!
DXライブラリ3Dとは別ものなのかね?

349 :名前は開発中のものです。:2008/12/22(月) 14:38:38 ID:fWgsLNUU
3Dの方は派生verだな

350 :名前は開発中のものです。:2008/12/23(火) 10:53:03 ID:0Fgrfb5X
ゲームプログラムってMSXのころBASICでやってた程度だけど
DirectXっつーやつはすごいな
ダブルバッファリングっつーのがあれば
MSXのころ悩んでたことがほとんど悩まなくていいじゃんね。
スクロールすら画像を移動するだけって最強すぎ。

351 :名前は開発中のものです。:2008/12/23(火) 12:05:58 ID:UbzH2xVf
>>350
ちょっ、MSXの頃だってダブルバッファリングしてたっつうのw
MSXはページ切り替えできたから、最高に楽だったわ
まあ、ハードウェアスクロールがあればもっと良かったが仕方ない

352 :名前は開発中のものです。:2008/12/23(火) 12:16:16 ID:0Fgrfb5X
>>351
そうか
それはすまんかった

あー。そういえばあったような気がしないでもないな。
でも俺の技術では処理速度が遅くてスプライトを動かす程度しかできなかった
スクロールとかもってのはか。


353 :名前は開発中のものです。:2008/12/23(火) 15:26:44 ID:9N5u30T9
してたっけ。
もう覚えてないやw

354 :名前は開発中のものです。:2008/12/23(火) 16:45:08 ID:SQBujvLn
つーか、毎回全画面書き換えに耐えられないからページ切り替えはヘルプ画面とかで
利用してた気がしないでもないが。

355 :名前は開発中のものです。:2008/12/23(火) 17:12:48 ID:VOrvPW1P
タイトル画面を一瞬で表示するために使ってた。
あとはAVGの絵や3D迷路の表示とか。
アクション系のゲームには使わなかったな。

356 :名前は開発中のものです。:2008/12/23(火) 17:42:12 ID:1h1OeV87
ページを切り替えないと、
ロゴとかが生成される様子が眺められるんだよな。あれはあれで楽しかった。

357 :名前は開発中のものです。:2008/12/23(火) 17:47:08 ID:0Fgrfb5X
やっぱりいろいろ工夫する必要あったよね。
でもDXライブラリ使ったらそんなことまったく考えなくてよかったから
カルチャーショックだった。

358 :名前は開発中のものです。:2008/12/23(火) 19:15:26 ID:5et0/vdD
流石に時代は変わったわ。
ま、MSXBASICのノリでかる〜く作っちゃえ。

359 :名前は開発中のものです。:2008/12/23(火) 20:09:58 ID:LP/OttsW
なんだこの40代スレ

360 :名前は開発中のものです。:2008/12/23(火) 22:47:31 ID:fMIdyvOB
How many pages ? ■

361 :名前は開発中のものです。:2008/12/24(水) 00:56:47 ID:DPn+CnyU
MSXが導入されて、それまでのマシンで頻発してた
「雑誌掲載のソースコードを打ち込んでも自分のマシンだと動かない」っていうのが
少なくなったって印象があったなあ。

まあ、MSX自体のバージョンアップがあって、その栄光も一瞬だったんですけどね!


>359
まだ20代の真ん中くらいだよ!

362 :名前は開発中のものです。:2008/12/24(水) 01:58:38 ID:fELrH+/v
Windowsが導入されて、
「自分で作ったプログラムが他人のPCでは動かない」っていうのが
少なくなった…………かな?

363 :名前は開発中のものです。:2008/12/24(水) 05:58:03 ID:IOaM1VJp
昔はスペックのわりにマシンも高価だったし
CPUやビデオをアップグレードするには、PCをまるごと買い換えるのが基本だったり
お殿様商売の時代だったなあ

364 :名前は開発中のものです。:2008/12/24(水) 06:59:35 ID:S9NW4iC4
>>350
>>351
MSX1なのか2なのか2+なのかターボRなのかどのスクリーンモードなのかで話が違ってくるし
ここはDirectXのスレじゃなくDXライブラリのスレだぜ!

365 :名前は開発中のものです。:2008/12/24(水) 09:24:20 ID:WpOVuCI5
VECTOR3 hoge;
hoge = mL.GetCameraEyePoint();

としてVECTOR3の中身をとりだしたいのですが
hoge.x
とかいうような形でとりだせないものでしょうか?

366 :名前は開発中のものです。:2008/12/24(水) 09:43:56 ID:WpOVuCI5
VECTOR3 cc;
cc.x=5;
mL.printf("cc.x=%d", cc.x);

としてもcc.x=0って表示されてしまいます。

367 :名前は開発中のものです。:2008/12/24(水) 09:51:25 ID:WpOVuCI5
すみません。
mL.printf("cc.x=%f", cc.x);
にしたら表示されました。


368 :名前は開発中のものです。:2008/12/28(日) 11:21:41 ID:DBaYT0uR
DXライブラリの描画をウィンドウハンドルを渡して
とあるウィンドウ内に表示することはできないでしょうか?

こんな感じで
http://blogs.wankuma.com/yo/archive/2008/01/25/119183.aspx

369 :名前は開発中のものです。:2009/01/04(日) 19:04:03 ID:X40+Kh+H
更新が止まってるようだけど
DXライブラリ3Dって完成したの?

370 :名前は開発中のものです。:2009/01/05(月) 13:47:48 ID:hCfaSDI/
失礼ですが質問です。
DXライブラリでプログラムを作って起動し、終了させたのですが、
なぜかウィンドウは消えてもタスクバーに"DxLib"が残ってしまいます。
閉じようと何度も試しましたが消えてくれません(タスクマネージャでもダメ)。
以前同じことが起こった時はパソコンの電源をスイッチから直接切らないといけませんでした。
何か解決策はないでしょうか。

このトラブルが発生した時は自分の失敗で無限ループを脱せず、
ツールバーのデバッグの停止を使って終了させました。
たぶん原因はこれだと思います。

371 :名前は開発中のものです。:2009/01/05(月) 14:31:31 ID:etDOrpmF
DxLib_End()
を呼ばなかったからに1票

372 :名前は開発中のものです。:2009/01/05(月) 15:06:35 ID:hCfaSDI/
>>371
一応プログラムには書いてありますが、
その無限ループが発生したループ内では通ってないと思います。
これが原因なのでしょうか。
しかしDxLib_End()を通ると即プログラム終了だと思っていたのですが・・・

373 :名前は開発中のものです。:2009/01/05(月) 15:15:38 ID:aPIdrXEx
DxLib_End()はライブラリの終了であって、
ちゃんとその後ループから抜けてプログラム自体終了(WinMainからreturn)してるの?

374 :名前は開発中のものです。:2009/01/05(月) 15:16:28 ID:va+Hleat
>何か解決策はないでしょうか
>たぶん原因はこれだと思います。
>これが原因なのでしょうか。
ソースも晒さず、これだ、あれだと聞き返されても返答が難しいよね

>失礼ですが質問です。
失礼だと思ったので、回答は出来かねます



375 :名前は開発中のものです。:2009/01/05(月) 16:13:33 ID:hCfaSDI/
>>374
私に誠意が足りませんでした。申し訳ございません。

どう書けばよいのか分からないのですが、
WINMAINの中でreturnさせる直前にDxLib_End()を置いています。
DxLib_End()は一度限りでいいと思っていましたがもしかして違ったいたのでしょうか。

私が尋ねたかったのは、プログラムの起動中、
もしくは無限ループで抜け出せない時にデバッグの停止を行うと、
上述のトラブルが発生するのでしょうか、ということです。
分かりづらくて本当に申し訳ございません。

ソースに関しては、プログラムの内容について尋ねていたつもりではなかったため、
晒さずに漠然とした質問になってしまいました。この点に関しても私に落ち度がありました。
抜粋するのが適当だとは思いますが、ソースを全部晒しておきます。
ttp://www6.uploader.jp/dl/falljohn/falljohn_uljp00026.zip.html


・・・喧嘩腰に見えるorz 敬語って難しいです。

376 :名前は開発中のものです。:2009/01/05(月) 16:20:42 ID:hCfaSDI/
これではただの丸投げですねorz

int WINAPI WINMAIN( 略 ){

(ここにプロトタイプ宣言した関数) ←ここの中で無限ループが発生している

DxLib_End();
return 0;
}

という風にはしています。
ソースでは一応ですがループを自分で抜けられるようには少し変えています。

377 :名前は開発中のものです。:2009/01/05(月) 18:20:18 ID:P66gcfVh
ソースのヒドさがなんか好感もてるなw

>(ここにプロトタイプ宣言した関数) ←ここの中で無限ループが発生している

>DxLib_End();

それだと、
そのループから処理が抜けない限り、絶対にDxLib_End()には辿り着かない

そんでデバッグツールでの停止ではもちろんDxLib_End()が呼ばれず、それが問題だというのは一応あってるかもしれない

378 :名前は開発中のものです。:2009/01/05(月) 19:02:24 ID:KsfcQKrh
Flashのムービークリップや、
JavaScriptのsetIntervalのように
毎フレーム実行させるようにセット・解除できるような機能はないでしょうか?

379 :名前は開発中のものです。:2009/01/05(月) 23:22:56 ID:etDOrpmF
>>376
ソース見るのだるいから見ないが、
ループを抜けられるようにしてあるなら、ループを抜けてみてプロセスが残ってないか確かめればいいじゃないか。
プロセスがしっかり終了してればDxLib_End()が呼ばれてなくてそれが問題だったって分かるんじゃないか?まぁ、これだけじゃそうとも限らないが。
それでもし終了できていたらDxLib_End()を書いたものと書かないものとを比べればちゃんと分かるが。
で、それが分かればおのずと質問に答えられると思うが。
ただ、ProcessMessage()だっけ?で処理してくれるような終了の仕方(ってある?)の場合には、そこらをしっかり書けばちゃんと終了できると思うが。

380 :名前は開発中のものです。:2009/01/05(月) 23:59:30 ID:V4nq/52k
>>376
  while(CheckHitKey(KEY_INPUT_SPACE)==0){
    battle();
    WaitKey();
  }

  ScreenFlip();
  WaitKey();
  DxLib_End();
  return 0;
}

これだとProcessMessageで-1引いてもループ抜けられないような気がする。
whileの条件式にProcessMessageの判定加えたらいいんでは。
あと抜けた後のWaitKeyは、強制終了後も参照されてしまうのでやめたほうがいい。

381 :名前は開発中のものです。:2009/01/06(火) 00:18:40 ID:F/Rau1w+
>毎フレーム実行させるようにセット・解除できるような機能はないでしょうか?
何を毎フレーム実行させたいんだ?
というか質問は一つづつにしろよ

382 :名前は開発中のものです。:2009/01/06(火) 07:35:09 ID:Oinf+8tR
>>381
情報が足りませんでした。申し訳ありません。
JavaScriptでは、
var set = setInterval(function(){
  〜〜処理〜〜
}, 1);
のようにすると、1ミリ秒ごとにfunctionを呼び出すことができます。
また、clearInterval(set);で解除することもできます。
同じように毎フレーム実行させることはできるでしょうか。
whileに全て入れるのが面倒なのです。

383 :名前は開発中のものです。:2009/01/06(火) 08:50:13 ID:35IX/qYC
>>379,380
アドバイスありがとうございます。
ProcessMessage()を完全に忘れていました。
まだまだ基本がなっていないようなので、しばらくROMって学んでいこうと思います。

384 :名前は開発中のものです。:2009/01/06(火) 09:59:47 ID:eUx/xd8R
>>382
どうも、聞きたいことがよく分からん。
while文に入れるのが面倒なほどに大量に関数があるのか?
複数の関数を一つの関数の中にまとめて、まとめた関数をwhile文の中においておくってのじゃダメなんか?
それとも、while文に全て入れるのが面倒じゃなくて、
フレーム管理とかプログラムの状態遷移が分からないってことか?
ってか、それはライブラリというより言語の使用じゃないか?
もし仮にDxライブラリで出来たとしても、登録、解除のし忘れとかでバグの原因になりそうに思えるんだが。

385 :名前は開発中のものです。:2009/01/06(火) 11:50:37 ID:WsDU+BU3
設計の問題であってDXライブラリとは関係ないな
for (int i = 0; i < enemyCount; i++) enemy[i].Update();
こういうようなことを言ってるの?

386 :名前は開発中のものです。:2009/01/06(火) 15:00:44 ID:Oinf+8tR
>>384
whileに全て入れるのが面倒に感じていましたが、言われてみるとそうですね。
>>385
毎フレーム実行させるという意味でこちらにきましたが、観点がずれていたようです。
while文の中にforループを入れるという発想はありませんでした。試行錯誤してみようと思います。ありがとうございました。

387 :名前は開発中のものです。:2009/01/06(火) 15:06:41 ID:WsDU+BU3
>>385みたいなのって定石だから
試行錯誤するよりも初心者サイトでも見て素直に真似した方がいいよ

388 :名前は開発中のものです。:2009/01/06(火) 20:56:28 ID:Nr8kFssc
>>377
少なくともVSの「デバッグの停止」ならDxLib_End()が呼ばれなかろうとなんだろうとちゃんとリソースを解放してくれるはず。
>>370がいつまでも終了しなかったのはexeを直接起動したかリリースビルドだったのでは?

>>380
WaitKey()は別に問題ないよ。

あとScreenFlip()がWhileの外にあったら画面更新されないから中へ。

389 :名前は開発中のものです。:2009/01/11(日) 09:44:15 ID:fWlpK7Co
DXライブラリを使用つつ、DirectXを直接使用することは出来ないでしょうか?

○○->(うんたらかんたら)
という処理が入っていると、エラーが発生して終了してしまいます。

390 :名前は開発中のものです。:2009/01/11(日) 11:16:24 ID:yJOODiUh
>389
その例文だと全く意味が伝わらない

391 :名前は開発中のものです。:2009/01/11(日) 14:03:14 ID:fWlpK7Co
>>390
わかり難くてすいません……
DirectXを直に使いたい所があるので以下のコードを追加し呼び出した所強制終了が発生したので、
やはりDXライブラリを使用しながら直接DirectXを使う事は難しいのでしょうか?

#include <d3d8.h>

void aaa(){
LPDIRECT3DDEVICE8 FogDev;
D3DCOLOR FogCol;
float FogStart;
float FogEnd;
FogCol=0xffffff;
FogStart=100;
FogEnd=300;
//この中をコメントアウトすればエラー無し
//逆に一つでもあるとエラーで落ちてしまう……
//================================================
FogDev->SetRenderState(D3DRS_FOGCOLOR,FogCol);
FogDev->SetRenderState(D3DRS_FOGSTART,*((DWORD*)&FogStart));
FogDev->SetRenderState(D3DRS_FOGEND,*((DWORD*)&FogEnd));
FogDev->SetRenderState(D3DRS_FOGVERTEXMODE,D3DFOG_LINEAR);
FogDev -> SetRenderState(D3DRS_FOGENABLE,true);
//================================================

}



392 :名前は開発中のものです。:2009/01/11(日) 14:50:36 ID:2fY4/RNq
質問ですが、ウィンドウモードにした時の左上のウィンドウアイコンは変更出来ますか?

393 :名前は開発中のものです。:2009/01/11(日) 16:25:19 ID:rRSsOCCS
>>391
参照エラーかな?
DXライブラリ側でLPDIRECT3DDEVICE8って持ってなかったっけ?
と無責任な事言ってみる。
DXライブラリのソース確認してみて。

>>392
出来るよん

394 :名前は開発中のものです。:2009/01/11(日) 18:28:35 ID:fWlpK7Co
>>393
ヘッダファイルを確認した所、LPDIRECT3DDEVICE7に関しての記述はみられましたが、
LPDIRECT3DDEVICE8についての記述はありませんでした。
ライブラリ初期化の前に読んだ所起動すらしなかったので、やっぱりDXライブラリとの競合ですかね……

395 :名前は開発中のものです。:2009/01/11(日) 20:07:47 ID:fWlpK7Co
どうやら単純にコードが悪かった様です。
スレ汚し失礼しました……

396 :名前は開発中のものです。:2009/01/16(金) 16:45:35 ID:EID2Tgc4
前うpして感想頂いて、とてもやる気が出たので、
こんな感じの体験版となりました。

ttp://tikuwa.net/file/up7821.zip.html
DLKey:dx


397 :名前は開発中のものです。:2009/01/16(金) 23:45:16 ID:c/8VRMs/
頑張ってるじゃん

BGMやSEも自作?
引用があれば著作権等の明記はしっかりしておいた方が良いよ

398 :名前は開発中のものです。:2009/01/16(金) 23:47:43 ID:iRSkofRl
DXライブラリ3Dのサイトが消えてるな

399 :名前は開発中のものです。:2009/01/17(土) 00:09:20 ID:zPKek+/O
ほんとだ、今見てみたら消えてるな

400 :名前は開発中のものです。:2009/01/17(土) 00:17:49 ID:h2yGMjkV
DXライブラリでタイトルバー消すことって出来る?
イメージ的にはこういうものを作りたいんだけど

http://www.geocities.jp/tjschallenger/TJS0320.html

http://www.geocities.jp/tjschallenger/img/TJS031701.png

http://www.geocities.jp/tjschallenger/img/TJS000301.png

401 :名前は開発中のものです。:2009/01/17(土) 00:30:31 ID:r/BmSdjn
>>400
ttp://studiokingyo.fc2web.com/dxlib/kaibou/k_shiyou.html
で紹介されてる方法で駄目なら、ちょっと工夫が要る気がする

402 :名前は開発中のものです。:2009/01/17(土) 01:42:14 ID:A53qKgs6
>>397
自作なので大丈夫かとは思います。

403 :名前は開発中のものです。:2009/01/17(土) 01:46:05 ID:hNEzfB40
自作なのか……すげぇ。

404 :名前は開発中のものです。:2009/01/17(土) 01:57:18 ID:A53qKgs6
あ、DXライブラリとPNG読み込み機能の著作権表記してない…これはマズったかも…。

405 :名前は開発中のものです。:2009/01/17(土) 09:58:07 ID:OLTrE10N
>396
すげえ

どんどん敵が固くなるw
敵がワイドショット撃ってくるあたりから先にいけん

406 :名前は開発中のものです。:2009/01/17(土) 10:33:37 ID:POC77fOB
>396
相変わらず難し過ぎる……w
ところでなんかボスのライフが下がり切らない内に倒せたんだけど。制限時間?
あとグレイズタイプって何かと思ったらサイヴァリアなのね。

407 :名前は開発中のものです。:2009/01/17(土) 11:55:31 ID:A53qKgs6
>>403
どれも芋臭い曲ばかりですけどね…。
>>405
殆ど自機狙いなので直前に避けるとやりやすいと思います。
>>406
サイヴァリアの快感を再現してみたかったんです。
ボスはかすりで永遠に稼げるのと、ショット弱体化の対策として、
ワインダーを放ち終えた2分で自滅するようにしてみました。

408 :名前は開発中のものです。:2009/01/17(土) 13:56:30 ID:f9VOjqEO
ループ前にメニューバー作ってループの命令に解像度変更機能を書いてみたんだが、
どうもフルスクリーンだけ正常動作しない

一応、ソース書いておく

if(CheckMenuItemSelect_ID( 14)){
//起動時、フルスクリーン化
ChangeWindowMode( FALSE ) ; //フルスクリーンモードで起動
MAP_W = 640-SPAN_LR*2 ;
SPAN_LR =128;
SetGraphMode( 1024 , 768 , 32 ) ;
SetMenuItemMark_ID(11, MENUITEM_MARK_NONE);
SetMenuItemMark_ID(12, MENUITEM_MARK_NONE);
SetMenuItemMark_ID(13, MENUITEM_MARK_NONE);
SetMenuItemMark_ID(14, MENUITEM_MARK_CHECK);
//SetAlwaysRunFlag(TRUE) ;//ウインドウがアクティブではない状態でも処理を続行するか
SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先画面を裏画面にセット
}

文字は表示されてもグラフィックは読み込まれない
左上隅に表示されるんだが、自分は中央拡大描画を求めている

409 :名前は開発中のものです。:2009/01/17(土) 14:27:27 ID:CHF9ChFj
>>404
お前何か勘違いしてないか?知識なんて使って減るもんじゃないから只だと思ってんだろ?
人に物を訊くってのがどういう事だか、自覚してる?
知識ってのはな、社会人に取って金と同じく貴重な財産なんだよ。使っても減らないけど、教えたら広まった分だけ価値が下がる。それを分けてくれって言ってんの自分でわかってる?
社会で必要とされる知識ってのはな、本になんか載ってない事ばかりなんだよ。全部人から人へ、直接のコミュニケーションを介して伝わって来たモンなんだ。
そういうノウハウを分けてもらう申し訳無さみたいな物が、伝わって来ないんだよ。お前の態度からは。
猿だって仲間から餌を分けてもらう時は申し訳無さそうな顔するんだよ。ヘラヘラ笑いながら近づいてったら殴り殺されんぞ。
猿だったら今頃とっくに死んでんだよお前。そんな態度で今まで。何回も言ったよな。謝る時は申し訳無さそうな顔をしろって。
そういう学校じゃ受けられない教育を受けておきながら、社会人を経験しなきゃ得られない知識を貰っておきながら、
何にも生かせてないんだよ今のお前は。学生のサークルごっこじゃないんだから。もっと四六時中危機感を持って生きてなきゃ駄目だよ。いい加減いつまで学生気分じゃ。

410 :名前は開発中のものです。:2009/01/17(土) 14:35:00 ID:r/BmSdjn
誤爆なのかそうでないのか……w

411 :名前は開発中のものです。:2009/01/17(土) 15:00:14 ID:A53qKgs6
>いい加減いつまでも学生気分じゃ。
耳が痛い話です。

412 :名前は開発中のものです。:2009/01/17(土) 15:06:33 ID:B1CiFUTT
人生一勝勉強です。

413 :名前は開発中のものです。:2009/01/17(土) 16:00:07 ID:IVDG90gp
アンカミスだろw

414 :名前は開発中のものです。:2009/01/17(土) 16:46:40 ID:UCl/dEbD
ボクは社会人になってから学生時代以上に学生気分です。

415 :名前は開発中のものです。:2009/01/17(土) 23:46:21 ID:h2yGMjkV
ウインドウモードで起動して
マウスの左クリックを監視するようにしました

その際、ウインドウの範囲外をクリックしてもマウスの左クリックを認識してしまいます

その解決策として
ウインドウの左上の座標(x,y)からWindowの大きさ(X+width,Y+height)までの間でクリックされた時のみクリックを監視するという方法をとろうと思っています

そこで質問なのですが
ウインドウの左上の座標を取得する関数は存在するのでしょうか?
また、無い場合は何か他に代用できる関数は標準ライブラリなんかに入っているでしょうか?


あと、ウインドウがアクティブかどうか判断する関数ももしあったら教えてください

一応調べたのですがヒットしなかったためよろしくお願いします



416 :名前は開発中のものです。:2009/01/17(土) 23:53:38 ID:m/2DoB9T
全部Win32APIにある

417 :名前は開発中のものです。:2009/01/17(土) 23:57:48 ID:h2yGMjkV
>>416
ありがとうございます見つかりました

下のは
GetActiveWindow()
でいけそうですね
上も調べてみます。ありがとうございました

418 :名前は開発中のものです。:2009/01/18(日) 01:29:33 ID:W8VFm9RV
度々すいません
>>415はアドバイスのお陰で全て解決しました

ところで、作成したexeを起動するとLog.txtというものができるのですがこれは仕様なのでしょうか?
logファイルを作成しないように設定することは出来ないのでしょうか?
よろしくお願いします

419 :名前は開発中のものです。:2009/01/18(日) 01:46:03 ID:bv5ORrRe
リファレンスを log で検索してみた?

420 :名前は開発中のものです。:2009/01/18(日) 19:14:35 ID:d7+8UZEG
Dx_Lib()
より前でSetOutApplicationLogValidFlagを呼びださなければなら無かったのですね
解決しましたありがとうございました

421 :名前は開発中のものです。:2009/01/18(日) 19:22:47 ID:Dn7rF8in
dxlibって英語の使い方が変だよね
LogValidとか

422 :名前は開発中のものです。:2009/01/18(日) 20:26:55 ID:d7+8UZEG
もしかしてめちゃくちゃ初歩なのかもしれないけど
他のツールで作ったソフトの内部でDXライブラリを呼び出すことって出来るんですか?

例えば、ノベルゲーム作成ツールでゲームを作って、ところどころでDXライブラリで作ったゲームを組み込む
みたいな感じで
ノベルのほうで普通にDXライブラリ製のソフトを呼ぶと窓が起動してしまいますよね?
ノベルのほうと同じ窓でゲームを実行することってできないのでしょうか?

意味がよく分からなかったらすいません

423 :名前は開発中のものです。:2009/01/18(日) 20:58:55 ID:N4guzxX8
たぶん無理だと思うが

424 :名前は開発中のものです。:2009/01/18(日) 21:03:33 ID:BZ0GBkU2
>>422
何が言いたいのかはわかるけど、残念ながら恐らく不可能。
両方でしっかりデータの受け渡しができれば、携帯アプリの前編後編みたいにすることは出来るかも知れないけど、
現存のツールではそこまでの機能は無いと思うし……。


425 :名前は開発中のものです。:2009/01/18(日) 21:11:32 ID:Dn7rF8in
プロセス二つ作ってパイプで通信すればいいじゃない

426 :名前は開発中のものです。:2009/01/18(日) 21:29:03 ID:d7+8UZEG
>>423,424
そうですか・・・

あまり知識無いんですけど、描画先のウィンドウハンドル(ここではノベゲー)を取得して、内部でDXライブラリ製のソフトを呼び出した時
ウインドウを新規で作らず、いまあるウインドウを描画先に指定(取得したハンドルを用い)みたいなことができれば可能なのかな?

よくわからないorz

>>425
具体的にはどういうことでしょうか?
ぐぐったら分かるかな


アドバイスありがとうございます

427 :名前は開発中のものです。:2009/01/18(日) 21:39:59 ID:GlhQpd6d
プラグイン形式的なDLLを作成すれば可能

428 :名前は開発中のものです。:2009/01/18(日) 22:57:46 ID:d7+8UZEG
>>427
ありがとうございます
やることとしては>>426に書いたとおり
>描画先のウィンドウハンドル(ここではノベゲー)を取得して、内部でDXライブラリ製のソフトを呼び出した時
>ウインドウを新規で作らず、いまあるウインドウを描画先に指定(取得したハンドルを用い)みたいなことができれば可能なのかな?

描画先を既存のウィンドウにすればいいんですよね

これってどうやるんだろう・・・・

429 :名前は開発中のものです。:2009/01/18(日) 23:10:15 ID:3xnYsDJW
>>422
できるぞ、(ただし、元のプログラムが自作かせめて、DLLを使えるのが前提だが。)

>>426
>ウインドウを新規で作らず、いまあるウインドウを描画先に指定(取得したハンドルを用い)みたいなこと・・・・
は、難しいと思う。
見た目的には、同等の事も可能だと思うが、実際にそのウィンドウに・…はややこしいと思う。
(内部的にその元アプリがどんな事してるか次第だけど、DXlib使うとDX内処理もあるから
 フック掛けて完璧に使えるとは思えないから。)

>>425じゃないけど、参考になりそうな。
 ttp://funini.com/kei/vs/named_pipes.shtml
 ttp://www.fides.dti.ne.jp/~tokai/vc/vcpipe.html
 ttp://msdn.microsoft.com/ja-jp/library/cc430103.aspx
 ttp://msdn.microsoft.com/ja-jp/library/cc429587.aspx
 ttp://msdn.microsoft.com/ja-jp/library/cc429021.aspx

 ttp://www.02.246.ne.jp/~torutk/cxx/sharedmemory/win32_shmem.html
 ttp://www.alpha-net.ne.jp/users2/uk413/vc/VCT_FileMapping.html

430 :名前は開発中のものです。:2009/01/18(日) 23:14:26 ID:d7+8UZEG
>>429
ベースプログラムは吉里吉里かSystem4.0を考えてるので多分dllの読み込みは可能かとも居ます
実際色々プラグイン公開されてるし

色々ありがとうございます
調べてみます

431 :名前は開発中のものです。:2009/01/19(月) 10:34:52 ID:X5SZs/u2
>>396
亀だがやってみた

とりあえず途中から敵固すぎワロタ
ボンバーなしじゃ無理な気がww



俺のシューティングは随分昔にシューティングスレに投下してから弾幕に凝っててあんまり見た目の進歩がないぜ

432 :名前は開発中のものです。:2009/01/19(月) 17:31:41 ID:yZM1xSvo
>>431
固さは面とレベルの兼ね合いにしたいと思います。
最近見かけばかりに力を入れてて肝心のゲーム内容は…。

433 :名前は開発中のものです。:2009/01/19(月) 17:42:09 ID:IkXU3fd8
星のパーティクルがすてき。

434 :名前は開発中のものです。:2009/01/19(月) 20:32:05 ID:j6ExWMod
シューティングってこんなに作るの難しかったんだな

ゼビウスみたいのなら楽勝だろとか思ってました、ごめんなさい

435 :名前は開発中のものです。:2009/01/20(火) 11:58:06 ID:dMyWKq6o
初心者です
質問なのですが、ゲームのBGMで
最初に戻って繰り返すときBGMをとぎれてしまわないようにする方法はありますでしょうか
例えばRPGの戦闘音楽のようにずっと放置していてもきれいにループするような方法です

436 :名前は開発中のものです。:2009/01/20(火) 12:40:01 ID:/e+EiVUH
曲の途中で違和感のない位置に飛ばせばいいと思う。

俺はやったことないけど
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_sound.html#R8N13
これできれいにループするんじゃない?

437 :名前は開発中のものです。:2009/01/20(火) 12:51:49 ID:dMyWKq6o
>>436
ありがとうございます!勉強してチャレンジしてみます!

438 :名前は開発中のものです。:2009/01/20(火) 15:22:07 ID:A5DSi9Sd
>435
あと、姑息な手段で申し訳ないが
MIDIのようにサイズを気にしなくて済むようなものなら、最初から10分続くファイルにしてしまうという手もある。

439 :名前は開発中のものです。:2009/01/21(水) 22:18:20 ID:2s5lyHkK
PlaySoundMem()でループ再生フラグを指定すればいいよ。
>>435がファイル形式を言ってないのでわからないけどwavなら綺麗にループする。

440 :名前は開発中のものです。:2009/01/22(木) 15:31:01 ID:Xr8Aa3cY
>>439
たぶん>>435が使っているファイルは曲の最初と最後が繋がってないやつなんだろう。
だから、普通にループ指定すると音が途切れずにループしない。

けど、市販ゲームでもこういうBGMあるし、俺は気にしないけどな

441 :名前は開発中のものです。:2009/01/22(木) 17:11:41 ID:q+tQcJ7A
>>435
無音時間の全くない完全なシームレスループにしたい場合、下のページが参考になると思います。
ttp://www13.plala.or.jp/kymats/study/MULTIMEDIA/waveOut_multibuf.html

API使わないといけないのとWAV限定ですが。

442 :名前は開発中のものです。:2009/01/22(木) 17:15:00 ID:9/RQfEqV
>>441
FF10のジェクト戦みたいにボーカルいれた音楽をBGMとして使えそうだな
すげえ

443 :名前は開発中のものです。:2009/01/22(木) 17:34:21 ID:Bh2KGHfp
>>440
「最初に戻って」って書いてあるからなぁ。
でも途切れる方法が書いてないところが色んな憶測を呼ぶよね。
まぁここまでで解決方法出たと思うからいいんだけどさ…。

444 :名前は開発中のものです。:2009/01/26(月) 16:05:31 ID:2mzhNCi2
DXライブラリ(2.25)のプロジェクトがコンパイルできない。
'/O2' と '/RTC1' は同時に指定できません ってコンパイルエラーが出る。
プロジェクトの設定でO2→Odにしてるんだけれども。
RTC1の方を切ればコンパイルできるんだけど、なんでだー!

445 :名前は開発中のものです。:2009/01/30(金) 19:51:30 ID:Wy6ip41+
フルスクリーン化ではなく、ウィンドウモードでの最大化って
どうやったらできるんでしょうか?


446 :名前は開発中のものです。:2009/01/31(土) 06:27:02 ID:mi0nZoft
起動時に設定ファイルなり引数なり読み込んで解像度変更させちゃえば?

447 :名前は開発中のものです。:2009/01/31(土) 08:53:12 ID:dFEgAXD4
>>445は画面サイズを可変にしたいということ?
どこかにそれっぽいサンプルがあったような……。気のせいかな。

448 :名前は開発中のものです。:2009/01/31(土) 09:07:06 ID:KRmQ80Gs
SetWindowSizeChangeEnableFlagで可変設定、
SetGraphModeで直接指定ができるね
なんとかして使ってるモニタの解像度を取得して当て込めば出来るかも
だけど処理速度は厳しいだろうな

449 :名前は開発中のものです。:2009/01/31(土) 10:47:56 ID:rbcO49fB
ウィンドウのサイズを変えたいのじゃなくて
右上の最大化のボタンを押せば、標準的なアプリと同じような
動作にしたいです、
画面全体にきっちり広がって間違ってマウスでドラッグしても動かないような感じです

450 :名前は開発中のものです。:2009/02/01(日) 00:40:50 ID:XJc1/NhO
えーと、それで、何がしたいの・・・?

451 :名前は開発中のものです。:2009/02/01(日) 10:34:54 ID:lmI58fq8
>>449
普通にフルスクリーンモードじゃなくてウインドゥモードにすれば
いいだけじゃないの?
そういう関数あったと思うけど。

452 :名前は開発中のものです。:2009/02/01(日) 12:40:27 ID:8EnnwsB0
デフォルトでは画面の端っこにマウスポインタを当ててもサイズは変えられないし
最大化ボタンも押すことができない
これを変えたいってことなら
サイズの手動変更の場合は>>448
あとはSetUseASyncChangeWindowModeFunction()で最大化ボタン有効化だと思うんだが
ちょっとこっちの使い方が分からないorz

453 :名前は開発中のものです。:2009/02/01(日) 22:16:17 ID:2n+Oqc2F
縦シューを作ろうと思ってるんですが、
480x640で起動することってできますか?


454 :名前は開発中のものです。:2009/02/01(日) 22:20:08 ID:90n+ELwG
>>453
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R4N1

455 :名前は開発中のものです。:2009/02/01(日) 22:30:43 ID:2n+Oqc2F
>>454
できた!
ありがと^^
起動時に640x480になってるのが気になるけど、まいっか

456 :名前は開発中のものです。:2009/02/01(日) 22:34:51 ID:90n+ELwG
>>455
もっと早い段階で呼び出せば良いよ
DxLib_lint()より上で呼べば最初からそのサイズになる

457 :名前は開発中のものです。:2009/02/04(水) 01:44:28 ID:igrRGuw3
DXライブラリで同人ゲームを作ろうと思っています。

C++でプログラミングするにあたって、横スクロールアクション(マリオとかロックマンみたいな)
の作り方のサンプルを紹介してるサイトってないですかね?

↓シューティングゲームについては四聖龍神録さんのページが非常に役に立ちました!
http://dixq.net/rp/

458 :名前は開発中のものです。:2009/02/04(水) 09:38:48 ID:2Cf0XhT+
>>457
公式HPのサンプル

459 :名前は開発中のものです。:2009/02/04(水) 14:27:42 ID:CO3XfILg
応用力の無いやつや

460 :名前は開発中のものです。:2009/02/04(水) 16:43:08 ID:KduT8vdn
>>457

C++でのサンプルはどこにもない。と言い切っていい。

JAVAだが、考え方としてはいいかもしれないのでこれを見て、自分で考えてはどうか。
http://javagame.skr.jp/index.php?FrontPage

これもC++ではないが、考え方としては(以下同文
http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231306/?ST=swd-tech

やはり、自分で考えて試行錯誤するしかないのではと思う今日この頃

461 :名前は開発中のものです。:2009/02/04(水) 21:32:21 ID:6meQrl/q
最初はグローバル変数使いまくって
次に構造体をグローバルにして使いまくって
次に構造体をポインタで書き換えるようにして
引数に構造体のポインタがどんどん増えていき
次に各構造体の先頭のポインタをまとめた構造体をつくってそれを引数にしたんだけど
だいたいみんなこんな感じ?

462 :457:2009/02/04(水) 22:20:44 ID:igrRGuw3
>>458-460
レスサンクスです!

>>460
まさにこういうページ探してました!
横スクロールと敵の制御とか参考になりまくりです。
言語は問わないんですが、STGの情報は多いのにACTはなかなか無かったので。

↓自分でも探してたんですが専門学校(?)のゲームの作り方ページもよかったです。
http://rina.jpn.ph/~rance/directx8/

Web上だとなかなか情報が無いから、専門学校の
教科書が欲しいなんて思っちゃいました。笑

463 :名前は開発中のものです。:2009/02/05(木) 03:42:29 ID:GjXLMUdb
>>461
前から気になってはいたんだけど、構造体とかグローバルで使うのって何かまずいことでもあるの?
ポインタにする利点をずぶの素人の俺にも分かり易く教えて欲しい。
引数で構造体を直に渡してなければ余り関係ない気がしてるんだけど。

464 :名前は開発中のものです。:2009/02/05(木) 07:27:08 ID:rTUW0rFP
グローバルな変数は、他で書き換えられるかもしれないことを
いちいち考えないといけないんだよな
プログラムの複雑さが増すので乱用は慎しめと言われてる

465 :名前は開発中のものです。:2009/02/05(木) 08:09:33 ID:ojur6QxZ
はっきり言ってしまえば、そのプログラムを自分しかさわらなくて、
注意して組む自身があるならグローバルでも問題ないと思う。

466 :名前は開発中のものです。:2009/02/05(木) 08:48:42 ID:9t4FKbe4
>>465
俺は、あえて 「昨日の自分は他人」だと思って、
可能な限り、必要性のない限り グローバル変数は使わない方がいいと思うけどね。
(特に、携帯機器とかメモリ節約とか求められてない時は余計に。)

>>463
“普通の”ポインタの利点は、微妙だな。ただ、まだまだある所じゃ、速度的に値のコピーよりも
参照して行った方が効率が良かったり、処理の記述がしやすくなったり。

ただ、あるClassのポインタ(関数ポインタ含む)は処理の委譲に頻繁に利用される。
利点として、全体像が綺麗にできるし、コードの混雑が大きく減る。
cf.Strategy パターン Decorator パターン  双方向リスト 動的確保

467 :名前は開発中のものです。:2009/02/05(木) 09:31:40 ID:Qc5+f5Cj
>>463
グローバル構造体自体は普通に使うよ。
グローバルクラスが普通に使われるように。
C++においては構造体=クラスだからね。
問題は、構造体に使われるpublic変数なんだと思う。
GetXX(),SetXX()にすればいいって問題でもないとは思うけど、もしクラスならメンバ変数は基本的にみんなprivateでしょ?

468 :名前は開発中のものです。:2009/02/05(木) 10:35:01 ID:4io8tQ0w
何言ってるかさっぱりわからん俺のソースは絶対他人には見せられんな。

469 :名前は開発中のものです。:2009/02/05(木) 17:44:21 ID:B8Cz6uqn
>>463
461です
俺は今年からプログラミング初めた素人
まだグローバル変数使って困ったことはないけど
勉強しつつゲーム製作やってるから今はポインタ使って試してる
次はクラスってのを使ってみる予定

470 :名前は開発中のものです。:2009/02/06(金) 00:33:01 ID:O6HFVvT0
DxLibでaviを再生させる関数ってありますか???

471 :名前は開発中のものです。:2009/02/06(金) 00:35:30 ID:O6HFVvT0
>>470
すいません
DXライブラリで検索したら即効見つかりました
お騒がせしました

472 :名前は開発中のものです。:2009/02/06(金) 00:57:03 ID:O6HFVvT0
すいません
下のようなコードで何か問題ってありますでしょうか
動画が真っ黒の画像で再生されてしまいます
test.aviはexeファイルと同じディレクトリにあります

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}

PlayMovie( "test.avi" , 1 , DX_MOVIEPLAYTYPE_BCANCEL ) ;

DxLib_End() ; // DXライブラリ使用の終了処理

return 0 ; // ソフトの終了
}

473 :名前は開発中のものです。:2009/02/06(金) 08:46:48 ID:7KSAHxxq
>>472
原因を調べるにはまずどこがおかしいか調べようぜ
PlayMovieの戻り値は調べた?
まあおそらくtest.aviが開けないんだと思うけど。
exeと同じディレクトリでもカレントがそことは限らないよ、どうやって実行した?
フルパスで指定してみるのがいいかもね

474 :名前は開発中のものです。:2009/02/06(金) 10:04:24 ID:T3lftGPa
>>472

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}

if(PlayMovie( "test.avi" , 1 , DX_MOVIEPLAYTYPE_BCANCEL ) ==-1)
{MessageBox(NILL,"ファイルが開けません","読み込みエラー",MB_OK);}

WaitKey();
DxLib_End() ; // DXライブラリ使用の終了処理

return 0 ; // ソフトの終了
}

こう変えて確認してみたら?
PlayMovieは、ファイルの読み込みに失敗すると-1を返す(成功は0)
もし、これでMessageBox表示されたら上手くファイル指定ができてないってこと

もしかしたらコーデックなんかの問題もあるかもしれないけどそこは分からない
あと、PlayMovieはそこでムービー停止するまで処理とまるんだっけ?
そうじゃないならムービーの再生が終わるまで処理終わらないようにする工夫が必要

どれもこれもリファレンスにあるから一度目を通してね

475 :名前は開発中のものです。:2009/02/06(金) 10:36:49 ID:7KSAHxxq
つーかこれ公式のヘルプのサンプルそのまま貼り付けただけじゃないか。
これで問題ありますか?って、、、、
今後もサンプルがうごかないたびにコメントごとそのまま貼り付けるつもりか。

476 :名前は開発中のものです。:2009/02/06(金) 10:44:57 ID:RXpavouu
公式ページにカレントディレクトリの説明がないからだろ
フルパス指定を推奨しろよ

477 :名前は開発中のものです。:2009/02/06(金) 22:13:54 ID:bune21hQ
実行させてないけども、472のプログラムって一瞬で終わったりはしないのか・・

478 :名前は開発中のものです。:2009/02/07(土) 00:40:47 ID:9/tOLDQP
一応、ムービーは最後まで流れたよ。
ファイルが無いときも黒画面のフルスクリーンまでいって帰ってくる

479 :名前は開発中のものです。:2009/02/07(土) 00:50:47 ID:XZUozGI6
>>472
音は鳴ってるの?

480 :472:2009/02/07(土) 12:23:31 ID:m2CcO09N
すいません
解決しました
原因は動画のサイズが大きかったことでした
試しに400*300の小さい動画を再生したところ画面左端にきちんと表示されました

481 :名前は開発中のものです。:2009/02/07(土) 16:43:56 ID:5JGvk0Ld
ほー大きいと駄目なのか

482 :名前は開発中のものです。:2009/02/07(土) 18:57:56 ID:fLtGYl8p
大きいってどれくらいだろう。

483 :名前は開発中のものです。:2009/02/07(土) 21:03:54 ID:lpCM/pFJ
謎がふかまるばかりだ

484 :名前は開発中のものです。:2009/02/07(土) 23:54:45 ID:winQ4pAR
画面から一部はみ出てるから表示されないじゃね

485 :名前は開発中のものです。:2009/02/09(月) 20:19:32 ID:1pnOXqGt
背景の画像と前景の人物画の輪郭をアンチエイリアスで
合成するにはどうしたらいいですか?

486 :名前は開発中のものです。:2009/02/09(月) 21:02:42 ID:r4CYwpcr
アルファブレンドの出番かな?
ファイル名_a.拡張子で指定。プログラムは変更不要で元ファイルといっしょに読み込む。
グレースケール(白黒)で256階調。
0(黒)が完全透過で255(白)がマスク、中間値で半透明処理できる。

487 :名前は開発中のものです。:2009/02/09(月) 21:16:29 ID:hQLvxnkO
前景に普通にアルファチャンネル付き24bit-PNG使うだけじゃなくて?

488 :名前は開発中のものです。:2009/02/09(月) 21:39:39 ID:kpyVvUs4
png扱えるならそれが一番楽だな

489 :名前は開発中のものです。:2009/02/09(月) 22:04:30 ID:1pnOXqGt
ありがとうございます

アルファブレンド試してみました
ファイル一つ用意するだけで出来たんですね
美しい描画に感動しました

アルファチャンネル付きpngは今から作ってみます
作ったことないからグーグルから始めますが
今日中にがんばってみます



490 :名前は開発中のものです。:2009/02/09(月) 22:37:00 ID:1pnOXqGt
アルファチャンネル付きpngすぐ出来た
ありがとうございました

491 :名前は開発中のものです。:2009/02/10(火) 01:17:10 ID:4F920hOP
俺はもう何でもかんでもアルファチャンネル付きPNGだ。便利すぎ

492 :名前は開発中のものです。:2009/02/10(火) 10:00:17 ID:XFgx+1B+
だな

493 :名前は開発中のものです。:2009/02/10(火) 10:05:10 ID:rFLiGfwY
pngって使用制限あるんだっけ?
pngを知ったら他の形式なんてとても使えたものじゃない。

494 :名前は開発中のものです。:2009/02/10(火) 11:14:35 ID:vQYvbazz
スピードに問題はないの?<アルファチャンネル付きPNG

495 :名前は開発中のものです。:2009/02/10(火) 20:29:18 ID:tnQHyXfF
読み込んだあとは一緒だから全く問題ない

496 :名前は開発中のものです。:2009/02/10(火) 22:37:01 ID:vQYvbazz
そうなんだ。
透過処理ってなんか重そうだから多用しないようにしてたんだけど、心配なかったのか。

497 :名前は開発中のものです。:2009/02/11(水) 01:39:50 ID:EiHo01Mu
png使ったら著作権表記が必要じゃなかったっけ?

498 :名前は開発中のものです。:2009/02/11(水) 02:00:10 ID:v+EsJNk0
pngはgifの特許がらみがウゼーって事で作られたものだから
その辺の表記なんたらは何にも必要ないよ

499 :名前は開発中のものです。:2009/02/11(水) 03:56:50 ID:abcckAid
pngそのものの著作権じゃなくて
読み込んで表示させるプログラムの著作権じゃない?

>・下記の機能を使用した場合は、配布するソフトウエアのドキュメント等に各機能に応じた
>  著作権表示を含めてください。

>  PNG 画像を読みこむ機能を使用した場合

>   libpng Copyright (c) 1998-2004 Glenn Randers-Pehrson.
>   zlib Copyright (C) 1995-2004 Jean-loup Gailly and Mark Adler.

http://homepage2.nifty.com/natupaji/DxLib/dxlicense.html

500 :名前は開発中のものです。:2009/02/11(水) 08:50:36 ID:swUZoApZ
>>496
>>495はアルファブレンドとアルファチャンネル付きPNGが一緒ってことじゃないかな?
透過処理は普通の描画に比べたら遅いよ。

501 :名前は開発中のものです。:2009/02/11(水) 09:51:46 ID:1w4T1utS
ああ、なるほど。
491がなんでもかんでもって言ってるから
普通の描画と同じくらい軽いのかと思ってしまった。

502 :名前は開発中のものです。:2009/02/11(水) 10:55:48 ID:n8G83FSO
TGAだったら外部ライブラリ使ってないから著作権表記の必要はないよ
圧縮アルゴリズムが単純だからPNGよりファイルサイズが大きくなるけど・・・

503 :名前は開発中のものです。:2009/02/11(水) 19:22:37 ID:AZ7K07ik
さっき何気なく3D版の公式見てみたら・・・

504 :名前は開発中のものです。:2009/02/11(水) 19:36:20 ID:qrNBhwtd
終了か

505 :名前は開発中のものです。:2009/02/11(水) 21:30:38 ID:EO0e2yUS
透過処理はそんなに重くないよ

506 :名前は開発中のものです。:2009/02/12(木) 04:09:43 ID:T7mGdx78
3D版まだ落とせるとこない?

507 :名前は開発中のものです。:2009/02/12(木) 09:22:15 ID:g2cVI1Rq
直リンで落とせるんでない?

508 :名前は開発中のものです。:2009/02/12(木) 10:15:43 ID:S0rR+p5u
かゆい

うま



を思い出したwww作者どうなったんだw

509 :名前は開発中のものです。:2009/02/12(木) 15:51:55 ID:T7mGdx78
ファイル名が分からない…

510 :名前は開発中のものです。:2009/02/12(木) 19:27:06 ID:g2cVI1Rq
だいたいなんで今更3D版がほしいんだ?

511 :名前は開発中のものです。:2009/02/12(木) 19:28:31 ID:V7VMrK+q
なにが今更なの?

512 :名前は開発中のものです。:2009/02/12(木) 19:45:30 ID:g2cVI1Rq
公式が死んでるのに今更そこまでしてほしがる理由は何だろうと単純に思った。

513 :名前は開発中のものです。:2009/02/13(金) 04:49:14 ID:qd9k9XJd
きっと、開発を引き継いでくれる猛者なんだと予想

514 :名前は開発中のものです。:2009/02/13(金) 08:52:43 ID:gm7Wlof8
"今更"って主観に左右されると思う

515 :名前は開発中のものです。:2009/02/13(金) 09:20:00 ID:Tj50RFPE
>>512
前に使ってて一時期離れてたとか
DXライブラリの事を最近知ったなら今更とか関係ないし
てか、なんでそな事を疑問に思うのか疑問だ

516 :名前は開発中のものです。:2009/02/13(金) 09:31:26 ID:gsDT3swS
ちょうどサイトが死ぬ頃にきたもんだから、何かこう「今更かよ!」的な印象を持ってしまった。
失礼した。



517 :名前は開発中のものです。:2009/02/13(金) 10:00:20 ID:KHzspSCY
んーー???

518 :名前は開発中のものです。:2009/02/13(金) 10:08:42 ID:Gs8dKfU5
情弱死ねって事でしょ

519 :名前は開発中のものです。:2009/02/13(金) 13:24:47 ID:OFBqMPYi
とりあえず、webarchiveあたりからリンク引っ張ればいいじゃん

520 :名前は開発中のものです。:2009/02/13(金) 17:52:53 ID:gamtZzLZ
DXライブラリ初めてつかってみたんだけど、なかなかいいね。
面倒なDirectX初期化周りやレンダリング処理を全部任せられるのがすごく便利。
今まで何度も1人でゲーム作ろうとしてゲームのライブラリ化までで燃え尽きてたけど、いけそうな気がする。

ただ、メッセージプロシージャ周りを完全に独立させて、他に譲渡できればいいんだけど、
DirectXの特性上難しいのが残念かな。
ウィンドウモードでデバッグウィンドウ周りを実装してたときに感じた愚痴です。

521 :名前は開発中のものです。:2009/02/13(金) 19:27:10 ID:6Q+KDpbI
3Dの方が更新されてたが、作者どうしちまったんだ?気でも違ったか?

522 :名前は開発中のものです。:2009/02/13(金) 19:33:25 ID:OFBqMPYi
人生の方が狂ったんじゃ

523 :名前は開発中のものです。:2009/02/13(金) 20:41:49 ID:Br6f/DrZ
http://00o.sakura.ne.jp/index.html
3D版の作者のサイト、移転してたんだ

524 :名前は開発中のものです。:2009/02/13(金) 21:15:25 ID:vieAChNU
>>523
日記の内容からして
もうDXライブラリの方は手をつけないんだろうか

525 :名前は開発中のものです。:2009/02/13(金) 21:54:45 ID:KHzspSCY
このスレ見てなかったっけ?
そのうち書き込むんじゃない?

526 :名前は開発中のものです。:2009/02/13(金) 22:01:18 ID:6Q+KDpbI
>>523
ああ、移転だったのか。
あんなイカレた閉鎖文なんか載っけてどうしたのかと思ったよ。

527 :名前は開発中のものです。:2009/02/13(金) 22:26:23 ID:Tj50RFPE
要望に答えるのが日常になって自分の作りたい物に時間や気力を使えなくなったから
過去を全部捨てて仕切りなおしたって感じだな
もうライブラリとかそう言うのは作っても公開しない気がする

528 :名前は開発中のものです。:2009/02/14(土) 00:37:02 ID:vEcxeBnT
DXライブラリ3Dは公開される気配はなさそうだし、終了のお知らせか・・・

529 :名前は開発中のものです。:2009/02/14(土) 02:11:46 ID:ioBOninz
まあこうなるとは思ってたよ
DXライブラリ3Dのソース見てみたらモデルの扱いにD3DX使ってて
まともなライブラリに至るにはまだまだ先の長い状態だったしな・・・

530 :名前は開発中のものです。:2009/02/14(土) 13:24:54 ID:esml8/+n
いや、作者はどこか意志が弱そうだから、
また公開してくれるまで諦めるな。

531 :名前は開発中のものです。:2009/02/16(月) 13:18:58 ID:xQ8BZc1p
人様が作っている物をタダで利用させてもらってる以上、こういう事態は仕方ないと思うよ

532 :名前は開発中のものです。:2009/02/16(月) 17:21:56 ID:2DsBHdnG
今、3D版のサイト見たら
DXライブラリ3Dファイナルパック
というのが、公開されてるんだが
http://fatalita.sakura.ne.jp/3DLib/


533 :名前は開発中のものです。:2009/02/16(月) 17:48:01 ID:i1Y9wFn0
>>532
>※このサイトは2,3日以内に自動的に閉鎖されます
このスレ見て一時的に公開?w

534 :名前は開発中のものです。:2009/02/16(月) 18:15:06 ID:2i4RbFSc
でもこうやって出来る限りの配慮をしてくれるのはありがたい
非常に乙でした

535 :名前は開発中のものです。:2009/02/16(月) 21:10:15 ID:yCP91q6a
とりあえずウィルススキャンはクリアした

536 :名前は開発中のものです。:2009/02/17(火) 14:12:08 ID:VEVhf4mN
てか自動的に閉鎖ってできるのか

537 :名前は開発中のものです。:2009/02/17(火) 15:16:32 ID:Zl2geQsR
今北
関数リファレンスページにあるリンクされてない関数ってサンプルがないだけで使えるんだよね?
SUGEEEE

538 :名前は開発中のものです。:2009/02/17(火) 16:23:49 ID:5nIY3uJB
DXライブラリ3D作者
おつかれさま
いろいろ勉強させていただきました

539 :名前は開発中のものです。:2009/02/17(火) 16:43:07 ID:vyYC8Vig
DXライブラリ3D辞めたのか。うーん。これからどうしよう。
SlimDXに行くかな

540 :名前は開発中のものです。:2009/02/17(火) 16:47:15 ID:gK6Z/ZXS
SlimDX使えるような人ならDXライブラリの世話になんかならんw
.NET言語で書けること以外は生DirectXと同じだぞ

541 :名前は開発中のものです。:2009/02/17(火) 17:10:56 ID:nPVB/UbL
まあおかげDirectXのドキュメントが役に立つわけだがw

542 :名前は開発中のものです。:2009/02/17(火) 20:02:40 ID:/uggH+y6
DXライブラリ3D作者ありがとう、感動した。

おつかれさまでした。

543 :名前は開発中のものです。:2009/02/18(水) 01:28:08 ID:p5LpkikR
etGraphMode(800,600,32);
if( DxLib_Init() == -1 ){return -1 ;}
int t,g;
g=LoadGraph("a.png",TRUE);

SetDrawScreen(DX_SCREEN_BACK);
for(t=0;t<150;t++){
DrawGraph(GetRand(800),GetRand(600),g,1);
ScreenFlip();
WaitTimer(10);
ProcessMessage();
}

単純に画像を全画面にランダム表示するプログラムなのだがここで問題が・・・

Radeon系のグラボで実行すると画面がおかしくなるんです
SetScreenMemToVramFlagでグラホのメモリを使わない設定にするとまともに表示します
DXライブラリはRadeonの相性悪いんでしょうか
ちなみに実行したパソコンのグラボはラデX1950Proと3870で
ドライババージョンは1.2.2545 38946です

544 :名前は開発中のものです。:2009/02/18(水) 01:28:34 ID:p5LpkikR
最初のSぬけてた

545 :名前は開発中のものです。:2009/02/18(水) 02:19:01 ID:8ojm5TEP
「おかしく」の内容がわからないけど
たとえばSetGraphMode(640,480,16);にしても起こる?

546 :名前は開発中のものです。:2009/02/18(水) 04:12:49 ID:p5LpkikR
>>545
色を変えてもちらつきます・・・どうやら色問題でもなさそうです

で試行錯誤していろいろやってみたけど
SetDrawScreen(DX_SCREEN_BACK); というの行を削除して
実行するとまともにちらつきがなく1枚ずつまともにきれいに表示された
(理由はよくわからないけど・・・)
あ 肝心なDXライブラリはVer2.25です

547 :名前は開発中のものです。:2009/02/18(水) 07:25:00 ID:TxKBLHeJ
>>543
全文かいてないからどうおかしくなるのか分からないけど、それだとすぐに終わらない?
SetGraphMode(800,600,32);
if( DxLib_Init() == -1 ){return -1 ;}
int t,g;
g=LoadGraph("a.png",TRUE);

SetDrawScreen(DX_SCREEN_BACK);

while(ProcessMessage() == 0)
{
for(t=0;t<150;t++){
DrawGraph(GetRand(800),GetRand(600),g,1);
}
ScreenFlip();
}
DxLib_End();
return 0;

これでもだめ?

548 :名前は開発中のものです。:2009/02/18(水) 08:16:18 ID:476p40bE
ラジオン自体、DirectXの規約にこだわり過ぎているからな
テクスチャサイズは2の累乗とか特殊なウィンドウサイズに対応してないとか

549 :名前は開発中のものです。:2009/02/18(水) 08:38:08 ID:p5LpkikR
>>547
すいません自己解決しました^^;

どうやらDXライブラリのプログラム上ではなく
ATI Catalystのグラフィック設定がおかしかったようです・・・
3Dアンチエイリアス設定を「管理しているアプリケーション」を選択して
設定して実行すると 画面に残像現象がおきて変になるようです
そこの設定を 2x4x6x(どれでもOK)を選択すればちゃんと表示されました

550 :名前は開発中のものです。:2009/02/18(水) 19:23:35 ID:m9ZprRI/
ファイナルパック逃したああああああああああ

551 :名前は開発中のものです。:2009/02/18(水) 19:41:11 ID:VJaNf5ax
>>550
^q^9m




>改変して二次公開したりしても別にかまいませんが、その際は二次公開の旨を分かる位置に掲載してください。
>なお、DXライブラリ3Dは著作権は原則フリー(常識の範囲内で)なので商用・非商用・自作ライブラリへの組み込み、
>全てにおいてあなたのやりたいようにやってください。

その内誰かうpしてくれるよw

552 :名前は開発中のものです。:2009/02/18(水) 21:08:45 ID:CQ81txgw
>>550
うpロダにあげたよ


>二次公開の旨を分かる位置に
ミスったな
一応ここで二次公開って言っておけば大丈夫かな?


http://uproda55.2ch-library.com/s/gogo000065.zip.shtml

553 :名前は開発中のものです。:2009/02/18(水) 21:30:08 ID:VJaNf5ax
>>552
それは中身改変してる場合じゃね?>掲載

554 :名前は開発中のものです。:2009/02/19(木) 07:50:51 ID:pIWtXiH1
何故か3Dモデルがポリゴン欠けしてしまうよ

555 :名前は開発中のものです。:2009/02/19(木) 11:33:29 ID:f0/T9Pla
それ以前にさ、モデルを100分の1くらいに縮小して表示したら変なことにならないか?
もうこれでずっと悩んでるんだが

556 :名前は開発中のものです。:2009/02/19(木) 15:13:01 ID:U9UHVYOh
ヒント
有限な計算精度

557 :名前は開発中のものです。:2009/02/19(木) 16:41:47 ID:4ok3CY5Z
縮小するなら、縮小専用のモデル(ビルボでも可)を用意してあげれば?

558 :名前は開発中のものです。:2009/02/19(木) 19:45:08 ID:f0/T9Pla
どうしよう二人の言ってることがさっぱり分からん。

ニコ動に抵抗がなければ5:20あたりから見てくれないか。
ttp://www.nicovideo.jp/watch/sm6061026

559 :名前は開発中のものです。:2009/02/19(木) 19:51:00 ID:f0/T9Pla
↑ログイン形式だったの忘れてた。聞かなかったことにしてくれ。

560 :名前は開発中のものです。:2009/02/19(木) 19:57:29 ID:qMcuPVNK
ライブラリ3DはDXアーカイブファイルとFileRead_系の関数が使えないのかああああああああああ

561 :名前は開発中のものです。:2009/02/19(木) 20:18:13 ID:bxQhZGhK
File_Read系は
#include<stdio.h>
で好きなだけ代用できるじゃないか

intじゃなくてFILFポインタになるけど

アーカイブは探せばいくらでもあるから代用できる

……はず

562 :名前は開発中のものです。:2009/02/19(木) 21:11:58 ID:uEbxvwJb
>>558

うはー、DXライブラリ3Dってこんなの作れるのか。

563 :名前は開発中のものです。:2009/02/19(木) 21:35:14 ID:lOZWd07N
DXライブラリ3Dを持ち上げては「閉鎖もったいない!」「また公開されるべき」と色んなスレで書き込んでるIDが同じヤツ作者?
それにあわせて作者が同じ日に公開とか自演ぽくね?

閉鎖なのか公開なのかはっきりしろよ・・・
大学続けようとおもいます→大学中退しました→
夢があるからです→夢から冷めてきました→
興味が薄れてきました→PC壊れたので・・・→閉鎖します

564 :名前は開発中のものです。:2009/02/19(木) 21:40:51 ID:uEbxvwJb
んな事自演しても意味ないと思うけどな〜w

565 :名前は開発中のものです。:2009/02/19(木) 21:48:49 ID:tJ+D/Bvq
http://ii2.matrix.jp/news/archives/index.html

566 :名前は開発中のものです。:2009/02/19(木) 21:49:12 ID:TRLSeDgG
>>563
アホ?
これ以上のバージョンうpは無いと思ってればいいだろ
閉鎖されてから落とせなくて探してる奴が居ただけだ
ファイナルを何時から準備してかは知らんがな

てか、こんな過疎板に自演して作者に得があるのか?

567 :名前は開発中のものです。:2009/02/20(金) 00:24:59 ID:8YD/yL0t
2Dの方で努力に見合った対価が得られなかったのかな?

568 :名前は開発中のものです。:2009/02/20(金) 00:29:18 ID:ysEz7dEP
DXライブラリ3Dだけど個人的には飽きっぽいのに根気が要るライブラリ公開なんてするなよと思った
無料だから文句は言えないけど、飽きたから管理止めますとか、無責任なことには代わりない
もうこの作者のことは信用できない

569 :名前は開発中のものです。:2009/02/20(金) 01:17:54 ID:A+5UBWwG
文句言いまくりですねw

570 :名前は開発中のものです。:2009/02/20(金) 05:50:40 ID:8tyTE/rK
まあ擁護してる奴は作者だろうな

571 :名前は開発中のものです。:2009/02/20(金) 07:41:19 ID:8YD/yL0t
仮に飽きたからでも一身上の都合と言うのが大人だよな

572 :名前は開発中のものです。:2009/02/20(金) 07:43:53 ID:8YD/yL0t
麻生じゃないけど世の中思った事をそのまま口にすると損する事が多いらしい

573 :名前は開発中のものです。:2009/02/20(金) 07:44:51 ID:jFTkkFCI
>572
そらそうだw

574 :名前は開発中のものです。:2009/02/20(金) 08:28:32 ID:8h4MKZuU
麻生は口滑らしすぎだなw

575 :名前は開発中のものです。:2009/02/20(金) 09:06:13 ID:aIKFY2CZ
欲しい物が手に入ったら叩き始めるとかもうね

576 :名前は開発中のものです。:2009/02/20(金) 09:48:35 ID:KdVzxEPs
小泉さんは思ったこと口に出したからこそ成功できたタイプ

577 :名前は開発中のものです。:2009/02/20(金) 10:58:30 ID:8YD/yL0t
飽きたから止めますってなんて言われたら今までのファンは凹むもんさ
有料でもいいから続けてみては?

578 :名前は開発中のものです。:2009/02/20(金) 12:26:01 ID:aZHJViPQ
>>576 どこがだよwww

むしろ、逆だろ。ほとんど何も言わなかった。
で、喋る時は、あらかじめブレーンが考えた フレーズで乗り切る。
だから、絵が欲しいTVには喋ってる所で、内容がぶれようがない。
変な編集かませる余裕を作らず、ちゃんとメガホンとしてマスコミを利用してた。

579 :名前は開発中のものです。:2009/02/20(金) 12:38:02 ID:jFTkkFCI
メディアの使い方が上手かった、これだけは間違いない

580 :名前は開発中のものです。:2009/02/20(金) 13:08:33 ID:3qadtHxy
DXライブラリ3Dの作者は信用できないのは間違いない
それ以上にDXライブラリの名前使ったのに逃げたのが許せない


581 :名前は開発中のものです。:2009/02/20(金) 14:12:22 ID:KdVzxEPs
>>578
私の内閣では通用しない
感動した
そして解散を決めたときの名演説

いまさらかつての人気を貶めようとしても無駄ですよ


582 :名前は開発中のものです。:2009/02/20(金) 15:48:19 ID:D8Q9D5Jt
DXライブラリ
DXライブラリ 関数リファレンスページ
dxfunc2.htm(ファイル名) には詳しい説明がなくて

メニュー関係関数がいまいち使い方がわからない

583 :名前は開発中のものです。:2009/02/20(金) 16:36:00 ID:8h4MKZuU
あー、なんか

>それ以上にDXライブラリの名前使ったのに逃げたのが許せない

これはわかる
名前がまったく関連性のないものだったらよかったのにね

584 :名前は開発中のものです。:2009/02/20(金) 17:24:08 ID:MS2hL7JC
メニュー関係関数って何

585 :名前は開発中のものです。:2009/02/20(金) 17:24:10 ID:2MhbVJBH
集客のためだったんだろうよ。

586 :名前は開発中のものです。:2009/02/20(金) 18:29:28 ID:kcT2uiGI
メニュー関係の関数は本当に全然わからんよね
関数の数も多ければ、引数についても説明不足でなにがなんだか分からないよ。まじで。

自分はResourceから作ってます。
IDR_MENUってのがメニューリソースでこんな感じ
SetUseGDIFlag(TRUE); //GDI利用
SetUseMenuFlag(TRUE); //メニュー利用
LoadMenuResource(IDR_MENU); //リソースからメニューを読み込み
SetDisplayMenuFlag(TRUE); //メニューの表示
注意を1点だけ。
Windowモードだと問題ないけど、フルスクリーンモードだと、
そのメニューからDialogBoxなりMessageBoxを呼ぶと、
一見ちゃんと表示されたようになりますが、処理復帰後、
その後、メニューが隠れて見えなくなります。

587 :名前は開発中のものです。:2009/02/20(金) 18:30:55 ID:kcT2uiGI
あ、あとメニュー作成はDxLib_Initの前でOKです

588 :名前は開発中のものです。:2009/02/21(土) 01:04:15 ID:3rVkBDkP
>552
今DLしました
ありがとうございます!

589 :名前は開発中のものです。:2009/02/21(土) 09:46:45 ID:73or/HL/
>>552
超ありがとう。
マジで。
おかげで開発引き継げられるわ。

590 :名前は開発中のものです。:2009/02/21(土) 10:07:29 ID:QPv83g/e
>>589
引き継いでもいいけどDXライブラリ3Dという名称はやめてくれ

591 :名前は開発中のものです。:2009/02/21(土) 10:35:53 ID:73or/HL/
>>590
わかるけど
変えたら変えたで問題じゃね?

592 :名前は開発中のものです。:2009/02/21(土) 11:17:25 ID:Vvb1WGeN
俺ももうDXライブラリ3Dという名前はやめてほしい
完成度が高くて初心者でも分かる程度になってから名乗って欲しい

593 :名前は開発中のものです。:2009/02/21(土) 11:52:48 ID:YY9Vv2Rq
DXライブラリ3Dの作者叩く奴等は最低だと思う。

どこのチョンだよ。

見てて恥ずかしい。

594 :名前は開発中のものです。:2009/02/21(土) 12:04:32 ID:Vvb1WGeN
勝手にDXライブラリ名乗って売名したうえに
ユーザーから賞賛されないって逃げたのは誰だよ

ホンディーって名乗ってホンダっぽさだして
富士山移して日本っぽさだして売名してる現代車と変わらないのは作者だろ
しかも、性能まで劣ってるというとこまで同じだし

叩くというかもう出てこないで欲しい

595 :名前は開発中のものです。:2009/02/21(土) 12:37:57 ID:73or/HL/
行動せん奴よりは100億倍マシだがな

596 :名前は開発中のものです。:2009/02/21(土) 12:41:31 ID:Vvb1WGeN
行動の方向性が悪けりゃ邪魔にしかならない
そして、作者は現に逃げた 大学からも ライブラリからも サイトからも

597 :名前は開発中のものです。:2009/02/21(土) 12:45:53 ID:Wn6D0K7q
ml::だけは格好悪すぎるから変えてくれ

598 :名前は開発中のものです。:2009/02/21(土) 12:46:30 ID:Vvb1WGeN
あと作者はあのサイトとあの名称を捨てただけで活動してるみたいよ?
ブログっぽいのに書いてあった
その宣言と同時に突然DXライブラリ3Dの書き込みや動画投稿増えてるからなー
何をいわんとするかは察してくれ

599 :名前は開発中のものです。:2009/02/21(土) 12:49:09 ID:Vvb1WGeN
>>597
あれはセンスないよなmL.とかないわーって思った。
普通に dxlib3d. とか略してdx3dなり関連性だせばいいのにな

そもそも初心者向け狙ってクラス前提はどうかな・・・
表面層ですべて関数化したほうがDXライブラリっぽくていいのいね

600 :名前は開発中のものです。:2009/02/21(土) 12:56:14 ID:YLpnm94h
プログラマなんだろ?
自分でやれよ。

うだうだうるさいな

601 :名前は開発中のものです。:2009/02/21(土) 12:57:32 ID:73or/HL/
クラスやだやだと思っていたクチだが
いざ自分がクラスを覚えるとやっぱクラスじゃなきゃやだな。

602 :名前は開発中のものです。:2009/02/21(土) 12:58:37 ID:YLpnm94h
あのライブラリは終わったんだからさっさと切り替えろよ
ここは
Dxlibのスレだ

603 :名前は開発中のものです。:2009/02/21(土) 13:10:33 ID:Vvb1WGeN
確かにまったく関連ないからね、関連持たせたい人いるようだけど


604 :名前は開発中のものです。:2009/02/21(土) 13:16:06 ID:dxxV1Mry
DXライブラリのひともこんな奴らがユーザーかと思ったらやる気なくすわな。
なんかあったらどうせ同じように叩くんだろ?
で、お前ら1本くらいゲーム完成させたのかよ?
できてる奴は晒してくれ。できてない奴は3d叩いてないで、一緒に精進しようや。

605 :名前は開発中のものです。:2009/02/21(土) 13:24:03 ID:73or/HL/
むしろ何をモチベーションに頑張っているのか知りたい。
一銭にもならんのに世の中には奇特なひとがいるものだなと思っている。
使うほうとしては助かるが。

606 :名前は開発中のものです。:2009/02/21(土) 13:27:49 ID:Vvb1WGeN
やる気勝手になくしてろよw
なんかあったら同じように叩くに決まってるだろwそれが悪いのか?

一銭にもならなくても集客や勉強にはなるからな
それを先に期待して失敗したライブラリもあるようだがw

607 :名前は開発中のものです。:2009/02/21(土) 13:33:11 ID:YLpnm94h
>>606
http://pc11.2ch.net/test/read.cgi/gamedev/1233739646/

こっちだけでやってろよ

608 :名前は開発中のものです。:2009/02/21(土) 13:43:26 ID:Vvb1WGeN
3D版をよく宣伝しておいてあげるよ
色んなとこでなw
よかったなJEX

609 :名前は開発中のものです。:2009/02/21(土) 14:09:34 ID:jnbX56Cw
おまいら、DarkGDKを使え!3Dが簡単だ
クラスもOOPも必要ない
DXライブラリだけの知識で充分だ

DarkGDK
http://www.microsoft.com/express/samples/gamecreators/default.aspx



610 :名前は開発中のものです。:2009/02/21(土) 14:22:42 ID:dxxV1Mry
IDにdx出たらなんか嬉しいわ。
フリーソフト全般に言えることだが、モチベーションはユーザーの笑顔だよ。
勉強も兼ねて作ったソフトでも他人が喜んでくれると嬉しいじゃん。
でも勘違いしないでほしいのは、「奉仕」ではなくて結局は自分が嬉しいからということ。
だから>>606みたいなコはツクールでも他のライブラリにでも行けばいいのは確定的に明らか。

…作者乙みたいになっとるorz

611 :名前は開発中のものです。:2009/02/21(土) 14:27:52 ID:Vvb1WGeN
だから、DXライブラリとDXライブラリ3Dはまったく関係ないだろ
その話題をだすなホンディー野郎が

612 :名前は開発中のものです。:2009/02/21(土) 14:51:46 ID:9LkGvvey
無関係なのに名前だけで信者が勝手に宣伝してくれる東方のようだ

613 :名前は開発中のものです。:2009/02/21(土) 18:11:06 ID:ZosdmEGc
この過疎スレでまっかっかとはこれいかに

614 :名前は開発中のものです。:2009/02/21(土) 19:22:29 ID:qDaUhwJp
ID:Vvb1WGeN

615 :名前は開発中のものです。:2009/02/21(土) 20:09:47 ID:YRfeqJWH
DXライブラリPortableなるものもあるし、どうなってるんだ

616 :名前は開発中のものです。:2009/02/21(土) 22:42:10 ID:SXUTviSw
本家の雑談掲示板で

投稿者:管理人 投稿日:2008/12/02(Tue) 03:41
> PSPで使えるDXライブラリ風のライブラリに取り組んでいます。
> DXライブラリPortableというそのまんまな名前です。
DXライブラリの名を冠するのでしたらDXライブラリのプログラムがそのまま動く方向で・・・  嘘です  ( いえ、***さんなら可能かもしれませんが・・・ )
というか、似てる度合いにもよりますが、なにもセンスの無い名前( DXライブラリ )を使う必要は無いのでは(^ ^;
;
遠回しな表現だが、DXライブラリの名が乱用されることに困惑している
プログラミング云々以前に、奥ゆかしい心を持つのが大事だと思うよ
渦中の人物さんも、とうに終わったことを批判してる皆様も

|ω・)。oO(・・・なんて言ってみたいね)

617 :名前は開発中のものです。:2009/02/21(土) 23:09:02 ID:73or/HL/
>なにもセンスの無い名前( DXライブラリ )を使う必要は無いのでは(^ ^;

なにを今更かもしれんが
「DXライブラリ」という名前は本当、どうにかならんかったのかな。
一般名詞なのか固有名詞なのか紛らわしい。

618 :名前は開発中のものです。:2009/02/21(土) 23:32:02 ID:Vvb1WGeN
>>617
と、JEXが名前のせいにしています

619 :名前は開発中のものです。:2009/02/22(日) 01:09:22 ID:iXJQLcV6
>>617
DirectXの公式ライブラリだと思ってる人も居るしね
でもこの微妙な名前のお陰で検索で迷うことが無いw(似た名前を誰も付けないから必ずトップに来る)
しかしDX(デラックス)ライブラリなのか"D"irect"X"ライブラリなのかどっちなんだ

620 :名前は開発中のものです。:2009/02/22(日) 01:48:46 ID:MYCg5Ttv
>616
遠回しな否定にちょっと笑った

>617
遠い昔に、同じようなことを(仲間内でだが)ツッコんだ記憶があるw

621 :名前は開発中のものです。:2009/02/22(日) 10:47:40 ID:SOgPp2Su
東方二次創作で東方○○○(漢字三文字)って名前にするような感じだな

622 :名前は開発中のものです。:2009/02/22(日) 18:24:12 ID:D+em7cNw
なんか根本的に違う

623 :名前は開発中のものです。:2009/02/22(日) 23:59:26 ID:T9mimNJt
DXライブラリとは直接関係無いかもしれませんが質問させてください。
今2Dのゲームを作り始めたばかりです。
座標系の変数にint型を使っていますが計算や関数に通すと小数点以下が切り捨てられ若干正確さに欠けるてしまうのが気になります。
floatやdoubleを使えば正確さは取り戻せるのですが、
この先ゲームを大きくしていくにつれて浮動小数点型を使用するデメリットなどはありますか?
たとえば大量の衝突判定を行う際の演算速度に影響しないかなどが気になるのですが・・・

624 :名前は開発中のものです。:2009/02/23(月) 00:01:18 ID:DH1AxR+6
そもそも小数点以下が切り捨てられるのが正確じゃないと考えるのがおかしい。
表示座標と内部座標について見直せ。

625 :名前は開発中のものです。:2009/02/23(月) 01:02:40 ID:pMCsbAxr
int型は整数をいれる変数です

626 :名前は開発中のものです。:2009/02/23(月) 01:16:14 ID:8ngKALzm
ちなみに内部的に浮動小数点で持っても別にいい。
表示の時は整数キャストしなさい。
切捨てが気になるなら四捨五入の関数やマクロでも使いなよ。
演算速度はint>float>doubleだが、
floatで座標を持たないといけない設計のゲームが、
演算速度の関係でint型に戻すとかは考えない方がいい。

作ってるゲームにもよるが、あたり判定はコストが掛かるところ。
演算速度が気になるようなら、基本的な衝突判定アルゴリズム(4分木空間分割)を使うがいいさ。
演算速度の問題はアルゴリズムが解決してくれる。

627 :名前は開発中のものです。:2009/02/23(月) 03:04:34 ID:E10pxrAS
2Dゲームでそんなに正確さ求められるもんかねぇ。

それとは関係ない、こっちの話だが
俺の作ってる2Dゲー、今までは普通に動いてたのが
PCに故障によって多少環境が変わったところ、
状況によって激重になるようになってしまった。

もともとそんなに高性能PCってわけじゃない(はずな)のに
非効率な組み方でちゃんと動いてたから安心してたんだが
これはちょっと根本的に見直す必要があるのかもしれん。

画像のサイズを2のn乗にする事で多少改善した部分もあるが
画像とは関係なしに重くなる部分があるようなので
それこそ以前勉強しようとして挫折した空間分割とか考える必要があるのかも……。

628 :名前は開発中のものです。:2009/02/23(月) 03:12:12 ID:8ngKALzm
まずはどの箇所でオーバヘッドを生んでいるのかを明確にしてからだな
当り判定なのか、描画処理なのか、読み書きなのかだ。
それぞれマイクロ秒単位(GetNowHiPerformanceCount)で処理時間を計測して、
ボトルネックになってる箇所があたり判定なら空間分割したらいい。
勉強するのが嫌なら、どっかその辺のライブラリ引っ張ってきたらいいさ。

629 :名前は開発中のものです。:2009/02/23(月) 08:31:25 ID:wwU8DbAV
浮動小数点なんて使ってたら誤差がどんどん
広がっていきませんか?

630 :名前は開発中のものです。:2009/02/23(月) 12:31:35 ID:cbCnDoWc
整数だと、何故正確じゃなくなるのかが分からないんだ。
誰かアドバイス頼む。

631 :名前は開発中のものです。:2009/02/23(月) 12:34:36 ID:s3UHHKOo
ミサイルの計算とか整数でやろうと思ったらものすごく頭使わないといけないと思うんだが

632 :名前は開発中のものです。:2009/02/23(月) 12:35:17 ID:D3Z7OH4U
ソースを貼るのが一番じゃね?

633 :名前は開発中のものです。:2009/02/23(月) 13:49:42 ID:cbCnDoWc
>631が質問者と同一人物かどうかは分からんけど


例えば、毎フレーム5ドットずつ動くオブジェクトがあるとする。
「速度アップ」というアイテムがあり、それを取ると移動速度が10%上昇する。

速度10%アップということは、速度が5から5.5になることを意味する。
だが、当然ながらint型では5.5という数字は表現できない。

無理矢理に5.5を表現しようとすれば、
フレーム毎に5ドット移動と6ドット移動を繰り返す……みたいなプログラムになるだろう。
でもこれはロジックとしては最悪だろうし、見た目にもガクガクしてしまう。

この場合、整数型で「速度10%アップ」なんていうアイテムの仕様が悪い。
もし一人で作っているなら、そのゲームの仕様を見直すべき。


これは極端な喩えだが、
そういう部分を考えずに、安易に浮動小数点にしよう!とするから問題が起こる。

634 :名前は開発中のものです。:2009/02/23(月) 13:54:01 ID:wvqDMdSg
有効数字というのがあってだな



635 :名前は開発中のものです。:2009/02/23(月) 14:05:09 ID:2rXEX53B
スレチ

636 :名前は開発中のものです。:2009/02/23(月) 14:12:20 ID:cAIICXpl
>>627
減算とか特殊な描画モード使ってたり、大きいテクスチャ使ってると環境毎に差が出やすかった経験

637 :名前は開発中のものです。:2009/02/23(月) 14:14:52 ID:JKBRWfYb
ファミコン時代のマリオアクションのようなゲームなら整数で座標保持してOK
どうせキャラは1ドットずつしか動かないだろう。
いまどきなシューティングしようとおもったら、
弾の移動なんかは、弾オブジェクトに加速度や速度をベクトルで持たせるだろうから、小数点使いなよ。
丸め誤差については値のとるべき範囲と計算式の展開方法を見直せ。
やれやれ。こんな質問じゃあDXライブラリ使用者の質が問われるぜ……。

638 :名前は開発中のものです。:2009/02/23(月) 18:54:46 ID:GQvUpA/G
double x = 0;
for(i=0;i<10;i++) x += 0.1;

とやってもx==1.0にはならないと読んで、
次アクション系作るときは座標を固定小数点にしようと思った。

たとえば上の計算の直後の x は0.9999になる場合がありそのときそれをintにキャストしたりfloorすると0.0になってしまう
というのを(常識なのかもしれないが)それを読むまで知らなかった

639 :623:2009/02/23(月) 19:27:59 ID:4Qo3h6rv
>>626
回答ありがとうございます。
衝突判定に試行錯誤する覚悟でfloatを使っていこうと思います。

>>633
たとえば、5ドットずつ動く弾をx軸から10度の方向に撃つとき、
sin10°*5だと1を割ってしまうので座標を整数で記述していると10度の方向に行かず水平に移動してしまいます。
intを固定小数点数的に記述する方法もあるにはあるのですが
あくまでみなし少数なので注意してコーディングしないとバグが出る、要するに面倒くさいんです。

640 :名前は開発中のものです。:2009/02/23(月) 20:03:52 ID:JKBRWfYb
sin10°と書いた時点で浮動小数点使ってる。
まさか1周256°のsinテーブル保持するなんて、オールドテクニック使うつもりじゃないんだよね?
整数部と小数部を持たせる固定小数点だとfloat演算より余計にオーバーヘッド食うよ。
素直にfloatでOK。

641 :名前は開発中のものです。:2009/02/23(月) 20:22:10 ID:JKBRWfYb
みんな知っていることだと思うけど、>>638の誤差云々という話についても書いておく。
1.浮動小数点に関して、==で比較してはならない。
 2つの浮動小数点数の差を取り、その絶対値が誤差限界より小さい時には、等しいものと判定するようにする。
2.浮動小数点同士の計算は一番最後に行う。
 誤差の蓄積を防ぐため。上手いこと計算の順序を変える。
3.一時的に整数型を使う
 0.1を10回足し算する計算を、0.1を10倍して1にしてから10回足して、その後に10で割る。

固定小数点の中でも、特に整数部と小数部を分けた固定小数点はバグの温床になりやすい。
正直いらんお世話だと思うが、1人でも悩んでいるのならとおもって書いておいた。

642 :633:2009/02/23(月) 21:54:08 ID:cbCnDoWc
>639
整数だと正確さに欠けると言っても、その「正確」って言葉自体に色んな意味があると思うんだ。

 (1)何らかの物理法則(嘘物理でもいい)をトレースする正確さ
 (2)プログラマの想定通りに動くという意味で正確さ

前者だと、intよりもfloat、floatよりもdoubleの方がより正確だろう。もちろん限界はあるけど。
後者だと、ちゃんと仕様を理解している限り正確さなんて変わらない。

なので、整数型だと正確じゃなくなる、という表現は誤解を招くかもしれない。
自分(>631>633)もそうだが、>624なんかも後者の意味で捉えたんだと思う。



>後半(>633へのレス)部分

要は、プログラム側で整数型を使うと決まっている時に、
整数で表現できない数字を使おうとするのが、そもそもの間違いってこと。

よく言われることとして、ゲームは物理シミュレーションではない。
物理法則を “正確” にトレースするより、物理法則に従ってるっぽく見えることの方が重要なわけだ。

>639の例なら、45度の角度なら水平に飛ぶことはないだろう。
もちろん誤差は出るが、その誤差に合わせてゲームの内容や難易度を調整すればいいんだ。


あ、浮動小数点を否定しているわけじゃないぞ。
最終的にはfloatとかdoubleを使うことになるだろうし。

643 :名前は開発中のものです。:2009/02/24(火) 18:11:56 ID:ZuK8YWCV
はじめてここきたぜ、誰もいないかなぁ。
RPG作ろうと思って2週間くらい粘って
斜め移動とか歩くモーションとかは入れられるようになったんだ
で、チップを使わずに、もしアイテムとか人が立ってたとしたら
ある範囲まで近づいたら頭の上にでもアクションが出るようにしたいんだけど
こうすると、いけるところといけないところの判定を作るのがごちゃごちゃになる。。

先人の知恵があれば、誰か。。

644 :名前は開発中のものです。:2009/02/24(火) 18:16:16 ID:jZRLhqc7
判定とどう関係があるのかわからないんだが、
間に壁があったらアクションが出ないようにしたいってこと?

645 :名前は開発中のものです。:2009/02/24(火) 18:24:36 ID:ZuK8YWCV
おっ
壁の絵を描いたとする。
その壁の座標に沿って越えられないようにする。
ような感じなんだけど、チップでやれば、
チップ番号で判定してそこだけ通れないですむけど

壁が複雑な形(円状に、三角だとかだと、どうするのかなぁって。

646 :名前は開発中のものです。:2009/02/24(火) 18:26:41 ID:ZuK8YWCV
訂正orz
円状になってたり、角になってたり、
です

647 :名前は開発中のものです。:2009/02/24(火) 18:35:54 ID:CVLB4nkp
壁ごとに判定するだけ

648 :名前は開発中のものです。:2009/02/24(火) 18:38:56 ID:ZuK8YWCV
つまり同じサイズの画像をつくって
通れないところはたとえば緑で塗りつぶして
座標と入力された方向に移動量を加算して
画像の1bitで判定してもし緑なら動作しないでおk?

649 :名前は開発中のものです。:2009/02/24(火) 19:02:21 ID:dNVL6GY6
まずは壁(通れないところ)と通路(通れるところ)を別個で作る。
画像を使ってもメモリが許すなら>>648の作り方でOK

で、キャラと反応オブジェクトの間に壁があるなら非アクション。それ以外なら距離が近づいたらアクション
みたいな感じでいいんじゃない?

650 :名前は開発中のものです。:2009/02/25(水) 00:50:52 ID:d7hz7bDR
>>643 とりあえず、日本語を勉強しろ。
すげーわかりにくいぞ。
頭の上にでもアクションってんが、メタルギアソリッドの敵兵の気づき!
みたいなのだとするとして、

1)アクション表示キャラの判定の選別が難しいのか?
それとも、2)キャラの動きの判定(進入可能区域か否か)が難しいのか?
その両方か?それとも判定じゃなくて、3)衝突反応に問題を抱えてるのか?
どれだ?

※衝突反応・・・・壁に計算上はめり込む位置からの移動の時に、
垂直にぶつかったら、壁の前で停止、
斜めにぶつかったら、壁に沿って進行方向に近い向きに進む。
などの判定以降の処理。

とりあえず、 『実例で学ぶゲームAIプログラミング』に1)2)等については書いてあった。
たぶん、今後とも良い勉強になるとおもうから、お勧めする。
3)は、ひたすら細かい調整をしていくしかない。
基本は、幾つかの場合分けをして考えれば直ぐに分ると思う。

651 :名前は開発中のものです。:2009/02/25(水) 01:12:39 ID:tDlRDwGK
>>650
2)だぜ。親切にありがとう。本屋で探してみる。

652 :名前は開発中のものです。:2009/02/25(水) 02:31:40 ID:Z85CVAO2
キャラ同士を結ぶ線についての障害物可否判定かと思ったら、全く違って笑ったw

653 :名前は開発中のものです。:2009/02/25(水) 03:43:37 ID:kcXQw5Ss
そういう意味だったのか。
全然わからなかったw

654 :名前は開発中のものです。:2009/02/26(木) 12:21:47 ID:dehVPWYB
DXライブラリって描画先をテクスチャに出来なかったっけ?
描画先指定でグラフィックハンドルを指定したら出来なかったから気になったんだけど……

655 :名前は開発中のものです。:2009/02/26(木) 16:44:08 ID:FCvuxnjL
描画可能なグラフィックハンドルってのがある
それじゃないと書き込みできないよ

656 :名前は開発中のものです。:2009/02/26(木) 17:45:59 ID:dehVPWYB
MakeScreenってのかな?
グラフィックと画面は別なのね……

657 :名前は開発中のものです。:2009/02/27(金) 06:25:11 ID:MX3xvzHi
ちょっと上の話題に関してなんだが
座標扱う時は素直にfloatでよかったのか
俺は小数点型だともしかしたら遅くなるかもと思い
座標計算には100倍したものを使い、表示するときに100で割って使ってたのだが
(まあ10倍で十分かもしれんが)
あと、どっかでfloat よりも double 使った方が良いと聞いたので、
俺は小数点型を扱う時には専ら double型を使ってるのだが

658 :名前は開発中のものです。:2009/02/27(金) 07:50:49 ID:KlYIcaW4
>>657
それが得策。floatは、使い方が難しい。
悪く言えば、既に過去の産物で、互換性のために残ってる・・・。
ぐらいに思い切ってしまった方が良いぐらい。
有効桁数が小さいし、感覚と違う所が強いから
小数点として扱う時は、意味も分らずにfloatを使ってると
変なバグに嵌りまくる。しかも、見た目間違ってない様なコードで嵌るからねwww

逆に、doubleだと、intよりも有効桁数が大きいから、
intで大丈夫な桁範囲を軽くカバーできるしね。
ボトルネックになってない所の計算だったら、正直doubleが無難だよ。
(あと、意外とdoubleの方が早かったりすることも多いから、
 実測で比べるのは言うまでもないが。)

659 :名前は開発中のものです。:2009/02/27(金) 10:49:02 ID:tFIcInvl
100倍よりも128倍したものを128で割る方がいいんじゃないかしらんと
確認もせずに想像で言ってみる。

660 :名前は開発中のものです。:2009/02/27(金) 19:35:42 ID:0AHSCy/i
相手のレベルによっては100倍って説明した方がいい時おあるよね。

661 :名前は開発中のものです。:2009/02/27(金) 21:05:19 ID:EURlNcbt
DXライブラリっていう名前が問題なくね
このライブラリ知る前から自前のライブラリもDxLibって付けちまってたし
まぁ何年もまえの話だが

662 :名前は開発中のものです。:2009/02/27(金) 21:13:18 ID:ZQTPwJtl
DirectXのラッピングライブラリだからDXライブラリでいいんじゃね?
ちょっとダサカッコイイ感じが対象者レベルにぴったりだし。俺含めて。

663 :名前は開発中のものです。:2009/02/27(金) 21:31:46 ID:lChaxYTz
やっぱりDirectX公式ライブラリと思われてしまっても仕方が無い。
が、いまさらオリジナルの名前に戻されてもね。
DXLibで十分や。

664 :名前は開発中のものです。:2009/02/27(金) 23:17:07 ID:0AHSCy/i
>661-663
その微妙な心境が手に取るように分かるぜw

665 :名前は開発中のものです。:2009/02/27(金) 23:17:18 ID:+el9j4ty
朧村正みたいなゲームも作れるよね?2Dだし

666 :名前は開発中のものです。:2009/02/28(土) 00:42:10 ID:aTuc4vAr
作れるよ

667 :名前は開発中のものです。:2009/02/28(土) 06:17:37 ID:P7f9XrLx
DXLibに収録されてる非公開関数のリファレンスって無いのかな
ウィンドウハンドルを取得する方法を探してたら、非公開関数で取得できるのを知って
他にも有用な関数がありそうなので気になったんだが

668 :名前は開発中のものです。:2009/02/28(土) 06:32:10 ID:TAywFnWh
作者は非公開のリファレンスは書かないってよ。
利用する頻度の少ない関数を初心者に公開するには混乱の元というコンセプトらしい。
コメントとソースで自力で読むしかない。

669 :名前は開発中のものです。:2009/02/28(土) 06:34:58 ID:LqQy7pZD
>>667
ttp://studiokingyo.fc2web.com/dxlib/kaibou/k_shiyou.html

670 :名前は開発中のものです。:2009/02/28(土) 06:54:33 ID:P7f9XrLx
>>668
非公開関数のリファレンスは書くつもりは無いのか
わざわざ用意した関数のリファレンスを書かないのは勿体無い気もするが
ヘッダ見たら色々あったけどコメントだけじゃ引数がわからないし、ソース読むしかないのね

>>669
そこ見て非公開関数の存在を知ったんだけど、他にも説明のある非公式のサイトとかないのかな?

671 :名前は開発中のものです。:2009/02/28(土) 06:58:59 ID:TAywFnWh
引数の名前と型を見てなんとなく分かると思う。
わかんなかったのはMenu関係かな。
どれが便利な隠れ関数なのか人によってまちまちだからな〜。
全部教えるわけにはいかないので、その都度聞いてくれ。
あと、大概公式の掲示板を関数名で検索すると作者がサンプルコード書いてあるよ。

672 :名前は開発中のものです。:2009/02/28(土) 07:00:08 ID:LqQy7pZD
>>670
他のところは知らないかな
もし需要あるなら非公開関数ちょっと調べてリファレンスでも作ろうか?

673 :名前は開発中のものです。:2009/02/28(土) 07:01:10 ID:TAywFnWh
>>672
俺からも ぜ ひ 頼 む

674 :名前は開発中のものです。:2009/02/28(土) 07:06:17 ID:LqQy7pZD
>>673
でも、正直DirectX使えばなんとでもなるから、わざわざ推奨されない非公式関数発掘して制約多い状態でDxLib使うより
その方が早い気もする
中見てないから分からないけど、ソースが綺麗だったらまだ救いようあるんだけどな……

675 :名前は開発中のものです。:2009/02/28(土) 07:19:28 ID:TAywFnWh
DXライブラリ使ってるのに、その上でDirextX直叩きする酔狂は居ないと思う。
リファレンスもあったら便利だけど、目ぼしい関数はチェックしてるからなぁ。

676 :名前は開発中のものです。:2009/02/28(土) 07:27:18 ID:P7f9XrLx
>>671
教えてもらえるなら助かるわ
といっても、そこそこ量があるので使えそうな関数を探すのが難しそうだがw

>>672
非公開関数をまとめてくれるのなら有難い

677 :名前は開発中のものです。:2009/02/28(土) 12:35:30 ID:1J8Bdlx6
>>672
結構需要あると思うし、個人的にもすごくうれしい

678 :名前は開発中のものです。:2009/02/28(土) 17:39:28 ID:mz4DlK2y
詳しい説明は無くてもかまわないからリストだけでもあれば重宝します

679 :名前は開発中のものです。:2009/02/28(土) 18:56:21 ID:JPI33j26
>>666
ってことはDXライブラリでも極めれば市販ゲームレベルの作品が作れるって事だね

680 :名前は開発中のものです。:2009/02/28(土) 20:56:23 ID:GSZZUTVZ
極端な話,DrawGraphさえあれば十分

681 :名前は開発中のものです。:2009/02/28(土) 21:06:52 ID:gSUwRndo
画像ファイル一枚を分割してアニメーションさせるのと
全部別々のファイルを読み込んでアニメーションさせるのって負荷とか違うのかな?
後者の方がやりやすいんだがどうなんだろう

682 :名前は開発中のものです。:2009/02/28(土) 21:15:45 ID:GSZZUTVZ
一度の画面表示に使用する画像の数はできるだけ減らした方が
テクスチャの切り替えが減って効率は良くなる

683 :名前は開発中のものです。:2009/02/28(土) 21:20:02 ID:gSUwRndo
>>682
やっぱりそうなのか・・
パーツ分けがめんどくさいんだよなぁ

684 :名前は開発中のものです。:2009/02/28(土) 21:25:21 ID:GSZZUTVZ
何のためにプログラミングやってんの
それこそ機械にやらせればいいでしょ

685 :名前は開発中のものです。:2009/02/28(土) 23:32:58 ID:gSUwRndo
>>684
フォトショで画像作ってるからPSDファイルなんだよね
ヘボプログラマーなんでPSDファイルを分割するプログラムは作れないです・・

686 :名前は開発中のものです。:2009/03/01(日) 01:19:31 ID:Q0b0e5s4
使ったこと無いから知らないけどさ、フォトショってマクロみたいな機能無いの?

687 :名前は開発中のものです。:2009/03/01(日) 01:43:53 ID:gJBH+jz2
>>686
あるよー
でもマクロするほどの作業量でもないので手動でやります

688 :名前は開発中のものです。:2009/03/01(日) 04:00:52 ID:4UMfyekW
ん〜?
681と682の質疑応答の意味がよくわからん。

1ファイルを分割しようが、複数ファイルを読み込もうが使用する数は同じじゃないの?


689 :名前は開発中のものです。:2009/03/01(日) 04:46:48 ID:gjx3PjZU
俺もわかんね。
同じじゃん。

どっちの方が管理が楽だろう?っていう人間の負荷の話ならともかく

690 :名前は開発中のものです。:2009/03/01(日) 05:31:56 ID:idjBCaEs
>>681-689

一枚の画像を読み込み複数に分けハンドルを取得→PCが操作する画像は一枚
複数の画像を読み込みそれぞれをハンドルを取得→PCが操作する画像は複数


負荷が多いのは勿論後者
大げさだけど
一枚100MBの画像を一枚開くのと
一枚10MBの画像を10枚開くの

どっちが早いか考えてみたら分かるんじゃないかな?


まあ、数十枚の画像なら気にする必要はないんだけどさ

容量的にも、バイナリで開けば分かるけど、一枚ごとに色々付加されるから
200kbの画像を2つに分けて保存しても合計で220kbくらいになっちゃう(ものによって違うかな)

691 :名前は開発中のものです。:2009/03/01(日) 08:23:41 ID:idjBCaEs
今非公開関数まとめてたんだけど、すごくわかりやすいからわざわざまとめるほどでもない気がしてきた
作者が公開してないんだから公開するのも何かな……
一応簡単に晒すけど……
使い方(引数)、いつ呼ぶのか(DxLib初期化前か後か)、返値……ここらへんが分かれば良いんだよね?
もしこの中で知りたいとか要望あるならHTMLにして、簡単なソースくらいくっつけてリファレンス化するよ


起動→終了で複数回DxLibを読み込まなければいけないとき(あるのか?)に使えそう
int DxLib_GlobalStructInitialize( void ) ;
// ライブラリの内部で使用している構造体をゼロ初期化して、DxLib_Init の前に行った設定を無効化する( DxLib_Init の前でのみ有効 )
int DxLib_IsInit( void ) ;
// ライブラリが初期化されているかどうかを取得する( 戻り値: TRUE=初期化されている FALSE=されていない )

ファイルを検索して取得ウマー
int FileRead_findFirst( const char *FilePath, FILEINFO *Buffer ) ;
// 指定のファイル又はフォルダの情報を取得し、ファイル検索ハンドルも作成する( 戻り値: -1=エラー -1以外=ファイル検索ハンドル )
int FileRead_findNext( int FindHandle, FILEINFO *Buffer ) ;
// 条件の合致する次のファイルの情報を取得する( 戻り値: -1=エラー 0=成功 )
int FileRead_findClose( int FindHandle ) ;
// ファイル検索ハンドルを閉じる( 戻り値: -1=エラー 0=成功 )

ウィンドウから情報を引っ張り出す系の関数
int GetWindowCRect( RECT *RectBuf ) ;
// ウインドウのクライアント領域を取得する→描画領域ね
int GetActiveFlag( void ) ;
// ソフトがアクティブかどうかを取得する→現在アクティブかどうかを調べる。-1が非アクティブ、0がアクティブとかだと思う(未確認)
HWND GetMainWindowHandle( void ) ;
// メインウインドウのハンドルを取得する→分かる人のために
int GetNoActiveState( int ResetFlag = TRUE ) ;
// 非アクティブになり、処理が一時停止していたかどうかを取得する(引数 ResetFlag=TRUE:状態をリセット FALSE:状態をリセットしない 戻り値: 0=一時停止はしていない 1=一時停止していた )
int GetMouseDispFlag( void ) ;
// マウスを表示するかどうかのフラグを取得する

692 :名前は開発中のものです。:2009/03/01(日) 08:24:40 ID:idjBCaEs
int GetMouseDispFlag( void ) ;
// マウスを表示するかどうかのフラグを取得する
int GetWindowCloseFlag( void ) ;
// ウインドウを閉じようとしているかの情報を得る→本当に終了しますか?とか確認を表示するのに使えそう
int GetWindowUserCloseFlag( int StateResetFlag = FALSE ) ;
//×ボタンが押されたかどうかを調べる
int SetDoubleStartValidFlag( int Flag ) ;
// 2重起動を許すかどうかのフラグをセットする←複数起動させてもいいゲームならここを変更

マルチタスクのゲーム作りたいならここらへんが役に立ちそう
int AddMessageTakeOverWindow( HWND Window ) ;
// メッセージ処理をDXライブラリに肩代わりしてもらうウインドウを追加する
int SubMessageTakeOverWindow( HWND Window ) ;
// メッセージ処理をDXライブラリに肩代わりしてもらうウインドウを減らす

軽くみた感じ使えそうなのはこのあたりかな?

693 :名前は開発中のものです。:2009/03/01(日) 08:37:37 ID:idjBCaEs
int SetWindowInitPosition( int x , int y ) ;
// ウインドウの初期位置を設定する
int SetNotWinFlag( int Flag ) ;
// DXライブラリのウインドウ関連の機能を使用しないフラグ←これめちゃくちゃ便利でふいた
int SetWindowUserCloseEnableFlag( int Flag ) ;
// メインウインドウの×ボタンを押した時にライブラリが自動的にウインドウを閉じるかどうかのフラグをセットする←上記のGetWindowCloseFlagと組み合わせると幸せ
int SetDXArchiveExtension( const char *Extension = NULL ) ;
// 検索するDXアーカイブファイルの拡張子を変更する
int SetBackgroundColor( int Red, int Green, int Blue ) ;
// メインウインドウのバックグラウンドカラーを設定する←初期背景色は黒(#000000)
int SetDragFileValidFlag( int Flag ) ;

ドラッグ&ドロップかんれん
// ファイルのドラッグ&ドロップ機能を有効にするかどうかのフラグをセットする
int GetDragFilePath( char *FilePathBuffer ) ;
// ドラッグ&ドロップされたファイル名を取得する( -1:取得できなかった 0:取得できた )
int GetDragFileNum( void ) ;
// ドラッグ&ドロップされたファイルの数を取得する

めんどくさいから、存在だけ書くけど
他にも、ツールバーにボタンを追加する関数とか
ショートカットキーを追加する関数とか(←いくらでも代用可能だから使わない方がいいかも)
メニューを作成する関数とか
キー入力中、マウスを点滅させる関数とか

ここらへんは人によってピンポイントに使えそうな関数ばっかだから、あんまりリファレンス化しても需要無い気がする
一応応用テクニックとして、HSPからDXライブラリを呼ぶ方法とかだったら需要ある?
あるなら書こうかな

吉里吉里やNscから呼ぶことも出来そうだけど本体いじらなきゃ駄目っぽくてめんどくさい

694 :名前は開発中のものです。:2009/03/01(日) 08:44:55 ID:idjBCaEs
たとえば、×ボタンで終了確認を出したいときとかは

〜略〜

SetWindowUserCloseEnableFlag( FALSE ); //×ボタンで自動終了しない

while(ProcessMessage()==1)//だっけ?
{

ClsScreen();
game();
ScreenFlip();

if(GetWindowUserCloseFlag()==-1)//×ボタンが押されたら
{
if(MessageBox(NULL,"終了しますか?","終了確認",MBYESNO)==IDYES) //YES,NOでYESが押されたら
break;
}

}

〜略〜

こんな感じにすればできる(と思う)
組み合わせだからなあ……リファレンス作るより小技をいくつか乗せた方が良いのかな?

695 :名前は開発中のものです。:2009/03/01(日) 08:45:28 ID:idjBCaEs
……朝から何やってんだ俺
悲しくなってきたから寝る

696 :名前は開発中のものです。:2009/03/01(日) 09:26:49 ID:k4cT38FB
おつかれさまです。ごゆっくりお休みくださいな。
リファレンスも欲しいけど、小技のほうがうれしいかも。

697 :名前は開発中のものです。:2009/03/01(日) 09:55:31 ID:gjx3PjZU
>>690
最初のファイル読み込みはともかく
ハンドルに分けて使う段になったらどっちも同じじゃね?

×一枚の画像を読み込み複数に分けハンドルを取得→PCが操作する画像は一枚
○一枚の画像を読み込み複数に分けハンドルを取得→PCが操作する画像は複数

>>691

698 :名前は開発中のものです。:2009/03/01(日) 10:04:25 ID:idjBCaEs
ああ、駄目だ
>>694だと×ボタンが押された時点でキューが送られちゃってるからDXライブラリの内部の構造的に終了確認はできない(終了確認が無限に出続ける)
「終了します」って有無を言わさぬ表示なら出来るけどね

中身見てるけど、終了キューを解除する関数は見あたらないし

独自に一度キューを取得して、ProcessMessageに投げる前に解除しちゃえば良いんだろうけど、そんなことすると初心者でも使えるって良点があじゃぱー


>>696
どんな小技が良いかな?
さっきあげた関数は単体で使えると思うし
今ソース見ながら色々いじってたけど
それ以上のことやろうと思うと色々内部的に引っかかることに気付いた

>>697
もう一度よーく読んでほしい

699 :名前は開発中のものです。:2009/03/01(日) 10:54:11 ID:gjx3PjZU
>>698
ごめん。
よく読んだ上で書いたけどわからない。
理解力なくてすまん。きっと俺が間違っている。
が、これは瑣末な問題なので暇なときにでも考えておくとして…

>>693
>一応応用テクニックとして、HSPからDXライブラリを呼ぶ方法とかだったら需要ある?

これ興味あるかな。

700 :名前は開発中のものです。:2009/03/01(日) 11:24:01 ID:oPHW1ePY
>>697
ハンドル分けたらだめ
一つのハンドルから転送元の領域を指定して描画するんだよ
同じテクスチャを連続して使うときは切り替えが行われないからその分効率が良くなる

701 :名前は開発中のものです。:2009/03/01(日) 11:38:25 ID:ey11ozVK
質問掲示板の検索を使おう

>>698
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1089

>>699
ここのNo.4に書いてある高速描画云々のところ読めば分かる
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1162
読みこみ速度は同じだけど描画速度は

一枚の画像を読み込み複数に分けハンドルを取得 > 複数の画像を読み込みそれぞれをハンドルを取得

702 :名前は開発中のものです。:2009/03/01(日) 11:39:47 ID:a7Bg5ATd
HSPなんぞ使うなよ

703 :名前は開発中のものです。:2009/03/01(日) 11:44:24 ID:oPHW1ePY
なるほどLoadDivGraphでもいいのか

704 :名前は開発中のものです。:2009/03/01(日) 13:22:39 ID:gjx3PjZU
>>700
なるほど
理解したdクス

>>701
読んでみる

>>702
今更HSP使う気はないけどやり方にはちょっと興味が

705 :名前は開発中のものです。:2009/03/01(日) 13:39:31 ID:9rIzOA3I
>>691-694


前にHSPから使ったりしてたけど、わざわざHSPから呼び出す必要があまり無いような気がしたのでVC導入したな

706 :名前は開発中のものです。:2009/03/01(日) 14:11:25 ID:idjBCaEs
>>701
なるほど
StateResetFlagは初期値FALSEになってるやつか、完全に見落としてたアリガトウ

>>702
HSP使うメリットってなんだろう、(うろ覚えだけど)3D処理が簡単なDLLかなんかがあったよね?
でも、それ使うなら最初からHSP使えばいいし……
自分から言っといてなんだがメリット見えないやごめんw


DXライブラリの可能性を追求しようと思ってドラッグ&ドロップで画像表示するアプリ作ろうと思ったらこんなに時間かかっちゃったよ
やっぱりアプリ系はおとなしくWINAPI使うに限るorz

http://www3.uploader.jp/t/nico/images/nico_uljp00021.zip


ふ、と思ったんだけどこのスレ結構知識ある人多いしうpロダでも用意しとけばサンプル集みたいなの作れるしいいんじゃね?
人のソース見れるってのは、(俺含め)初心者にはとてもありがたいんだよね

707 :名前は開発中のものです。:2009/03/01(日) 14:27:12 ID:ZNmLTGrU
ソースうpは恥ずかしい…

708 :名前は開発中のものです。:2009/03/01(日) 14:51:26 ID:lYNtcth6
自分の全裸うpするようなもん

709 :名前は開発中のものです。:2009/03/01(日) 15:45:22 ID:z/eFYQPp
俺のは絶対人に見せられないソースだと自覚している。
一応動いているが、初心者どころの問題じゃない。

710 :名前は開発中のものです。:2009/03/01(日) 16:15:26 ID:xm1UJhmc
ソースは出来るだけ人に見せたほうがいいよ。
指摘されればどこが良くて悪いのかが分かって次に必ず生かせる。
リアル知人じゃなくて2chで晒すのがいいかはよくわからんが・・・

うpするのとは話がちょっと違うけどここでも読んでみるといい
http://www.kojima-cci.or.jp/fuji/mybooks/cdiag/cdiag.0.6.html


711 :名前は開発中のものです。:2009/03/01(日) 16:37:16 ID:g9LGhZvF
専ロダほしいな・・・

712 :名前は開発中のものです。:2009/03/01(日) 16:45:33 ID:c9LYSV+3
ドット絵でbmpで保存して使うのと
きれいに書いたpngだとぜんぜん解像度違うような気がして変になっちまった。
ドット絵の設定ミス?それともpngにそろえるべきかな。。

713 :名前は開発中のものです。:2009/03/01(日) 18:31:12 ID:a1nbTQe/
ドット絵だからドットが見えるんじゃないのか??

714 :名前は開発中のものです。:2009/03/01(日) 23:17:37 ID:2a8K6SCC
爆発のエフェクトなどを作成する際に
グラデーションの画像を極座標変換?して
円形の画像を作成しているのだけれど、
これが何をやっているのかよくわからん。

715 :名前は開発中のものです。:2009/03/01(日) 23:25:10 ID:oPHW1ePY
つ高校数学の教科書

716 :名前は開発中のものです。:2009/03/01(日) 23:54:03 ID:A8mpIuw8
数学Cあたりだっけ

717 :名前は開発中のものです。:2009/03/02(月) 00:15:56 ID:ziDQhibJ
そういえば洞窟物語もDXライブラリ使ってるんだね


718 :名前は開発中のものです。:2009/03/02(月) 00:35:55 ID:hEBh+N4j
公式掲示板か
多分違うと思うぞ
Pixel氏が以前DirectX2だか3だかを使って作ったって言ってたし
何か勘違いしてああ答えたか、若しくは今作ってるゲームにDXライブラリを使ってるんだろう

719 :名前は開発中のものです。:2009/03/02(月) 01:43:24 ID:3riYRQc6
ウィンドウサイズのデフォルトは640*480だけど、これの変更はできる?
フルスクリーンにしないといけないから制約はあると思うけど

720 :名前は開発中のものです。:2009/03/02(月) 01:47:07 ID:7FxY5OR7
Dxライブラリのファイルにデフォルトのサイズがディファインされてたから
あれいじればできるんじゃね?

721 :名前は開発中のものです。:2009/03/02(月) 01:52:06 ID:x0I/gxMT
>>719
SetGraphMode( 800 , 600 , 32 ); で800*600になる

722 :名前は開発中のものです。:2009/03/02(月) 02:06:23 ID:3riYRQc6
>>720
ライブラリ書き換えるのはアウトだろ常識的に考えて……
そのせいでいつどこでバグが起こるかわからぬ

>>721
サンクス
画面モードの変更で解像度が変えれるとは、単語検索で見つからないわけだ

723 :名前は開発中のものです。:2009/03/02(月) 02:13:56 ID:PBT6djln
リファレンス大した量じゃないんだから
一覧を一通り目を通せば済むだろ。

724 :名前は開発中のものです。:2009/03/02(月) 06:43:49 ID:+ax8ZdoD
おれなんかどんなことができるんだろうと、わくわくしながら
上から下まで読むんだけどなぁ・・・

725 :名前は開発中のものです。:2009/03/02(月) 08:17:17 ID:vDZSfAmr
>>718
でも文字表示とかDXライブラリっぽいよな

726 :名前は開発中のものです。:2009/03/02(月) 11:57:41 ID:6eQe3/TV
>別にDXライブラリに限らないけど、DXライブラリを知った時も
リファレンスをさらさらっと流して、「これなら俺にも使えるんじゃないかな?」と思って
使い始めたな。

別に覚えなくても、一度目を通しておけば、
後になって「こういう事がしたいけど、それっぽい命令あったよな……」って
探しやすくなるしな。

727 :名前は開発中のものです。:2009/03/02(月) 20:14:38 ID:hc/QEiU+
アレだけ分かりやすくて運営管理もアレだけちゃんとしてるなんて今まで見たことないよな。
DirectXでゲームを作るっていうジャンルに関して革命的だし、最早XNAなんかも超えてると言っても過言ではない。

728 :名前は開発中のものです。:2009/03/02(月) 20:18:02 ID:qXNeI5og
ハンドルが全部intなのだけはどうかと

729 :名前は開発中のものです。:2009/03/02(月) 21:13:54 ID:Rv93cI1M
ほんとだよな。ちゃんと符号無しにしてくれないと。

730 :名前は開発中のものです。:2009/03/02(月) 21:38:18 ID:3lZqI4Au
>>729
そこじゃねーだろwww

731 :名前は開発中のものです。:2009/03/02(月) 21:42:53 ID:3lZqI4Au
typedefしなかったのは多分初心者への配慮だろうね

732 :名前は開発中のものです。:2009/03/02(月) 22:25:14 ID:ziDQhibJ
画像をプログラムで制御(回転など)して動いてみせるのと
一枚一枚画像を作ってパラパラ漫画みたいにアニメーションさせるのとどっちが負荷低いかな

733 :名前は開発中のものです。:2009/03/02(月) 22:54:20 ID:qXNeI5og
パラパラ漫画方式の画像が一枚の画像にまとめてあるなら
原理的に変わらないはず

734 :名前は開発中のものです。:2009/03/02(月) 22:57:12 ID:qXNeI5og
いや画像がまとめてあるかどうかはこの場合関係ないか
まあ変わらん

735 :名前は開発中のものです。:2009/03/03(火) 01:09:39 ID:vuUaUlBc
その二つは比較すべきものじゃない気もするがw

回転ありの描画命令よりは回転なしの方が負荷は軽いだろうけど、
大した差じゃないみたいだし、好きにしていいんじゃないかな。

736 :名前は開発中のものです。:2009/03/03(火) 02:53:14 ID:l+63ggMa
画面上の殆どのパーツが回ってるぜ!とか
512x512のパーツが回ってるぜ!とか
回転角度に応じて256パターンの画像を用意しました!
みたいな変なことやってなきゃ大丈夫だろう

737 :名前は開発中のものです。:2009/03/03(火) 03:53:26 ID:wZU6jxH0
メモリに優しいのがプログラムで制御かな。後者はあまりオススメできない。

パラパラ漫画が全部VRAMに乗るとは限らないし、
1フレーム1枚のように別テクスチャ作るのであればさらに重くなる。
1枚でまとめる場合も、作成できるテクスチャサイズ制限があるハードウェアが過去にあり、
(Voodoo時代ではテクスチャサイズが256*256が最大であった)
そのような場合、DXライブラリではテクスチャ分割が行われるので、
大きなテクスチャを作るとパフォーマンスが犠牲になります。

なので、回転・反転・拡大縮小などといった
Direct3Dによるハードウェア支援で記述できる内容であるのなら、前者の方がパフォーマンスがよくなります。

ちなみに後者で実装するのであれば、テクスチャのサイズは正方形が望ましいですよ。

738 :名前は開発中のものです。:2009/03/03(火) 04:22:48 ID:l+63ggMa
ただし、斜め向きとかにした場合、
最初から画像を用意しておいた方が綺麗に見えることは多々あるな。

プレイヤーキャラの画像など、
重要そうな部分だけパターンを用意しておくのも悪くない。

739 :名前は開発中のものです。:2009/03/03(火) 09:38:20 ID:HSt7mZci
>>737
>正方形
一辺の長さが2の倍数の正方形ね

740 :名前は開発中のものです。:2009/03/03(火) 14:11:43 ID:lmHLCC6G
>>739
> 2の倍数
2の累乗ね


741 :名前は開発中のものです。:2009/03/04(水) 10:39:32 ID:IqyXTxRb
ん……?
グラフィックハンドルがintって事は、持てるグラフィックハンドルの最大数は約32000って事?

742 :名前は開発中のものです。:2009/03/04(水) 10:43:25 ID:OmVViNLo
いやintは2*(10^9)くらいまで
その前にメモリがなくなるだろうけど

743 :名前は開発中のものです。:2009/03/04(水) 16:29:04 ID:aWTUpMQ1
東方の弾幕とかって1つ1つの弾にハンドラ持たせてるの?

744 :名前は開発中のものです。:2009/03/04(水) 17:38:35 ID:IqyXTxRb
>>742
intってそんなに長かったっけ?

>>743
ちゃんと1つずつID割り振って読み込んでるみたい。

745 :名前は開発中のものです。:2009/03/04(水) 18:29:44 ID:Q764ubCY
32bit機での
符号無しintは2^32
符号ありintは2^31(符号に1bit使用)

プログラミングしてるなら知ってて当然だろ…

746 :名前は開発中のものです。:2009/03/04(水) 18:29:46 ID:zCrgAKk6
>>744
おまえさんのいってるのは short int

747 :名前は開発中のものです。:2009/03/04(水) 19:26:33 ID:IqyXTxRb
なるほど……
なんで勘違いしてたんだろう……

748 :名前は開発中のものです。:2009/03/05(木) 00:07:34 ID:aVo6G4mJ
>>743
何を言ってるんだ?
東方はDXライブラリ使ってないぞ

749 :名前は開発中のものです。:2009/03/05(木) 10:15:06 ID:MO3/QFgO
こんにちは^^
透過処理というのをしたんですけど
下記のコードだと正常に透過処理されます。
LoadGraphScreen( 0 , 0 , "back.bmp" , FALSE ) ;
LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;

しかし
LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;
LoadGraphScreen( 0 , 0 , "back.bmp" , FALSE ) ;
とすると透過処理されません
なぜでしょうか?

750 :名前は開発中のものです。:2009/03/05(木) 10:26:43 ID:ddVb/3t1
>747
旧VBのIntegerが16bitなのと混ざってない?

>745
ハードは関係ない。コンパイラが決定する。
16bitアプリを32bitハードやOSで走らせても
intが勝手に32bitになったりしない。

処理系にあわせて決定するのが自然なだけ。

751 :名前は開発中のものです。:2009/03/05(木) 11:04:56 ID:B3wyDoGN
>>749

はい? え?

back.bmp を透過処理なしで描いた上に、char.png を透過処理ありで描いたらそりゃちゃんと透過処理されるだろうけど

char.png を透過処理ありで描いた上に、back.bmp を透過処理なしで描いたらそりゃ上書きされるだけだと思うんだが……。

752 :名前は開発中のものです。:2009/03/05(木) 12:34:23 ID:+9ctDc2h
>>750
あー、昔に見た資料がかなり古いものだったから間違って覚えてたのかも

753 :名前は開発中のものです。:2009/03/06(金) 21:17:00 ID:pmzRauOh
ある画像だけの透過と、透過の度合いを設定することはできますか?
リファレンス見る限り見当たらないのですが

754 :名前は開発中のものです。:2009/03/06(金) 21:34:26 ID:+Tdk650S
その画像を描画する前にSetDrawBlendMode
透過の度合いはPal引数
クラス使って透過率とグラフィックハンドルをまとめて管理するようにするといい

755 :名前は開発中のものです。:2009/03/06(金) 21:46:01 ID:pmzRauOh
>>754
即レスありがとう^^
うまくできました!!


756 :名前は開発中のものです。:2009/03/06(金) 23:45:45 ID:HF/v1JaI
DXライブラリ3Dの開発引き継いでる奴いないの?

757 :名前は開発中のものです。:2009/03/07(土) 00:24:08 ID:3MouTLA1
2Dゲームでも背景は3Dにしたい・・・
本家DXライブラリにテクスチャ付モデルとフォグ表示機能だけあれば最高なんだが

758 :名前は開発中のものです。:2009/03/07(土) 01:56:55 ID:JfYg6t6e
シューティングの背景用にDXライブラリで自前の簡易モデルを描画する仕組みを組んだけど、
意外と簡単に組めたよ。
ポリゴン事に情報を配列に落として、座標を変換してVERTEX配列に入れてから描画。

フォグは出来なかったから単色背景+奥の頂点を透過で誤魔化してる。


759 :名前は開発中のものです。:2009/03/07(土) 07:03:57 ID:pCqKP5AO
クラスのコンストラクタでLoadGraphするとハンドルが取得できてないみたいだけど
仕様ですか?
他で初期化するから別に問題ないけど。

760 :名前は開発中のものです。:2009/03/07(土) 08:46:35 ID:9xqjyk6r
そのコンストラクタを呼ぶタイミングがまずいだけだろ
でもLoadGraphみたいな失敗しやすいものをコンストラクタで使うのはあまり好ましくない

761 :名前は開発中のものです。:2009/03/07(土) 13:25:49 ID:d6ZakwC3
C++のコンストラクタはオブジェクトが出来上がる前の不安定な状態だからメソッド呼んだりはしない方がいいよ。

762 :名前は開発中のものです。:2009/03/07(土) 20:23:03 ID:83odH6gl
それ俺がよくやった失敗だけどLoadGraphするまえにDxLib_Initやってないんじゃまいか

763 :名前は開発中のものです。:2009/03/08(日) 01:02:04 ID:sz9LKWkI
>>761
んなこたないw

764 :名前は開発中のものです。:2009/03/08(日) 01:07:09 ID:PVP1w5NP
>>758
           .r==x r==x
          /三/.|/三/ |
         (三(/(三(/_/
          l ̄¨'| ̄ ̄¨|
          l;::::::::|:::::::::::::l
          l;::::::::|:::::::::::::l
          l;::::::::|:::::::::::::l
          l;::::::::|:::::::::::::l
          l;::::::::|:::::::::::::l
          l;{==}!::{==}:::l
         r|:::::::::::::::::::::::|
       _ノ  ̄`ー--、,;;l~ヽ
     ,∠==、ヽ `i'ー- .     l
    /    ヽ| 「`'ー、`ー、 .ノ
     l     ミ| /   `ー、ヽ
  /j     R|イ ー-ァ、.  Y゙ 
  { [`ュハハハr''~] ̄ ___ノ   ソースうpお願いします!!!!!!!!!!

765 :名前は開発中のものです。:2009/03/08(日) 02:05:16 ID:Os5GQobq
>>764
今PC故障中で携帯から書き込んでるので、一週間後位になるけど……
龍神録プログラミングの館に似たような内容の講座があったので、
それを参考にした方が早いかも?

自分のソースと比べた所、アルゴリズムは大差なかったし

766 :名前は開発中のものです。:2009/03/08(日) 03:07:46 ID:PA5CtbPk
>>760
>>762
それだわ。
メインループの外だったよ。

767 :名前は開発中のものです。:2009/03/08(日) 07:29:17 ID:CGpW+st2
>>763
そうなの?
憂鬱本かなにかにコンストラクタで複雑な処理はやめたほうがいいって
書いてあったから信じてたよ。


768 :名前は開発中のものです。:2009/03/08(日) 11:20:16 ID:lUOcnlf/
使うほうが失敗したときに面倒でしょ、コンストラクタだと

769 :名前は開発中のものです。:2009/03/08(日) 11:49:19 ID:8uH2yrBU
例外処理を全面的に取り入れてるならコンストラクタで失敗してもおk
失敗したら絶対に例外を投げること
そうでなければダメ

770 :名前は開発中のものです。:2009/03/08(日) 13:15:29 ID:sz9LKWkI
>>767
言語仕様的にはまったく問題ない
>768が言ってるように、
その本には別の理由でやめたほうがいいって言ってるんだと思うよ

ただし、staticなインスタンスは例外で
この場合、mainが呼ばれる前のスタートアップルーチンで
インスタンスが生成されるのでコンストラクタでは
初期化以外のことをやるとまずい


771 :名前は開発中のものです。:2009/03/08(日) 15:28:40 ID:Os5GQobq
東方の新作が発表される度に自作のゲームとシステムが被っててヘコむ……

772 :名前は開発中のものです。:2009/03/08(日) 15:35:38 ID:26PtmX+G
>771
それを気にしてたら、世の中作品なんて生まれない。
大丈夫、何ら問題ない。思う存分やれ。キミは盗作じゃない。

……自分のやりたいことを、他の人が作ったのでそれで満足しちゃったなら知らんw
(こっちもよくある話だけどな!)

773 :名前は開発中のものです。:2009/03/08(日) 17:25:05 ID:tah76f/h
弾幕シューは東方だけじゃないしね

774 :761:2009/03/08(日) 18:12:09 ID:pjH2xL1q
>>770
俺も>>767のように憂鬱本で読んで信じてきたんだけど、後学のために教えて欲しい。
まず憂鬱本にはこんな風に書いてある。
・コンストラクタやデストラクタはあまり難しい処理をするのは考え物。
 1・返り値を持つことが出来ない。
 2・インスタンスが完全な状態ではない。
 3・外部変数としてクラスインスタンスがある場合、コンストラクタやデストラクタはmain()の走る前、後になる。

>>770さんが言っているのは3の場合で、この本によると
「ポインタとして宣言しておきmain()が走った後でその中でnewする」
という解決策が書いてある。
で、問題の2にははっきりと
「コンストラクタ、デストラクタが走っているときは、インスタンスは完全な状態ではない」
と書いてあり、
「実は内部的にはそのインスタンスの使用するメモリの取得/解放とそれに伴う複雑な作業も行っている」
「インスタンス自体がまだ生成途中であり、内部的にはまだ不安定な状態」
と書いてあります。
問題点は、
「このような状態で他のクラスのインスタンスのメンバ関数を読んだりすると巡り巡ってまだ生成途中の自分自身のメンバ関数が呼ばれるかもしれないから」
との事です。
C#なんかではコンストラクタでのメソッドの呼び出しなども保障されてますが、C++では言語使用的には保障されていない、と解釈したのですがここらへんどうなんでしょうか?

775 :名前は開発中のものです。:2009/03/08(日) 19:09:05 ID:CrTNgcou
この際、本家DXライブラリにDXライブラリ3Dを機能統合してしまっても良いんじゃないか?
今どき2Dだけじゃなぁ

776 :名前は開発中のものです。:2009/03/08(日) 19:25:34 ID:tHlNETTL
>>775
いや、意味が分らん。
碌にDirectXすら使えない人間が3Dに手をだしてどうしたいんだ?

むしろ、本家は本家であの程度でまとまってるからこそ良いライブラリだろ。
もっと色々とやりたかったら海外の3Dライブラリをあさればいい。高機能の多いぞ。
(まぁ、普通に日本語対応がメンドイけど。)

777 :名前は開発中のものです。:2009/03/08(日) 19:52:53 ID:CrTNgcou
っていうか、DXライブラリ3Dの開発を継続してほしいJEXさん

778 :名前は開発中のものです。:2009/03/08(日) 23:53:47 ID:Os5GQobq
>>772,773
弾幕毎に名前付けてるから、気を付けないとまんまになっちゃうんだよね

もう開き直っちゃおうかな……

779 :名前は開発中のものです。:2009/03/09(月) 00:24:37 ID:y+3gsDNg
どうせやるなら「白い弾幕くん」くらい自由度上げてみたらどうだ

780 :名前は開発中のものです。:2009/03/09(月) 05:38:20 ID:xYWyf4vJ
縦弾幕だったらどうやったって東方っぽいって言われるのがオチだから、
変なこと気にせず好きにやっちゃえYO!

781 :名前は開発中のものです。:2009/03/09(月) 13:06:42 ID:Ge4atQjd
東方のオマージュである、と明記しちゃえば変な因縁はつけられなくなると思う

782 :名前は開発中のものです。:2009/03/09(月) 13:28:18 ID:1MIteGpr
自分で考えて実装した者に対して
なんという屈辱を。

783 :名前は開発中のものです。:2009/03/09(月) 14:58:21 ID:Yq7DJGmB
パクってないんなら堂々としてればいいじゃない
ここで愚痴る前にちゃっちゃと完成させて
もう東方に先を越されないようにすればいいじゃない

784 :名前は開発中のものです。:2009/03/09(月) 15:06:44 ID:mr6tRDyA
先を越されたから愚痴ってるんだと思うがのw

785 :名前は開発中のものです。:2009/03/09(月) 15:12:00 ID:anLE8kz6
新しいの出るごとに被るというと
低速移動時に敵を貫通するとかボム使うとパワーが減るとかその辺りか?

786 :名前は開発中のものです。:2009/03/09(月) 15:54:45 ID:z4EGzSSU
別に愚痴のつもりじゃありませんでした
こうやって悩むのもゲーム制作の楽しさの一つなので……
気分を害されたのならすいません

>>785
点レートアイテムとか、特殊アイテムを取るとボーナス敵が出る点が……

787 :名前は開発中のものです。:2009/03/09(月) 17:01:47 ID:GzA1DnX1
どんなシューティングでもお前。。。

788 :名前は開発中のものです。:2009/03/09(月) 18:04:17 ID:dWRPooR0
Q.○○のパクリですか?


A1.はい、参考にしました。
 →盗作イクナイ! 俺の好きな○○を汚すな! ○○の公式サイトのBBSに通報(?)書き込み

A2.いいえ、オリジナルです。似ているのは偶然でしょう。
 →嘘を言うな、正直に言えよ

A3.いいえ、○○ではなく△△のパクりです。
 →そんなん知らねーよ! △△も○○のパクりだな!


実際にあるから困る。


789 :名前は開発中のものです。:2009/03/09(月) 18:28:11 ID:aHHsyNV0
結論:気にせず作れ
作ることにも価値がある

790 :名前は開発中のものです。:2009/03/09(月) 18:40:02 ID:6kYj4gTE
>>788 どっちかと言うと、この手の奴で、実際にパックたりしてなかったら、
何も答えないのがベスト。ただただ、事務的返しで流すべし。

あと、>>786みたいのは 東方以前からあるのばっかじゃねぇかよwww
それこそ、ファミコン全盛の時代(のアーケード)から・・・・
「今更それを先を越されたとかwww」
と言われるのが落ちじゃね?

791 :名前は開発中のものです。:2009/03/09(月) 18:51:35 ID:z4EGzSSU
んー、今更だけど自分で気にしすぎだった気がしてきた
前作が東方をリスペクトしたものだったので、今回も素直に断り書きを入れてみます

792 :名前は開発中のものです。:2009/03/09(月) 19:02:29 ID:dWRPooR0
パロディにまで昇華させてしまうという手もあるな。

793 :名前は開発中のものです。:2009/03/09(月) 21:33:00 ID:Zw6a9bk0
http://siv.creation.googlepages.com/home
知ってるとは思うがこれにはずっと期待してる


794 :名前は開発中のものです。:2009/03/09(月) 22:34:04 ID:GzA1DnX1
押しっぱをできなくするようにしたいけど
char a[256]
GetHitKeyStateAll(char *a)
つかうとうまくできねぇ。。

ポインタをctrcmpやるのはおかしいの?
それとも配列に入ってるのがおかしいの?
俺の頭がおかしいの?

795 :名前は開発中のものです。:2009/03/09(月) 23:19:34 ID:2qC8QqlY
>>774
遅レスだがコンストラクタについて幾つか書きます。
さすがに長文書いてコメントが無いのは可哀想だったから。

昔の言語仕様ではコンストラクタではインスタンスの生成途中であるから複雑な処理を書かないようにしていた。これは慣習・慣例の部類の話。
コンパイラの亜種が多くて、C++の仕様外の範疇での動作はどのようになっているのか分からない時代だったからという背景もある。

自分はコンストラクタに初期化処理を噛ませる横着な書き方をしていたときに先輩に指摘された事は、1,2,3以外にも、、、

・クラス設計者とクラス利用者は同じでない
⇒利用者がstaticで外部変数なインスタンスを生成するかもしれないから、
 mainよりも先に呼ばれる処理に複雑な記述を置くべきでない。
 つまり、利用者の立場になって明示的に初期化処理を宣言するべき。(手を抜くな)

・戻り値を持たない件に関して、例外処理を使うのは怠惰な手段である。
⇒try-catchを用いるのは、デバッグの最終手段である。(例外処理はネストできない為)
 例外処理は一般的にコンパイラの最適化の阻害となり遅くなる要因となる。(ジャンプテーブルを生成する為)
 つまり、保持値チェックにはassert使えというお話。
⇒メモリ確保に失敗する危険性をもっと認識するべき
 特定のハードウェアを対象にする場合、大概は独自のメモリアロケーター(dlmalloc等)を実装していることが多く、
 new失敗の可能性(インスタンス生成失敗)は大いにある。
とのことでした。

>問題点は、
>「このような状態で他のクラスのインスタンスのメンバ関数を読んだりすると巡り巡ってまだ生成途中の自分自身のメンバ関数が呼ばれるかもしれないから」
>との事です。
これには同意です。
だから「コンストラクタに記述するのはせいぜいメンバ変数に対して初期値の代入ぐらい」に留めている人が大半で自分もそうしています。

いや〜、バグの無いプログラムって難しいですね。

796 :名前は開発中のものです。:2009/03/09(月) 23:31:07 ID:2qC8QqlY
>>794
上手くできないってどういう意味?
char m_cKey[2][256]; //キーバッファ
とでもして
毎フレーム
void GetAllState(){
memcpy(m_cKey[1],m_cKey[0],256);
::GetHitKeyStateAll(m_cKey[0]);
}
を呼んで、
int GetKeyPress(int KeyCode){return m_cKey[0][KeyCode];}//キーが押されているかどうか
int GetKeyDown(int KeyCode){return (m_cKey[0][KeyCode] && !m_cKey[1][KeyCode]);}//キーが押された瞬間
int GetKeyUp(int KeyCode){return (!m_cKey[0][KeyCode] && m_cKey[1][KeyCode]);}//キーが離された瞬間
とでもすればおk
前フレームとの差分で押された瞬間と話された瞬間を検出するべさ

797 :名前は開発中のものです。:2009/03/09(月) 23:31:59 ID:6kYj4gTE
>>794 エスパーじゃないんで、
何をやって何ができないのかすら分らん。
とりあえず、×ctrcmp =>○strcmpだと過程しても検討範囲外。
ポインタの使い方とか、関数の使い方は大丈夫だと仮定してもだ・・・・。

そもそも、そのchar a[]が何を入れるか理解してるかい?
そいつらに入るのは、あるキーが押されてるかどうかのon offフラグであって、
押されてるキーがchar型として'o'みたいに入るわけじゃないぞ。

押しっぱなしは、基本的には、

char NowKey[256];
char OldKey[256];
// ....somewhere to initilaize Nowkey[] and OldKey[], to 0.

GetHitKeyStateAll( NowKey );//Now get putting on key
if( NowKey[ KEY_INPUT_Z ] == 1 )
{ if( OldKey[KEY_INPUT_Z] != 1 )
{ PutOnFUNCTION(); // only not on putting Z_KEY.
OldKey[KEY_INPUT_Z]=1;
}
//There is No doing on putting Z_KEY.
}
else
{
OldKey[KEY_INPUT_Z]= 0 ; //No to put Z_KEY, initialize OldKey[] to 0.
}

な感じに書く。

798 :名前は開発中のものです。:2009/03/09(月) 23:42:23 ID:YtHLVg0L
推しっぱをできないようにするなんて
int pushOK = 0;
とか用意しといて

if (a[チェックしたいキー] && pushOK) {押したときの処理}
if (!a[チェックしたいキー]) pushOK = 1;

とかやればいいじゃない
(※厳密な文法に突っ込むのなしね、あと変数名が良くないことにもね)

799 :名前は開発中のものです。:2009/03/09(月) 23:49:28 ID:GzA1DnX1
あぁ。詳しくなくてすまん。ありがとう。
でも、なんとか、動作はしたぜ。

800 :名前は開発中のものです。:2009/03/10(火) 00:11:41 ID:Y5ijcxK4
LoadSoftImage()でPNG-8のパレットが取得も設定もできん…。
パレットはBMPしか有効じゃないんか。
透過色設定とパレット変更を同時にしようと思うと、PNG-8がベストな選択だったんだけど、
さてどうするべか……。


801 :名前は開発中のものです。:2009/03/10(火) 00:43:20 ID:liOB0hIm
どっかの時点でBMPに変換されるんだろうけど
その時点じゃまだなんだろうかね。

てかそんな命令あったのか……。

802 :名前は開発中のものです。:2009/03/10(火) 01:39:41 ID:Y5ijcxK4
PNGについてはlibpng使ってるっぽいからなぁ。
パレット変えられないのは困ったぜ。

803 :名前は開発中のものです。:2009/03/10(火) 02:42:45 ID:f5O5uX62
libpngって最近脆弱性が発見されたよね

804 :名前は開発中のものです。:2009/03/10(火) 05:14:32 ID:Y5ijcxK4
パレットアニメーション諦めて、アルファブレンディングで代用できるんかな……。

例えば、パレットアニメーションで
void PatteGradation(int red,int green,int blue,float ratio)
{
int new_red,new_green,new_blue;
int* p = m_pPalette; //元のパレット配列[3*256]
for (int i=0;i<256;++i)
{
new_red = *p + (int)((red - *p)*ratio);
p++;
new_green = *p + (int)((green - *p)*ratio);
p++;
new_blue = *p + (int)((blue - *p)*ratio);
SetPaletteSoftImage(m_nSoftHandle,i,new_red,new_green,new_blue,0);
}
}
という感じで指定の色(red,green,blue)にratioの比(0〜1.0)で近づくエフェクトを考えているんですが、
これと同じ機能をブレンドモードを変更することで代用可です?
上手い演算具合が見つからない。

805 :名前は開発中のものです。:2009/03/10(火) 05:17:44 ID:Y5ijcxK4
あ、一個p++抜けてた。
でも、伝えたいことは伝わったはず。

806 :名前は開発中のものです。:2009/03/10(火) 05:52:02 ID:6T+yw6I/
フェードイン?

807 :名前は開発中のものです。:2009/03/10(火) 06:29:38 ID:Y5ijcxK4
そうですね、指定色へのフェードイン・フェードアウトという感じです。
SetDrawBright()では黒フェードが出来ますが、それの多色化&抜き色対応版です。

808 :名前は開発中のものです。:2009/03/10(火) 09:58:02 ID:1/mzBUbU
2パターンだけ作って重ねてアルファを変えていくのが効率いいんじゃないかな

809 :名前は開発中のものです。:2009/03/10(火) 11:39:59 ID:xhsEfov4
>>793
ゲームパッドがX-BOX専用コントローラーしか使えないとか論外すぎる。

810 :名前は開発中のものです。:2009/03/10(火) 15:29:37 ID:AMym+srg
>>809 
 つ http://www.4gamer.net/games/027/G002741/20090227065/

811 :名前は開発中のものです。:2009/03/10(火) 16:10:09 ID:qoncgAvF
使う側ならともかく、作って配布する側ならそれは解決にならんでしょ。
まあ自分で対応のパッド追加できると思うけどな。

812 :名前は開発中のものです。:2009/03/10(火) 16:12:21 ID:xhsEfov4
>>810
いや、そういう問題では・・

813 :名前は開発中のものです。:2009/03/10(火) 21:25:09 ID:LXtgug0h
>>809
やっぱり白黒2値のパターンが別途居るようですよね……。
PNG使ってるのに、わざわざマスク画像が必要なのがめんどくさいと敬遠しているんですよ。

814 :名前は開発中のものです。:2009/03/11(水) 00:49:09 ID:SDHRypL0
あれGraphLockって関数がいつのまにか消えたのか、と思って検索したら出た

http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1044
>GraphLock は現在のPC環境に適していないので非公開関数にすることにしました

これってどういう意味なの?非対応な環境が多いの?詳しい人教えて

一応コピペ
宣言       int GraphLock( int GrHandle , int *PitchBuf , void **DataPointBuf ) ;
概略      グラフィックメモリ領域のロック
引数       GrHandle   : ロックするグラフィックのハンドル(または画面の識別子)
PitchBuf   : ロックするグラフィックの1ライン辺りのバイト数を保存する変数へのポインタ
DataPointBuf :グラフィックデータのあるメモリへのアドレスを保存するポインタへのポインタ
戻り値     0:成功  −1:エラー発生

宣言    int GraphUnLock( int GrHandle ) ;
概略    グラフィックメモリ領域のロック解除
引数    GrHandle : ロックしたグラフィックのハンドル(または画面の識別子)
戻り値   0:成功  −1:エラー発生

815 :名前は開発中のものです。:2009/03/11(水) 12:48:22 ID:4qWzS982
>>814
対応してないとかじゃなくて、単に古くて多用されない技術だからじゃないかと無責任に予想

816 :名前は開発中のものです。:2009/03/11(水) 23:25:34 ID:tpGaQ5tp
使えたら部分的なぼかしとか波紋とか屈折描画とかできて表現の幅ひろがりまくりんぐなのに・・・

817 :名前は開発中のものです。:2009/03/11(水) 23:28:32 ID:jT1zwAC2
シェーダサポートフラグですね。わかります。

818 :名前は開発中のものです。:2009/03/12(木) 00:06:32 ID:5lgaab4l
>>816
いいなぁそういうの使ってみたい。

819 :名前は開発中のものです。:2009/03/12(木) 14:35:44 ID:hH9qj7K7
歪みはテクスチャに背景を描画→2Dポリゴンで挑戦中

820 :名前は開発中のものです。:2009/03/12(木) 23:20:03 ID:TV/Jr7F7
>>814からの流れに関連してるかわからないけど、
ちょっと前に気になった事があるので質問させてください
LoadGraph系統以外で作成したグラフィックハンドルから
グラフィックデータのメモリを参照し、編集する事ってできないんしょうか?
SoftImage系の関数で同じような事はできるみたいだけど、
これは画像ファイルから取得したもののみですよね。。



821 :名前は開発中のものです。:2009/03/13(金) 00:27:53 ID:CMJVUsQ6
>>820
MakeXXXColorSoftImageじゃあかんの?


822 :名前は開発中のものです。:2009/03/13(金) 00:43:55 ID:GbqqCgmR
Easy3D正式版きてるな

823 :名前は開発中のものです。:2009/03/13(金) 01:09:59 ID:H+Qfngp2
>>820
ありがとう、今気付いたんだけど先に用途を書くべきでした。
例えば>>816の波紋を実現しようと考えた時、
「このエフェクトをかける前までに描画された画面から
 エフェクトをかけたい矩形のグラフィックを取得して、
 これを元にピクセルを書き換える」
という処理を考えてみたんですが、GetPixelは重いようなので、
なら直接メモリを参照できないかと思った次第です。

MakeXXXColorSoftImageで作成するのはソフトグラフィックハンドルなので、
ここを描画先にしたりはできませんよね。。?

824 :名前は開発中のものです。:2009/03/13(金) 01:19:10 ID:H+Qfngp2
>>823
訂正:ソフトグラフィックハンドル->ソフトイメージハンドル
あと「描画先」と書いたのは、「DrawGraph等で描画できる描画先」という意味です。
直接グラフィックハンドルをソフトイメージハンドルに変換できる方法があればよいのですが。
そもそもこの考え方自体がアホなんでしょうか。。。

825 :名前は開発中のものです。:2009/03/13(金) 03:43:56 ID:CMJVUsQ6
>>824
画面全体にエフェクトを掛けたりするのに有ると便利だが、ちょっと調べてみたが出来ないっぽいね。

そもそもLoadGraphやMakeGraphはVRAMに転送した時点でPC環境に依った画像フォーマットに変換されちゃうから、
そこからソフトイメージハンドルを生成するとなると、コンバーター(デコーダ相当)が必要になる。
DXライブラリの作者としては手間が掛かるから、要望が無い限り実装を見送っていると予想している。
優しい作者さんなんで、要望送ってみてはどうかな?

現状で対応するとなると、どうしても遅くなるが、
画面サイズと同じ大きさにMakeGraphした裏画面領域をSetDrawScreenして、
一連の画像を転送し、GetPixcelとDrawPixcelするのがベストな選択かねぇ。

SaveDrawScreenを使ってbmp保存して、そこからSoftImageを作るという最終手段もある。(とても遅い)

826 :名前は開発中のものです。:2009/03/13(金) 03:50:25 ID:CMJVUsQ6
>>823
ああ。書いてておもったが、SaveDrawScreenがあるから、デコーダ処理は既に内部には出来てるのか。
作者に要望だすと、すぐに実装してくれると思うよ。

827 :名前は開発中のものです。:2009/03/13(金) 04:00:17 ID:HX55tf54
解説 グラフィックデータのあるメモリ領域には『ロック』をしなくては アクセスする事が出来ません。
細かい事は抜きにしてとにかくWindows 環境ではメモリの管理が厳重なので malloc関数 などで確保したメモリ 領域のように簡単にはアクセスは出来ないようになっています。だから 『ロック』という作業を行い直接アクセスできるようにします。
 グフィック領域に直接アクセスする利点はDrawPixel や GetPixel 関数を使用するよりも処理が速い、等があります。
 ロックの説明をはじめる前に注意なのですが、ロックを行った場合は 直接アクセスが終り次第直ちにロックを解除してください。
ロックを している最中にデバッグモードなどのブレークポイントを使ってプロ グラムを止めるとハングアップするので注意してください。
ロックを すると 『GraphUnLock』関数を使用してロックを解除しない限り DrawLineをはじめすべての描画関数が使用不可能になるので注意してください。
 では話を元に戻します。
 ロックをするにはまずロックをしたいグラフィックハンドル、または DX_SCREEN_FRONT , DX_SCREEN_BACK 識別子を使って画面をロックする 事も出来ます。
 ロックが完了すると関数は PitchBuf に指定したポインタにロック したグラフィック領域の1ライン辺りのバイト数と、DataPointBuf で 指定したポインタにロックしたグラフィックへのアドレスが代入されます。
 こうしてロックしたグラフィック領域にはめでたく直接アクセスが 出来るようになります。まず希望の座標(点)にアクセスするには 以下の式を用います

  (グラフィック領域の先頭アドレス) +
  (X座標値 × (グラフィックのカラービット数 ÷ 8)) +
  (Y座標値 × 1ライン辺りのバイト数)

  = 希望の座標のポインタ

828 :名前は開発中のものです。:2009/03/13(金) 04:02:17 ID:HX55tf54
 この中の『グラフィック領域の先頭アドレス』と言うのは DataPointBuf から取得できる値、『1ライン辺りのバイト数』は PitchBuf から取得できる値
『グラフィックのカラービット数は』SetGraphMode関数 の 引数 ColorBitNum の値(デフォルトでは16です)となります。

 次に1ドット辺りのビット数はカラービット数と比例します、以下に カラービット数と一般のデータ型との比例関係を示します。
  8bitカラー     char 型と同サイズ
  16bitカラー    short 型と同サイズ
  32bitカラー    int 型と同サイズ
 もし16ビットカラーのグラフィックに1ドット分データのアクセスを するつもりで int 型変数で値を代入した場合は2ドット分描画してしまう ので注意してください。(アドレスの算出のときも同じです)
注 … グラフィックをロックする場合は SetUse3DFlag 関数で3D機能を使わない設定にしてからLoadGraph,MakeGraph等で作られたグラフィックでないとロックは失敗します。
例  128×128のグラフィックデータを作成し、座標( 24 , 11 )
  の点に色コード0を代入します。(16ビットカラー)
char *GraphData ;
short *DrawPoint ;
int Pitch , GHandle ;
// グラフィックの作成
GHandle = MakeGraph( 128 , 128 ) ;
// グラフィックのロック
GraphLock( GHandle , &Pitch , &GraphData ) ;
// 座標( 24 , 11 )のデータのアドレスを算出
DrawPoint = ( short * )( GraphData +
24 * ( 16 / 8 ) +
11 * Pitch ) ;
// 色コード0を代入します
*DrawPoint = 0 ;
// ロックを解除します
GraphUnLock( GHandle ) ;

829 :名前は開発中のものです。:2009/03/13(金) 04:05:06 ID:HX55tf54
サンプル 表画面をロックして直接アクセスで画面にグラデーションを描きます
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
int i , j , k ;
int Pitch ;
short *DrawPoint , Cr ;
char *GraphData ;
if( DxLib_Init() == -1 ){return -1;}
// 表画面をロックします
GraphLock( DX_SCREEN_FRONT , &Pitch , ( void ** )&GraphData ) ;
// 画面にグラデーションを描きます
for( i = 0 ; i < 480 ; i ++ )
{
for( j = 0 ; j < 640 ; j ++ )
{
// 色の値を取得
k = 255 * i / 480 ;
Cr = ( short )GetColor( k , k , k ) ;
// 描画する座標のポインタを計算
DrawPoint = ( short * )( GraphData + j * ( 16 / 8 ) + i * Pitch ) ;
// グラフィックデータへの直接アクセスで点を描画
*DrawPoint = Cr ;
}
}
// 表画面のロックを解除(『GraphUnLock』使用)
GraphUnLock( DX_SCREEN_FRONT ) ;
// キーの入力待ち
WaitKey() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}

830 :名前は開発中のものです。:2009/03/13(金) 04:17:46 ID:CMJVUsQ6
>>827
ありがとう。
GraphLock/Unlockなかなか便利だねぇ
ちょっと使ってみます
作者から非公開関数になった理由が知りたいとこだね

831 :名前は開発中のものです。:2009/03/13(金) 10:15:03 ID:H+Qfngp2
>>825-829
なるほど、そのためのGraphLock/UnLockだったのか。
あと非公開関数になっただけで使う事はできるんですね。
てっきり使用すらできなくなったものだとばかり思ってました。。。
とりあえずはこれで出来そうなので、デコード処理の要望の方は見送ろうかと思います。
お二方とも、ありがとうございました。

832 :名前は開発中のものです。:2009/03/15(日) 09:43:05 ID:uRILwR6e
グラフィックハンドルの復元問題ってどうしています?
フルスクリーン<->ウィンドウ切り替え時にだけ発生するならいざ知らず、
フルスクリーン時にフォーカスロストでも発生するから絶対に対策が必要ですよね。

ファイルから復元できるものは別にいいのですが、
困難なのが、MakeGraphやCreateGraphFromMemで作成した画像の自前復元です。
これらハンドルが初期作成状態から書き換えがされている場合、
(GetDrawScreenGraphを使った時や描画可能な仮画面としている場合)には、
画像を元の状態に戻すのってとても困難ですよね?

SetRestoreGraphCallbackが呼ばれる時には既に失われている状態だし、
正直お手上げ状態です。
何か良い方法があったら教えてください。

833 :名前は開発中のものです。:2009/03/15(日) 11:01:39 ID:jppbXP7e
readme.txt

「切り替えなどを行わないでください」

834 :名前は開発中のものです。:2009/03/15(日) 11:45:37 ID:FC5hsyk7
とはいってもユーザーの意図しないところでノートンなんかは自動で行っちゃうしね。

SPY++してみたら、WM_DISPLAYCHANGEもしくはWM_ACTIVATEAPPがDirect3Dオブジェクト解放前に呼び出されてるみたいだから、
このタイミングで保存処理を書いてみようと思う。上手くいくかどうか分からんけど。

835 :名前は開発中のものです。:2009/03/15(日) 12:40:49 ID:Y2Hs7QZb
俺は良い方法を思いつかなかったから、
グラフィック読み込む前に「これを読み込む」ってフラグを立てておき、
全てのグラフィックの中から、そのフラグが立ってるヤツだけを読み込むような処理を作っておき、
実際に読み込む時や、画面復帰した時にその処理を呼ぶようにしてる。

初期作成状態から書き換えをするような事はしてないけど、
するのならそれもフラグ管理する、くらいしか思いつかないな。

836 :名前は開発中のものです。:2009/03/15(日) 13:24:25 ID:vVFcLUyj
>>835
やっぱりなかなか良い方法が思いつかないですね。
簡単な命令(DrawLineやDrawBox)だけなら描画コマンドをバッファに記憶しておいて、
復号時に一気にコマンドを流せばいけるんですけどね。

837 :名前は開発中のものです。:2009/03/15(日) 21:04:33 ID:ddL6tdMh
どなたかDXライブラリ3Dをうpしていただけないでしょうか

838 :名前は開発中のものです。:2009/03/16(月) 01:54:00 ID:Ki5zFavX
開発終了しているのに何を期待しているんだ?
開発引き継ぐならあげるけど。。。

839 :832:2009/03/16(月) 04:54:34 ID:Ki5zFavX
WM_DISPLAYCHANGEを捕まえて、グラフィックハンドルの復元処理のコードを書いた。
同じような問題で困っている人がいたら、試してみてくれ。

検証が必要な箇所はまだあるとおもうが、とりあえず叩き台のコードをアップししとく。
http://www.dotup.org/uploda/www.dotup.org0835.zip.html
passは1234

840 :名前は開発中のものです。:2009/03/16(月) 10:24:23 ID:asZSe60i
>>838
引き継ぎって具体的に何すればいいのさ?
そんなに利用者いるようにも見えないが。

841 :名前は開発中のものです。:2009/03/16(月) 12:40:25 ID:g/x8PxLo
>>840
ライブラリを使う側じゃなくて作る側になってWebで公開するってこと。利用人数なんて関係ない。
現状、国内じゃまともに使える3Dライブラリが皆無だからね。

ただDXライブラリ3Dが使いたいだけならやめとけやめとけ。
変化の多い3D周りにおいて、開発終了したライブラリを今から使い始めるなんてのは得策じゃないよ。
素直にIrrlichtやORGEを使いなよ。

842 :名前は開発中のものです。:2009/03/19(木) 16:51:59 ID:AqnRYOAc
DXライブラリってDX_SCREEN_BACKとDX_SCREEN_FRONT以外にもバッファって作れないの?
画像ハンドルでもできるってことは知ってるんだけど、それだと遅くなりそうだしなんとかいい方法はないものか

843 :名前は開発中のものです。:2009/03/19(木) 18:28:29 ID:XdV/UiQK
それは何の目的でそんな事をしたいのかな?

844 :名前は開発中のものです。:2009/03/19(木) 18:36:46 ID:JGYzz3L5
画面のスクロールとかするときに、バッファ二つじゃ不便だからなぁ
俺も最近そのために物凄く無駄な苦労をした
DrawGraphとかの引数に描画先のバッファID(またはグラフィックハンドル)を指定するとか、
または予め描画先を指定する関数を呼び出しておくとか、
そういう方法で複数のバッファを使えたら楽でいいと思う
もしそれが俺の無知によるもので、本当は別に手段があるのならぜひ教えてほしい

845 :名前は開発中のものです。:2009/03/19(木) 19:07:33 ID:XdV/UiQK
いや多分無知なのは俺の方だと思うんだが、
なぜスクロールさせる事にバッファが二つじゃ足りないのか理解できない。

846 :名前は開発中のものです。:2009/03/19(木) 19:12:02 ID:JGYzz3L5
例えば、新しく作ったバッファにステージ全体の様子を描画する
表バッファには、プレイヤーを中心にした長方形を、
さっきのバッファから指定矩形部分描画を使ってコピーする

実際はもうちょっとスマートな方法だけど、簡単に言うとこういう方法

847 :名前は開発中のものです。:2009/03/19(木) 19:29:45 ID:ypsj1u3J
>>846
毎フレーム絶対同じ絵を表示するならそれでもいいけど
実際にはキャラ移動したりするしそれだと良くないんじゃない?

描画開始位置を変数で持っといて、
それを変化させながら表示すればスクロールできるんじゃ?

848 :名前は開発中のものです。:2009/03/19(木) 19:42:32 ID:y3/WLGqM
javaあたりでアクションゲームのスクロールの解説あったろ
あれみたほうがいんでね
もっと簡単にできるし

849 :名前は開発中のものです。:2009/03/19(木) 19:48:14 ID:XdV/UiQK
うん?
例えば暗闇の中で自分の周りだけ見えてる、みたいなイメージかな。

てか、裏画面にステージ全体を描画っていうけど
裏画面でも表示できる範囲以上の部分は意味なさないんじゃないのかな。
それとも画面はみ出した部分もちゃんと描画されてるの?

850 :名前は開発中のものです。:2009/03/19(木) 20:03:26 ID:ppqGMfjY
でっかいバッファにステージ全体を書いておいて、画面にはそこから一部を切り取ったものを映すってこと?

851 :名前は開発中のものです。:2009/03/19(木) 21:53:29 ID:JGYzz3L5
>>850
そういうこと

852 :名前は開発中のものです。:2009/03/19(木) 21:58:54 ID:yHINfbtT
それって何の意味があるの?

853 :名前は開発中のものです。:2009/03/19(木) 22:00:26 ID:JGYzz3L5
スクロールがとても楽

854 :名前は開発中のものです。:2009/03/19(木) 23:05:40 ID:y3/WLGqM
普通に>>847じゃあかんの?

855 :名前は開発中のものです。:2009/03/20(金) 00:14:40 ID:QmpzOTjS
何が楽なんだろう……?

全画面をバッファにおいておくっつーのなら結局メモリはそれだけ必要なんだから
そのまんま画像として持っていてもあまり変わらないと思うし
それを好きな位置に表示すればそれこそ楽だろうと思うし……。

それともあれか。
お絵かきツールみたいに、画面上でいろいろ書き換えたデータを
そのまんまメモリに重ね落として、それをまた画面上に呼び出すとか
するのだろうか。

でもステージって言ってるしなぁ……?

普通ならマップチップつかって必要なとこだけ表示するだけだから楽もクソもないと思うし……。

856 :名前は開発中のものです。:2009/03/20(金) 00:57:55 ID:Cl/zwFzS
新しいバッファよりもむしろマルチスレッド使えるようにならんかな

857 :名前は開発中のものです。:2009/03/20(金) 01:19:57 ID:Yr6iBMqg
詳しいこと全然知らないんだけど、
DXlibではマルチスレッドは使えないの?

858 :名前は開発中のものです。:2009/03/20(金) 02:05:01 ID:+9WRbXfH
>>855
リアルタイムで背景が拡縮したり回転したり端がループする場合は
一度メモリに書き込んでおいたほうが楽なんじゃないかな

859 :名前は開発中のものです。:2009/03/20(金) 02:35:45 ID:isrQkVya
画像自体は既にメモリへ読み込みさせてるだろうし、計算は軽いよ
マップチップじゃなくてもSetDrawAreaで領域も最小限で済ませるし

860 :名前は開発中のものです。:2009/03/20(金) 05:32:02 ID:pPzyeiIl
ははは。ワールドマップのような広大なマップに対しても同様の手法をとるのか見ものだな

861 :名前は開発中のものです。:2009/03/20(金) 05:40:13 ID:pPzyeiIl
ちなみに、
>>842
SetDrawValidGraphCreateFlag使えば作れる。
注意点も有るが、それは自分で調べてくれ。

862 :名前は開発中のものです。:2009/03/20(金) 05:49:13 ID:pPzyeiIl
非常に亀レスだが、
>>757
>>758
俺が確認したところDXライブラリ ver2.25bには、
// フォグを有効にするかどうかを設定する( TRUE:有効 FALSE:無効 )
SetFogEnable( int Flag ) ;
// フォグモードを設定する
SetFogMode( int Mode /* DX_FOGMODE_NONE 等 */ ) ;
// フォグカラーを変更する
SetFogColor( int r, int g, int b, int a ) ;
// フォグが始まる距離と終了する距離を設定する( 0.0f 〜 1.0f )
SetFogStartEnd( float start, float end ) ;
// フォグの密度を設定する( 0.0f 〜 1.0f )
SetFogDensity( float density )
が有る。

863 :名前は開発中のものです。:2009/03/20(金) 07:38:27 ID:Cl/zwFzS
DXライブラリで3DやってもカメラとかZバッファどうすんだとかいろいろ問題あるんじゃないのか

864 :名前は開発中のものです。:2009/03/20(金) 07:43:26 ID:pPzyeiIl
カメラ周りは平行透視固定みたいだね
Zバッファ周りは一通りある
詳しくはDxLib.h見れ

865 :名前は開発中のものです。:2009/03/20(金) 11:47:58 ID:Nbh1dO4L
>>862
まじかー!

よーしパパobjファイル読み込んじゃうぞー

866 :名前は開発中のものです。:2009/03/20(金) 17:30:45 ID:3g2siCwF
そーいえば昔、>849みたいなことをやろうとしたものの
結局やり方が分からなくて諦めたことがあったなあ。

どうするのがスマートだったんだろう、と
コーヒー片手にリファレンスを読みなおす。



今は雑巾を片手に。

867 :名前は開発中のものです。:2009/03/20(金) 17:42:15 ID:s8vfHhBo


868 :名前は開発中のものです。:2009/03/20(金) 19:41:01 ID:m12b5RoS
そこで落とす必要があるのかw

869 :名前は開発中のものです。:2009/03/20(金) 20:39:51 ID:2ug+O/uj
ベランダで夕日を眺めながらブランデーでも飲んでたんじゃね?

870 :名前は開発中のものです。:2009/03/20(金) 23:14:17 ID:NDbJHQ4w
マップチップの表示にメモリ・速度的にどちらも有利な磐石な方法ってのはないんだよね
毎回マップ画面を生成する必要があるのか無いのかによっても分かれるし、
生成後に加工する必要の有無によっても手法が変わってくる。


871 :名前は開発中のものです。:2009/03/21(土) 02:35:14 ID:0o7dehg/
PCならメモリたくさんあるんだしマップチップすら作らなくてもいいような時代

872 :名前は開発中のものです。:2009/03/21(土) 02:56:48 ID:B0u9yEZ5
当たり判定とかもピクセル単位でやんの?

873 :名前は開発中のものです。:2009/03/21(土) 04:12:19 ID:0o7dehg/
できなくはないよね、10000*10000でも12.5Mbだし
セルオートマトンの砂シム作ったときそれでやったよ、まあそんときは800*800だったけど

ところでみんな2Dゲーム作るとき座標関係の変数ってint使ってるの?
自分は三角関数使ったりするから基本floatかdoubleなんだけど、今時のPCなら問題ないよね?
プログラム板のスレとか見ると「浮動小数点なんて遅すぎて使えねー」なんて書き込みが2002年にあったりする
ゲームつくり初めの頃は固定小数点とか聞きかじりでやったりしてたけどやっぱメンドいわ
そろそろ2Dゲームならどんな風に作っても快適な時代になったよね


874 :名前は開発中のものです。:2009/03/21(土) 05:15:05 ID:r0h/Cj1q
2002年の段階なら当然の反応じゃねーかな。
ノートPCのことも考えると。


875 :名前は開発中のものです。:2009/03/21(土) 06:08:05 ID:niXBCPWw
>>873
とにかくメモリーを節約したい場合以外は、floatよりdoubleの方が一般だと思う。
(今時のCPUなら早いし、精度も高いし)
あと、どのくらいその計算をさせてるかにもよると思う。
正直、2Dゲームならよほど大量のデータを演算しまくらなきゃ、
大抵は表画関連の処理時間に肉薄する事もないだろうし。
(パーティクルを超豪華に大放出です!!さらにパーティクル同士が当り判定します!
 みたいな時は分らんが、それ以外は問題無いと思う。)

876 :名前は開発中のものです。:2009/03/21(土) 09:43:50 ID:pH6WTk/t
現状、2Dゲームで浮動小数点がネックになることはほとんどない。というか無い。
そもそもDXライブラリは内部的にはサーフェスを3Dで扱ってるし、その上でいまさら固定小数点を使っても、
速度差はスズメの涙である。(ボトルネックになる部分はもっと他にある)
計算コストを見直すのであれば、当り判定を工夫したりする方がよっぽど建設的と考えるが。

877 :名前は開発中のものです。:2009/03/21(土) 09:46:34 ID:i6opoU57
昔は、float じゃなければ並列化が効かなかったんだよ。
doubleはどうあがいても高速化できないが、floatは腕次第でフルチューン可能だった。

そんな時代もあったのさ。

878 :名前は開発中のものです。:2009/03/23(月) 00:21:46 ID:siDC6L3P
>>875
DXライブラリをデフォルトの状態で使うと doubeを使っても精度が float並になるよ。
つまり余計にメモリを食うだけってことに。


879 :名前は開発中のものです。:2009/03/23(月) 03:58:43 ID:tZnRya7Q
>>878
それ、なんかプログラミングが間違ってるか、何かを誤解して理解してると思うが。
引数がfloatでも、それまでに計算したdoubleの精度は精度で有効に使い続けられるわけだし。

880 :名前は開発中のものです。:2009/03/23(月) 04:14:27 ID:nWy4AWIR
ベクトルと行列演算はD3DX系命令に任せたいから俺はfloat派だ。
double精度が必要な時が出たらdouble使うと思うが今のところ無いな。

881 :名前は開発中のものです。:2009/03/23(月) 22:35:05 ID:aaSedW4e
floatでずれが出ないなら殆ど好みでいいな

882 :名前は開発中のものです。:2009/03/24(火) 14:18:07 ID:e+xXpqJO
DXライブラリ3Dを配布してるサイトって無いのな
作者サイトも昨日までは普通にアクセスできたのに

883 :名前は開発中のものです。:2009/03/24(火) 14:20:54 ID:lCFkfKNF
>>882
3Dは DarkGDKを使え

884 :名前は開発中のものです。:2009/03/24(火) 17:18:13 ID:7G9V2r5l
>>882
3DがC言語初心者レベルで扱えるライブラリなんて設計上不可能だ。
DXライブラリ3Dが目指そうとしたのは砂上の楼閣だったのさ。
ORGEかIrrlicht使いなよ。

885 :882:2009/03/24(火) 20:15:11 ID:yDaxsp6N
ファイナルパックは持ってるよ
ヘルプが完全ではないから手探りだけど

886 :名前は開発中のものです。:2009/03/24(火) 20:42:07 ID:zZ6aOE8H
OpenGL用だが、3DはGLUTってのはどうだろう?

887 :名前は開発中のものです。:2009/03/25(水) 00:48:05 ID:Wl5oquoo
Siv3Dは本当に出るかわからないし
現状、DXライブラリ3Dが最強なんだが…

888 :名前は開発中のものです。:2009/03/25(水) 03:39:15 ID:vSTmLmbT
暇なんでDXライブラリ3Dみたいだけど2chネラー向きのDirectXライブラリつーのを
作ってみるわ。もちろんWindowsネイティブな。少しまちなー。

889 :名前は開発中のものです。:2009/03/25(水) 04:22:27 ID:fq+TvrVP
>>888
まずその名前はややこしいから変えて欲しい。
DirectX自体がライブラリだし、DXライブラリに名前が似てるし。
そして次、作ってみるって思ってから完成するまで膨大な時間が掛かるって事。
少し位じゃ完成しないからやるならもうちょっと長いスパンで考えた方が良いよ。

890 :名前は開発中のものです。:2009/03/25(水) 06:56:03 ID:YpvCJGXN
音ゲーみたいなの作りたいんだけど
音がズレてるような気がする。
int GetNowCount( void ) を使ってるんだけど
違うソフトとか触ったりしたら時間だけ経過されたりして描画されなくなる。

891 :名前は開発中のものです。:2009/03/25(水) 07:26:34 ID:kayJkkXd
これって.NETのユーザーコントロールって使えないの?
擬似ボタンとかならDXライブラリの関数で作れるが
スクロールバーとか高度なものだとちと無理臭いので気になったのだが。

892 :名前は開発中のものです。:2009/03/25(水) 08:21:26 ID:6OdRd8FO
>>890
非アクティブ状態でもタイマーは進むから、その辺考慮して設計すべし。

893 :名前は開発中のものです。:2009/03/25(水) 09:12:00 ID:wLtHAO2W
>>890
int SetAlwaysRunFlag( int Flag ) ;

int LoadPauseGraph( char *FileName ) ;
の関数を使えば、やりたい事は解決すると思う。

>>891
できない事はない。と思うが・・・・
.NETとDirectXは基本別物(.NETからManaged DirectX は動かせるにしても)
結局深い知識が必要だから、まぁ、普通の人はやらん方が無難。
スクロールバーぐらいなら自前した方が何かといいかと思う。

894 :名前は開発中のものです。:2009/03/25(水) 09:38:24 ID:YpvCJGXN
でけた thx

895 :名前は開発中のものです。:2009/03/25(水) 09:51:13 ID:6OdRd8FO
>>891
ちょっと調べたが、簡単には無理っぽいな

試したことが無いが、
SetUseGDIFlag(TRUE)すればコモンダイアログ等のGDIの画面上乗せ出来るようだ。
メインウィンドウのHWND取得して、CreateWindowEx等のAPIで自作したウィンドウハンドルを子ウィンドウとして登録。
メッセージプロシージャ等はAddMessageTakeOverWindowすればコールバックで戻ってくる模様。
.NETではないが、コモンコントロールを扱うのなら、こういう方法しかないとおもう。

ちなみに俺はスクロールバー・ボタン等については必要になった時に自作している。

896 :名前は開発中のものです。:2009/03/25(水) 12:24:54 ID:pfpspq1b
初心者向け3Dライブラリの条件は
C++でなく、C言語に対応していること
そして、コマンド数が多い事
単純であることだろう、よって複雑な事は出来なくても良い。

DarkGDKのコマンドリストをUPする。
コマンド名を見れば動作の予測ができるでしょう
http://www.csync.net/service/file/view.cgi?id=1237950965



897 :名前は開発中のものです。:2009/03/25(水) 19:28:42 ID:kayJkkXd
>>893 >>895
レスTHX。ListViewとかボタン(WINAPIと同じ挙動のやつ)を
作るとなるとかなり大変だからManaged DirectXの方でやることにするわ。



898 :名前は開発中のものです。:2009/03/25(水) 21:17:20 ID:uIkqnwHF
>>896
そもそも初心者が3Dに手を出すこと自体にかなり無理があると思うんだが。

899 :名前は開発中のものです。:2009/03/25(水) 22:14:20 ID:T2UmaOBx
Easy3Dは初心者に対しては本当に良く出来てる
HSPで3Dってのが個人的にはありえなかった

900 :名前は開発中のものです。:2009/03/26(木) 00:21:46 ID:XQqCSMDQ
そもそも初心者はゲームの作り方自体がわかんないと思うけどなあ

901 :名前は開発中のものです。:2009/03/26(木) 00:33:28 ID:GwVmRN1C
DXライブラリのおかげでなんとかゲームらしきものが作れてるレベルの俺としては
3Dものなんて夢のまた夢。

902 :名前は開発中のものです。:2009/03/26(木) 02:33:02 ID:ucYatCYF
3Dもそこまでハードルが高いとは思わないんだけどさ、
2Dと違って素材集めやモデリングが難しいんだよね。そして興味ない。
さらに3Dで作るゲームにアイデアがない。
最後に、3Dゲーって2Dゲーと違ってしょぼさが如実にあらわれるんだよね。

903 :名前は開発中のものです。:2009/03/26(木) 02:55:38 ID:1EzpJ+ry
ハードルなんてあるのか?軸が1個増えた程度にしか・・・。

904 :名前は開発中のものです。:2009/03/26(木) 03:28:44 ID:mGxo+8so
あたり判定やらモーションが難しいし面倒
衝突した場合、3Dの場合は食い込んで表示されて不自然だし
回転とかしたときのモデルの先端の座標やらがイメージしにくい

905 :名前は開発中のものです。:2009/03/26(木) 04:42:32 ID:ZAixtAoM
>>903は次世代コンシューマでメインPGで何作も作ってる程の凄腕のプログラマーに違いない。

906 :名前は開発中のものです。:2009/03/26(木) 06:38:45 ID:jGahXsLt
カメラを意識しないようなゲームなら、ホントに軸が1個増えただけだと思うよ
計算が複雑になったり、グラフィックに掛ける手間が増えるから
初心者は2Dでゲーム製作に慣れてからの方がいいとは思うけど

907 :名前は開発中のものです。:2009/03/26(木) 06:44:13 ID:Ts2wEbx3
PRG作るときのキャラ表示って2次元のグラフィックを三次元空間に配置したほうが楽?
二次元のキャラが2マスのサイズあるので、
NPCの前に立つのと、後ろに立つので被さり表示順序を変えなきゃならん。

3Dならこんなのないだろうになぁ

908 :名前は開発中のものです。:2009/03/26(木) 07:38:35 ID:jGahXsLt
>>907
3Dでも基本的に同じだよ
奥行きの値で表示順をソートする必要がある

909 :名前は開発中のものです。:2009/03/26(木) 08:50:05 ID:k7PFsR0n
>>907
俺は描画オブジェクトにZ値を持たせ、描画順をstd::listで記憶して表示順序変えてるよ。
Z値が同じ値なら、Y値の設置底面(top+heihtした値)で比較し、ソートする。

たぶんこれが一番楽で一番確実。
毎フレームソートするのはバカらしいから、極力必要最低限の回数にするようにしてね。

910 :名前は開発中のものです。:2009/03/26(木) 09:47:36 ID:Ts2wEbx3
>>909
thx.
std::listってc++か・・

911 :名前は開発中のものです。:2009/03/26(木) 09:59:19 ID:k7PFsR0n
そうそう。これを機にSTL覚えなよ。
STLも万能ではないが、知っておくに越したこと無いね。
ちなみに、こういう並び替えが頻繁に行われるものはvectorやmapでもなく、list使うのが良い

912 :名前は開発中のものです。:2009/03/27(金) 07:03:04 ID:2mW8DqO1
オブジェクト指向のc++のが、
何人いるかわからないNPCにとっては有効?

913 :名前は開発中のものです。:2009/03/27(金) 08:48:18 ID:a/ry8/LD
有効。C++じゃなくても書けるが、Cで書くよりははるかに柔軟に書ける。
スプライトを扱う基底クラスを継承してNPCクラス作ればいい。

厳密に言うと何人居るかわからないのはSTLのvectorが基本。(俺ならlist使うけどな)
NPC挙動はデザインパターンでいうところのStateかとStrategy

914 :名前は開発中のものです。:2009/03/27(金) 22:11:00 ID:cVa1f6L8
3D版で、衝突したポリゴンから法線ベクトルの取得ってできる?

915 :名前は開発中のものです。:2009/03/27(金) 23:21:19 ID:8cy1rsqr
3Dのスレ立てて、そこで議論しれ

916 :名前は開発中のものです。:2009/03/28(土) 00:15:58 ID:av4pjJwK
俺は907じゃないけど。

今まで作ってきた2Dゲーでは画面表示の優先度が4段階くらいしかなくて
キャラの最大数も固定にして配列を利用して順番に表示していた。

次からはもうちっと一般的な組み方をするようにしようと、
listの使い方をいくつかのサイト巡って見てみたんだけど、どう使うんですか? これ。

要素を追加とか参照する方法はいいとして……。

例えばDXライブラリ使って表示するとしたら、最低限でも
「表示優先度」「グラフィックハンドル」「表示座標(X,Y)」
が必要なわけですが、このうち「表示優先度」をlistに追加していき、最終的にソート?

でも「表示優先度」だけソートされてもしょうがない。「グラフィックハンドル」とかと繋がってないと。
とするとlistの項目に「グラフィックハンドル」その他も組み込める?

それとも、表示優先度の段階ごとにlistを用意して、それぞれに追加していく?
でもこれだと3Dゲーみたいに優先度がどこまで段階わけされるかわからない場合に使えないし……。

917 :名前は開発中のものです。:2009/03/28(土) 00:32:49 ID:cy5L8nnk
その3つをまとめた構造体をつくって優先度をキーにソートすればいいんじゃないの?

918 :名前は開発中のものです。:2009/03/28(土) 02:01:13 ID:z1vkTGRC
listをどう使うかなんてこのスレに関係ないだろ。

919 :名前は開発中のものです。:2009/03/28(土) 02:05:01 ID:z1vkTGRC
……と自治っぽいことを書いておくと、何故か反発して親切な馬鹿が教えてくれるよ。

920 :名前は開発中のものです。:2009/03/28(土) 09:35:01 ID:8c8Vy+u+
>>916
クラスないしは構造体で「表示優先度」「グラフィックハンドル」「表示座標(X,Y)」などの情報をカプセル化して梱包する。
クラスには仮想関数でdraw()を持たせる。
この"クラスのポインタ"をstd::listとしてとあるImageListクラス(Singletonオブジェクト)が一律に保持し、優先度が変更されたタイミングでsortをして常に正しい描画順位になっているようにする。
そして、描画タイミング時(毎フレームに1回)に、drawを優先順位順になめるように実行すれば良い。
これで、簡易な描画システムの完成。システムと呼べるほどの出来ではないけどな。

俺の場合、さらにScreenクラス(独自の座標系とクリッピング領域を持つ)とノード型の親子関係で持たせることで柔軟に対応している。

921 :名前は開発中のものです。:2009/03/28(土) 09:41:07 ID:ypn63o+I
>>919 - >>920
ワロタ

922 :名前は開発中のものです。:2009/03/28(土) 12:58:40 ID:V/znOr52
高度な話してるところ悪いんだけど初歩的な質問をさせてくれ。
ここで聞けって言われたもんで。

メニュー画面とゲーム画面を往復する度にメモリ使用量が上がってくんだけど、
読み込んだものはゲーム画面終了直前にInitSoundMemとInitGraphで全て削除するようにしても
上昇量よりはるかに小さい分しか変わらないし、
じゃあ今度は画像の読み込みを全部削除してみたら(画面は真っ暗になるけど)きれいさっぱり解決したから
やっぱ画像関係に原因があるのはわかったんだけど、

本題
DXライブラリって画像関係で、読み込んだの以外に変なのを生成したりしてるんですか?

あとどうやらそのゲーム画面で初めて登場する画像が描写される度にもメモリ使用量がちょっと上がるみたい。
これも画面真っ暗にしたらきれいさっぱりいった。

923 :名前は開発中のものです。:2009/03/28(土) 13:40:42 ID:miSl0Len
>>879
代入なら精度は落ちないけど、計算すると精度は落ちるよ。
double同士の四則演算をすると DxLib_Init前と後で、精度が違うから
同じ計算をしても結果が異なることがある。

924 :名前は開発中のものです。:2009/03/28(土) 13:50:45 ID:8c8Vy+u+
>>923
何度読んでも俺には何言ってるのか分からん。
精度が違うって何言ってる・・・。

925 :名前は開発中のものです。:2009/03/28(土) 14:00:54 ID:miSl0Len
>>924
わかりにくくてすまん。
例を書いてみた。

double a = 0;

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
double v1 = 3.1415926535897931 + a;
ChangeWindowMode(TRUE);
if(DxLib_Init() < 0) return false;
double v2 = 3.1415926535897931 + a;
return 0;
}
v1と v2の値を比べてみてくれ。


926 :名前は開発中のものです。:2009/03/28(土) 14:04:24 ID:miSl0Len
>>925
あ、return falseはまずかった。
return 0の間違いってことで。

927 :名前は開発中のものです。:2009/03/28(土) 14:08:18 ID:8c8Vy+u+
あ。わざわざ例挙げてもらってすまん。良いたい事は分かった。
DXライブラリでDirect3D使う場合だとFpuPreserveしてるからdouble型の演算レジスタ弄ってるわけね。
俺3D機能使わずにDirectDrawの方で書いてるから気づかなかったわ。

928 :名前は開発中のものです。:2009/03/28(土) 14:48:40 ID:8c8Vy+u+
>>925,926
Direct3DのFPU関連の対処法についてDXライブラリのソース調べてみたら、
// FPUの精度を落とさない設定を使用するかどうかを設定する、DxLib_Init を呼び出す前のみ有効( TRUE:使用する(精度が落ちない) FALSE:使用しない(精度を落とす(デフォルト) )SetUseFPUPreserveFlag( int Flag );
を見つけたよ。
double型を使う場合はTRUEにしても良いかもね。(精度は上がるが速度が落ちるので好みに)

でも、俺はfloat派だから関係ないが〜。

929 :名前は開発中のものです。:2009/03/28(土) 15:03:24 ID:alJS1U5l
パンツってみんな脱いでるの?あとカップルいるけど警察に捕まったりしないの?

930 :名前は開発中のものです。:2009/03/28(土) 16:05:39 ID:8c8Vy+u+
>>922
メモリ使用量の上昇具合ってどんな感じ?
コードを晒してくれると原因が分かりやすいんだがな。

画面遷移時に使われなくなったハンドルについて
・イメージハンドルはDeleteGraphで個別に全て解放をしているか?
・フォントの再生成をしていないか?
を見直してみてくれ。
特にフォントは文字サーフェスをキャッシュしているから、DeleteFontToHandleしないとメモリが解放されない。
その上で、フォントの再生成をしてしまうとメモリ使用量がじょじょに増大する結果になるよ。

931 :名前は開発中のものです。:2009/03/28(土) 16:48:52 ID:ShTXh3pj
>>930

・メモリの上昇具合
メ=メニュー画面、ゲ=ゲーム画面
メ59M
ゲ108M
メ107M
ゲ112M
メ118M
ゲ124M
メ129M

・イメージハンドルはDeleteGraphで個別に全て解放をしているか?
さっき言ったとおり、Init〜で全部まとめて消去してる。

・フォントの再生成をしていないか?
よこわからないがフォント関係はいじらずデフォルト?の文字で単純に出力してるが、それでもアレ?
ていうかさっき言ったとおり画像を読み込むところだけ切り取ったら全部解決したので画像関係のアレだと思うんだが……

932 :名前は開発中のものです。:2009/03/28(土) 17:33:23 ID:feWgJMZK
切り取らずに、画像を読み込み終えたところでInit〜してみたらどうなるかな。

933 :名前は開発中のものです。:2009/03/28(土) 17:40:00 ID:8c8Vy+u+
>>931
>ていうかさっき言ったとおり画像を読み込むところだけ切り取ったら全部解決したので画像関係のアレだと思うんだが……
ちょっとこの文章の意味がわからんな。
画像を読み込むのを切り取っちゃったら画像が読み取れないんじゃないか?
それとも、状態変移での2度目に読み込みを飛ばすってこと?
でもその前にInitGraphしてるのなら、グラフィックハンドルは解放されて無効になってるはずだよ。(描画できないはず)

えっととりあえず言うと、画面遷移時にInitGraphで全部消しちゃうのはオススメできない。
使い終わったグラフィックハンドルについては面倒でも個別にDeleteGraphしてみるのが良い。(サウンドもDeleteSoundMemを使う)
俺の場合これで画面遷移時でもメモリ上昇は変わらないよ。

未だ問題あるようなら、同じグラフィックハンドルに画像を読み直す命令としてReloadGraphというのがあるので、これで上書き読み込みする手もある。
あと、DXライブラリでのメモリ使用量と数を確認する命令DxGetAllocSizeとDxGetAllocNumを使って、どのタイミングで発生するのかを確認するのも手。

フォントについてはCreateFontHandleしてないなら問題ないよ。

934 :名前は開発中のものです。:2009/03/28(土) 18:38:40 ID:feWgJMZK
>じゃあ今度は画像の読み込みを全部削除してみたら(画面は真っ暗になるけど)きれいさっぱり解決したから
>やっぱ画像関係に原因があるのはわかったんだけど、

って事でしょう。


>えっととりあえず言うと、画面遷移時にInitGraphで全部消しちゃうのはオススメできない。

これ、気になるので、よければその理由を教えて欲しい。

935 :名前は開発中のものです。:2009/03/28(土) 19:05:08 ID:ShTXh3pj
>>932 読み込んだ直後にInit〜やったけどダメだった。なので

>>933 Deleteでそれぞれやってみたけどやっぱダメだった……
あと、WaitTimerとかでところどころ止めながその隙にタスクマネージャで見る方法でもいいよね?
上昇のタイミングはもちろん画像読み込みの時で、問題なのはデリートの時に少ししか下がらないで、
あと各画像がそのゲーム画面で初めて表示されるときも微量ずつ謎の上昇……

ていうか普通はデリートすればあっさり上がるんだな……なんでデリートがちょっとしか効かないんだ。

936 :名前は開発中のものです。:2009/03/28(土) 19:43:04 ID:8c8Vy+u+
>>944
リソースの管理はなるべくプログラマが厳密にした方が良いって理由。
InitGraphだとMakeScreenやMakeGraphやCreateGraphFromSoftImageで作った画像も全部丸ごと削除されてしまうから。
DeleteGraphなら無効なハンドル渡したときに戻り値で-1返すし、どのハンドルが解放されたのかを明示的に指示した方が分かりやすい。
自分はグラフィックハンドル周りはクラスでカプセル化してデストラクタで必ずDeleteGraphして解放するようにしてる。

>>935
>あと各画像がそのゲーム画面で初めて表示されるときも微量ずつ謎の上昇……
これは正常な動作だよ。最初の表示1回目はメモリ確保される。

うーん。どっかでDXライブラリ以外の箇所でnew(malloc)したメモリをdelete(free)せずにメモリリークしてないかい?
MSVC環境なら_CrtSetDbgFlag()があるからチェックしてみて。

937 :名前は開発中のものです。:2009/03/28(土) 20:01:35 ID:ShTXh3pj
>>936 そうか最初の1回は上がって普通なのか。
あとメモリの動的確保ならやってない。画像関係の問題ってわかっててるし。
CrtSetDbgFlagって言うのをググってみたけどデバッグ環境が必要みたいだね。
そりゃ無理な話だ……

あまりしたくないんだけど、ゲーム画面のコードを晒せば原因判明するかな?

938 :名前は開発中のものです。:2009/03/28(土) 20:15:33 ID:8c8Vy+u+
Borland C++使ってるのなら_CRT関数は使えない。Microsoft Visual Studio専用関数だからね。
さすがに現状で、要因を探すのは難しいな。

939 :名前は開発中のものです。:2009/03/28(土) 21:42:26 ID:ShTXh3pj
それは……晒しても無駄って意味だよな。

940 :名前は開発中のものです。:2009/03/28(土) 21:46:24 ID:8c8Vy+u+
いや、発言だけじゃ原因が特定できないってこと。
コード出してくれればもちろん見るよ。

941 :名前は開発中のものです。:2009/03/28(土) 22:09:09 ID:ShTXh3pj
http://www1.axfc.net/uploader/He/so/210050
pass : dx
根っからの初心者ゆえ、稚拙かつわかりにくいけどお願いします。

942 :名前は開発中のものです。:2009/03/28(土) 22:18:26 ID:8c8Vy+u+
>>941
DLしてみたよ。想像以上のソースだったw

えっと、原因はLoadSoftImageに対して、DeleteGraphを使ってるところ。
DeleteSoftImageを使いましょう。

943 :名前は開発中のものです。:2009/03/28(土) 22:39:34 ID:ShTXh3pj
ちょ、ちょっと待っててね……そのまんま範囲内全置換しても強制終了する。原因究明中。

944 :名前は開発中のものです。:2009/03/28(土) 22:50:21 ID:JfTJy2mS
凄まじいソースだなww

945 :名前は開発中のものです。:2009/03/28(土) 22:58:12 ID:X3zs6AFo
前にもこんなソースを見たことがあるぞ

946 :名前は開発中のものです。:2009/03/28(土) 23:17:44 ID:ShTXh3pj
ID:8c8Vy+u+ありがとう! 100kぐらいずつしか上がらなくなった! 感謝感激雨霰、3か月悩み抜いた甲斐があったってもんですぜ。

>>945 晒したのは初めてだぜ。

あと、ソース長くてもミスが見つかりにくくなるぐらいなもんだよな、問題は……

947 :名前は開発中のものです。:2009/03/28(土) 23:23:41 ID:nBMPzKvQ
>>あと、ソース長くてもミスが見つかりにくくなるぐらいなもんだよな、問題は……
それが一番困ると思うぜ

948 :名前は開発中のものです。:2009/03/28(土) 23:27:14 ID:JfTJy2mS
分割オヌヌメ
れっつextern

949 :名前は開発中のものです。:2009/03/28(土) 23:29:47 ID:ShTXh3pj
ああそうか。externが原因の1つかもしれないと思ってできるだけ避けてたんだ。
だけど大丈夫なのか。じゃあ関数使いまくれるぜ。

950 :名前は開発中のものです。:2009/03/28(土) 23:30:56 ID:8c8Vy+u+
>>946
ういうい。どうもです。
コード晒すのは勇気いるけど、コードを隠すプログラマは例外なくダメプログラマに育つからね。
その点、コードを出したのはすばらしいと思うよ。3ヶ月悩んだものがコード出したら10分足らずで解決できたように早期解決できるし両得だ。

あと、デバッグ環境が無いみたいだけどVisual C++ 2008 Express Edition(無償)を使うと良いよ。
http://www.microsoft.com/japan/msdn/vstudio/Express/
デバッグが使えるのは大きいし、コンパイラの性能が良いから、Borland C++5.5よりも大体1.2倍ぐらいはプログラムが速くなるさ。

951 :名前は開発中のものです。:2009/03/28(土) 23:46:31 ID:ShTXh3pj
なんかSP1てついてるけどこれでいいんだな……やてみるぜ。ありがとう。

952 :名前は開発中のものです。:2009/03/29(日) 00:08:50 ID:wJL07IJT
>>951
そうそう。それでok
VS2008へのDXライブラリの組み込み方はDXライブラリ公式サイトに書いてあるよ。
http://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2008express.html

953 :名前は開発中のものです。:2009/03/29(日) 00:20:45 ID:IeRll+oU
>>945
おそらくそれはしょぼんのアクションだ。

954 :名前は開発中のものです。:2009/03/29(日) 00:33:04 ID:6OZkFx/C
>>953
ああ、それだわ
>>136-145 あたりでも話題になってるな

955 :名前は開発中のものです。:2009/03/29(日) 00:39:32 ID:wJL07IJT
>>953
すごいなこれ。
リファクタリングの腕がつくから試してみようかと思ったが、
さすがにマジックナンバーが多すぎてちょっと無理っぽいわ。

//自由な値
int xx[91];
double xd[11];
string xs[31];
とか無茶すぎるだろw

956 :名前は開発中のものです。:2009/03/29(日) 00:56:39 ID:8NyFLpVN
BCCdeveloperでは大丈夫だったのに
全部の関数で「〜で既に宣言されています」
って出る……何のためのヘッダだよ……

957 :名前は開発中のものです。:2009/03/29(日) 00:57:59 ID:8NyFLpVN
あ、ID変わってる。どうも、ショボン二世です。

958 :名前は開発中のものです。:2009/03/29(日) 01:00:10 ID:wJL07IJT
>>956
ヘッダの先頭に
#pragma once
と書く

959 :名前は開発中のものです。:2009/03/29(日) 01:04:35 ID:wJL07IJT
#pragma onceだとVCでしか使えないから、
正確にはインクルードガードをするのが良いんだけどね。(__HOGE_H__は自分のヘッダファイル名)

#ifndef __HOGE_H__
#define __HOGE_H__
(ヘッダ本文)
#endif // __HOGE_H__

ま、どうせVCしか使わないんだろうからどっちでも良いよ。

960 :名前は開発中のものです。:2009/03/29(日) 01:19:07 ID:4SqorqSC
3ヶ月解けなかったものを10分で解けちゃう人がいると聞いて飛んできたわけじゃないんですけど、
C++でメンバ関数ポインタって使ってもいいもんなんですかね。
goto思想のようなものでもお行儀のようなものでもいいんだけど、普通はどんなもんか教えてください。
ついさっきメンバ関数ポインタっぽいものがあったらスマートに書けるなーと思って検索したら発見しました。
もし具体例が必要なら提示しますので教えてください。

961 :名前は開発中のものです。:2009/03/29(日) 01:22:41 ID:8NyFLpVN
全く意味がわからない。・゚゚(ノД`)
今まで何を勘違いしたか知らないけどヘッダファイルに直接関数を書いてた。
BCCに帰りたくなったけど少しでも軽くするためにがんばります。
修行の旅に出ますありがとうございましたノシ

962 :名前は開発中のものです。:2009/03/29(日) 01:39:41 ID:wJL07IJT
>>960
staticなメンバ関数について関数ポインタをとるのなら文法的には合ってるが作法的にはよろしくないとは思う。
(クラスは設計者と利用者が異なる観点ではオーバーライドされる可能性があるという意味で。)

けれど仕様上、静的なコールバックを要求する場合(Windowsメッセージプロシージャ等)だと、
staticなメンバ関数を指定した方が読みやすいと俺は思う。
この場合、staticメンバ変数から、Singletonオブジェクトを参照してインスタンスを得る方法を自分は多用しています。

自分で設計するのであれば、C++なら関数ポインタを使わずに、インターフェースクラスから派生する手法だったり、
純仮想関数をオーバーライドする設計(いわゆるStrategyパターン)を使うかな。

ただ、タスクのようなごった煮の振る舞いをしたいのであれば関数ポインタを使うこともしばしばあります。

963 :名前は開発中のものです。:2009/03/29(日) 01:41:04 ID:wJL07IJT
×この場合、staticメンバ変数から、Singletonオブジェクトを参照してインスタンスを得る方法を自分は多用しています。
○この場合、staticメンバ関数内で、Singletonオブジェクトを参照してインスタンスを得る方法を自分は多用しています。

964 :名前は開発中のものです。:2009/03/29(日) 02:00:32 ID:4SqorqSC
>>962
staticではないメンバ関数ポインタでした。
個人製作だから、という言い訳の前提のもと、シングルトンデザパタとかも使わずアプリケーションの最初で1つ生成し、アプリケーションの最後で破棄されるっていうクラスの中なんですが、
staticなクラスにするのもいいのですが今回の話とは関係なさそうなので割愛します。

問題の箇所は、MyClassオブジェクトを生成したint main()から見て、あるMyClass.A()は特定の1度しか呼ばれず、あるMyClass.B()は1フレーム中で毎回呼ばれます。
そして、MyClass.B()はMyClass.C()やMyClass.D()やMyClass.E()のうちどれかを呼びます。
当然B()に呼ばれるC()やD()やE()も毎回呼ばれないと困るのですが、呼ぶ先のメソッドが変わっても困るのです。
そこで、例えばランダムにC()D()E()のどれか一つを呼ぶことを決定したいのですが、
フラグ等を使ってB()内で一度だけ決定するのもいいのですが、
A()で決定しメンバ関数ポインタに入れておき、後にB()で決定された先を読んでもらおうという感じです。
A()では同じような処理を複数するので一括しておきたいのと、C()D()E()のようなメソッドはさらに多くあるので
A()内でメンバ関数ポインタで管理した方がいいかなと思いました。
乱文ごめんなさい。

965 :名前は開発中のものです。:2009/03/29(日) 02:22:47 ID:wJL07IJT
>>964
言っていることをそのまま実装すると
staticでないメンバ変数の関数ポインタ(MyClass.B()〜C())を参照するとエラー出るよね。
「仮想関数のポインタが参照されました」というのが。

デザパタを使いたくないのであれば、方法は1つしかない。

メンバ関数のアドレスをthisポインタからのオフセットアドレス値から算出するという手段で、けっこう裏技。
かなりの裏技でC++に熟知してないと普通は使わない方法だね。
実装方法は
http://www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03057.html
このサイトの57章と58章に書いてあるよ。

966 :名前は開発中のものです。:2009/03/29(日) 03:00:28 ID:4SqorqSC
>>965
まさにそのサイトも見て実装しました。
そしてまさにその使い方の事を聞きたかったのです。分かりにくい説明でごめんなさい。

ただ参考になりました。ありがとうございました。
デザインパターンも勉強してみて試行錯誤してみたいと思います。

蛇足ですが、C++でゲーム作ると(staticな?)アプリケーションクラスを一つ作って、
int main()の中のメインループの中でアプリケーションクラスを呼び出すことから始まりますよね。
で、オブジェクト指向っぽく設計とか考えてやっても結局アプリケーションクラスの中でCの構造化プログラミングをしてるだけっぽくなっちゃってました。
今回もメンバ関数ポインタを呼ぶのも関数ポインタを使った構造化プログラミングっぽいです。。
他の人のソースを眺めてみると頻繁にインスタンスを生成したり破棄したりしてますが、
自分の書いたものはあまりせず、結局全部グローバル関数でも同じじゃん!みたいななっちゃいます。
一応継承とかも使ってみるも、ちょっとしたコードの再利用程度でしかなく、ポリモーフィズムなんて実現できないです。
まあ経験が足りないんでしょうね。。精進します。

967 :名前は開発中のものです。:2009/03/29(日) 03:09:57 ID:wJL07IJT
>>964のやりたい処理はこれでOKなハズ
サンプルソース書いたよ
http://www.dotup.org/uploda/www.dotup.org13651.cpp.html

968 :名前は開発中のものです。:2009/03/29(日) 03:21:31 ID:4SqorqSC
>>967
わざわざありがとうございます。
ソース見させていただきました。
ほぼ同じように実装しました。
実際にはポインタに入る関数はA()が決めるのですが同じですね。

969 :名前は開発中のものです。:2009/03/29(日) 03:22:49 ID:uaYHl2HP
>>960
普通につかって全く問題ない。Cとは表記が違うのだけ注意。
他のクラスには適用できないし、キャストも許可されないので、むしろCより安全に使える

>>964だとこんなかんじ

class Hoge {
public:
Hoge() : target(NULL) {}
typedef void (Hoge::*TargetType)(int param);
TargetType target;
void A() {
TargetType funcs[] = { &Hoge::C, &Hoge::D, &Hoge::E };
target = funcs[rand() % 3];
}
void B(int param) { (this->*target)(param);}
void C(int param) { printf("C called:%d", param);}
void D(int param) { printf("D called:%d", param);}
void E(int param) { printf("E called:%d", param);}
};

>>965
「メンバ関数ポインタ」について調べることをおすすめする

970 :名前は開発中のものです。:2009/03/29(日) 03:25:13 ID:uaYHl2HP
てか、965さんちゃんとわかってるんじゃん…

裏技でもなんでもないよってことで。

971 :名前は開発中のものです。:2009/03/29(日) 03:30:37 ID:wJL07IJT
>>966
おっと、書き込む前にリロードすればよかった。
デザパタは相当C++やJavaが相当手馴れた頃に初めて見てみると、目から鱗な考え方なんだ。
素人が下手に手を出しても意味が分からないまま終わっちゃう。
大規模アプリを作れるレベルになって設計と実装に悩みだした頃に読むと良いよ。
ゲーム製作に特に使うのはSingleton,Strategy,TemplateMethod,Facade辺り。次にAbstractFadtoryやObserver。後のはほとんど使わない。

オブジェクト指向がする必要の無い局面って結構あるから、
何が何でもオブジェクト指向にこだわって実装していくのも逆に生産性が下がるというのは966も体感していると思う。
クラスは拡張性と多様性を残しつつ、YAGNIの原則で最低限だけを実装していく。というのが一番の理想。これが中々難しいけどね。
自分は、時にベタのCで書くこともあって、C++じゃご法度なextern宣言も使ったりする。(理由はめんどくさいという一点で)
インスタンスの生成/破棄はなるべく少ない方がパフォーマンスはモチロン出るので、966の書くプログラムは良いコードだと思うけどね。

972 :名前は開発中のものです。:2009/03/29(日) 03:33:52 ID:uaYHl2HP
ちょっと補足。

同じようなオブジェクトの微妙な動作違い、なら、設計的には
インターフェースを継承してオーバライドしたほうがいい。

この手法は同一オブジェクト内でのステート処理にむいてる。
何度も呼ばれて判定のオーバーヘッドの影響が無視できないような場合には特に有効。

973 :名前は開発中のものです。:2009/03/29(日) 03:40:51 ID:wJL07IJT
>>970
もちろん知ってるさ。C/C++は20年選手に逝きそうなんだ……。
裏技扱いしたのは、理由があって、
多重継承をした仮想関数(純ではない)のアドレスを取得しようとして、thisポインタのサイズ(4byte)が変わる為に上手くアドレスが取れないことが以前にあった。(オフセット値がなぜかずれるためにアラインメント調整が必要になる)
という理由でコンパイラによっては非推奨な書き方だったりするんだ。
これはコンパイラのバグで、TurboC++ではダメだった記憶がある。
MSVCではたぶん大丈夫だが、一応使わないでおこうとしてた。

974 :名前は開発中のものです。:2009/03/29(日) 03:45:29 ID:wJL07IJT
ごめん。TurboC++だったか記憶にない。CodeWarriorだったかもしれん。
どちらにしても15年前ほど前の事だったからたぶん今では問題ないと思う。

975 :名前は開発中のものです。:2009/03/29(日) 03:45:43 ID:4SqorqSC
>>969
ふむふむ、全く問題ないのですね!
提示してくれたソースもよくわかるのですが、た…typedef…。
勉強不足のためなんとなくでしかわからないですがなんとなく分かった感じです。
こんな感じでもいいですかね?
class Hoge {
public:
void (Hoge::*pf)(int param);
void A(int x) {
if(x == 0) pf = &Hoge::C;
if(x == 1) pf = &Hoge::D;
if(x == 2) pf = &Hoge::E;
}
void B(int param) { (this->*pf)(param);}
void C(int param) { printf("C called:%d", param);}
void D(int param) { printf("D called:%d", param);}
void E(int param) { printf("E called:%d", param);}
};


int main(){

Hoge obj;
int i;
scanf("%d", &i);
obj.A(i);

obj.B(10);
return 0;
}

976 :名前は開発中のものです。:2009/03/29(日) 03:53:35 ID:uaYHl2HP
大先輩!失礼いたしました…

あー、コンパイラのバグ……。そういうのは一度ふむと使わなくなりがちですな(苦笑)

状態遷移系の処理の他だと、半自動のバインド処理の類を書くときとかに、
テンプレートと組み合わせてばりばり使ってたりします。

977 :名前は開発中のものです。:2009/03/29(日) 03:57:18 ID:uaYHl2HP
>>975
typedefは、宣言した複雑な型をシンプルに表記できて、
書き方覚えるととてもすっきりするので、時間あったら勉強してみてください

表記はそれで特に問題はないですが、その条件判定なら
switch つかったほうがいいと思いますです。

978 :名前は開発中のものです。:2009/03/29(日) 04:13:27 ID:4SqorqSC
なんという頼もしいスレ…
起きててよかった。
勉強してきます=3

979 :名前は開発中のものです。:2009/03/29(日) 07:10:28 ID:wuoKvdm5
まーたDXライブラリと関係ない話して。
初心者相手に技術自慢したいならc++関係のスレに行けばいいのに。
そこでは相手にもされない程度なのか?



DXライブラリ

980 :名前は開発中のものです。:2009/03/29(日) 07:26:38 ID:vMEVjIQX
それだけのベテランがDXライブラリを使ってる(のだろう)事が驚き。

俺はCについてはド素人同然なので、いろいろ教えてもらえるのは助かる。
確かにスレ違いではあるんだが、DXライブラリを使ってること前提で
話をしたい場合もあるし。

981 :名前は開発中のものです。:2009/03/29(日) 10:08:36 ID:BGS9yVjy
>>980
趣味でゲーム作ってるのが長い人には、Cの書き方でパパーッと書き上げる事もできるし、
(Windows95の頃から始めたような人なら短いものならOOじゃない方がある程度の大きさでも楽だったりするしね。)
3Dに手出す(主にデータ的な部分)のが面倒な人には、
余計なモンついてなくて2Dに特化してるのに、 変な癖が少ないから使いやすい。
あと、最初からゲームパッドとかに対応は何気に使えるし。

車輪の再開発をやってきた様な人には、
ソースもあるからちょっとだけ手を加えたい時とかも 其れが可能で、
わざわざRequestしないで良いのは、時間的にもモチベーション的にも良い選択肢。

初心者にも優しいライブラリだけど、其れだからといって
昔のHSPみたいに、他の言語知ったら使いたくなくなるような不自由さがあるわけでもない。
まぁ、DirectXバリバリつかうぜ!!って人とかには別だろうけど。

982 :名前は開発中のものです。:2009/03/29(日) 12:18:31 ID:eagJL9bR
>>973
それバグでもなんでもねえし、
ポインタのサイズは変わらないだろ


983 :名前は開発中のものです。:2009/03/29(日) 13:11:06 ID:Zf+/7kJf
普段はこのスレは過疎ってるから別にいいじゃないのか? DXライブラリでゲーム作るテクとしてメンバ関数ポインタを使うこともあるかもしれないしさ。

>>982
正確に書くと、継承した場合のメンバ関数ポインタのサイズが4バイトとは限らない(コンパイラ依存)
多重継承や仮想継承をしている場合、正しいポインタサイズを返すために8バイトや12バイトとなることがある。
しかし、昔のバグコンパイラではこの点が考慮されておらず必ず4バイト固定だった時代があり、派生や仮想関数を呼び出そうとするとアラインメントを調節する必要があった。
ということ。ポインタは必ず4バイトというのは早計だよ。

984 :名前は開発中のものです。:2009/03/29(日) 18:18:24 ID:eagJL9bR
>>983
何故得意気なのか理解できんが、
それはサイズが変わるとは言わないだろ?
結局のところ、静的なサイズは確定している。

985 :名前は開発中のものです。:2009/03/29(日) 21:00:34 ID:aWInPsJ8
>>984
RTTIしていると大問題。

なんか、微妙にスレ違いだし、
偉そうにしているといわれたようなので黙って老害は去りますね。
失礼しやした。

986 :名前は開発中のものです。:2009/03/29(日) 22:56:36 ID:8b86AGfH
どこが得意気なのやら

で、次スレはどうするんよ

987 :名前は開発中のものです。:2009/03/30(月) 00:07:56 ID:Ui9Ndm7F
DXライブラリ総合スレッドその3、で建てればいいんじゃね。

988 :名前は開発中のものです。:2009/03/30(月) 01:19:18 ID:Y8nEXzvT
>>990頼んだ

989 :名前は開発中のものです。:2009/03/30(月) 01:54:36 ID:1JQfO1aW
>静的なサイズは確定している

> RTTIしていると大問題。

会話になってねぇww

990 :名前は開発中のものです。:2009/03/30(月) 18:27:06 ID:II/eiBAq
質問です

{
{   //1フレーム間での処理
  A  ;
  B  ;
  C  ;
}
ScreenFlip();
}

すごく大まかに言って↑このようにゲーム作ってるのですが
CheckHitKeyの判定ってって「フレームの最初のみ」に行われるんでしょうか?
それとも「ifの処理があるごと」なんでしょうか?

もし後者ならif CheckHitKey(SPACE)==1 みたいな処理をA部とB部両方に入れた場合、
Aが行われてる瞬間にSPACE離しちゃったら
Aは行われてBは行われないっていうことも起きちゃうんでしょうか?





991 :名前は開発中のものです。:2009/03/30(月) 18:39:19 ID:x1tfO2A2
最初の大括弧はmainでその次はforとかのループの括弧か…?

992 :名前は開発中のものです。:2009/03/30(月) 18:42:02 ID:b98OMwXU
int GetHitKeyStateAll( char *KeyStateBuf ) ;
を使えば起きない

993 :名前は開発中のものです。:2009/03/30(月) 18:43:28 ID:II/eiBAq
>>991
そんな感じです。すみません。
>>992
ありがとう
調べてみます

994 :名前は開発中のものです。:2009/03/30(月) 18:46:45 ID:x1tfO2A2
>>990
適当な変数にそのフレームで一回押されたか押されてないかを記憶しておけばいいんでは?

main{
int space = 0;
  while(うんたら){   //1フレーム間での処理
  if (CheckHitKey(SPACE)==1)space=1;
  A  ;
  B  ;
  C  ;
  space=0;
  ScreenFlip();
  }

}

995 :名前は開発中のものです。:2009/03/30(月) 19:18:36 ID:9Ep+SxhG
>>990

「ifの処理があるごと」じゃなくて「ChecHitKey」が実行されるごとだけど、
ご想像の通り、1フレームに何回もチェックしてたら
Aでは行われてBでは行われないって事がおきるはずだね。

994さんが言われてるようにフレームの一箇所でだけチェックして記録しておくってのも手だけど、
やっぱり992さんの言われてるGetHitKeyStateAllが俺としてはお勧めかな。
これはこの命令だけで全てのキーの入力情報を記録するから、
フレームの最初に一回やっておけば、あとはそれを参照するだけでいい。

996 :名前は開発中のものです。:2009/03/30(月) 20:06:33 ID:II/eiBAq
>>992
>>994
説明サンクス
上手くいきました!

>>995
なるほど、やはりでしたか。
それが原因のバグがでてましたがなんとか除けました。

997 :名前は開発中のものです。:2009/03/30(月) 21:58:12 ID:9rT9QBj3
ume

998 :名前は開発中のものです。:2009/03/30(月) 21:59:19 ID:9rT9QBj3
ume

999 :名前は開発中のものです。:2009/03/30(月) 22:00:03 ID:9rT9QBj3
ume

1000 :名前は開発中のものです。:2009/03/30(月) 22:00:48 ID:9rT9QBj3
ume

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

305 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)