DXライブラリ 総合スレッド 2008
レス数が1000を超えています。これ以上書き込みはできません。
0001名前は開発中のものです。
2008/10/25(土) 17:37:53ID:BCFbbKcoGUIのゲームを比較的容易に作成する事を可能にする、
「DXライブラリ」に関するスレッドです。
DXライブラリの詳細ついては
http://homepage2.nifty.com/natupaji/DxLib/
を参照して頂きたい。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。
過去スレ:DXライブラリ 総合スレッド
http://pc11.2ch.net/test/read.cgi/gamedev/1197468399/
0002名前は開発中のものです。
2008/10/25(土) 18:16:32ID:iksgntZe0003名前は開発中のものです。
2008/10/25(土) 18:23:00ID:a4ucCzN60004名前は開発中のものです。
2008/10/25(土) 20:53:06ID:YbKt+gKn>1乙
0005名前は開発中のものです。
2008/10/25(土) 21:50:29ID:/GWPXvud0006名前は開発中のものです。
2008/10/25(土) 21:51:12ID:/GWPXvud0007名前は開発中のものです。
2008/10/25(土) 21:54:26ID:/GWPXvud0008名前は開発中のものです。
2008/10/25(土) 22:16:04ID:Vt8TEo7A/´ ̄`ヽ /: : : \_____/: : : : ヽ、
,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
/: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
/: :.,.-ァ: : : |: : : : : : : : : :\: : : : :: : : :ヽ \ /: : : :/
 ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i / /: : : : :/
/: : ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/ /: : : : :/ 、
. /: : / . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : | /: : : : :/ |\
/: : ィ: : : : :.i: : | \!___/ ヽ:: : : : : : :\|:.:.:.:/:! ,': : : : / |: : \
/ / !: : : : :.ト‐|- ヽ \: : : : : l::::__:' :/ i: : : : :{ |: : : :.ヽ
l/ |: : :!: : .l: :| \: : : l´r. Y {: : : : :丶_______.ノ: : : : : :}
l: : :l: : :ト、| 、___,ィ ヽ: :| ゝ ノ '.: : : : : : : : : : : : : : : : : : : : : : /
|: : :ト、: |: :ヽ ___,彡 ´ ̄´ ヽl-‐' \: : : : : : : : : : : : : : : : : : イ
!: :从ヽ!ヽ.ハ=≠' , ///// ///u /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
V ヽ| }/// r‐'⌒ヽ イ〉、
ヽ、______ー‐‐' ィ´ /:/:7rt‐---、 こ、これは>>1乙じゃなくて
ィ幵ノ ./:/:./:.! !: : : : :!`ヽ ポニーテールなんだから
r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\ 変な勘違いしないでよね!
/: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\
0009名前は開発中のものです。
2008/10/25(土) 22:27:37ID:4olZVcWC一応3D版も奴も張っちゃえ
http://fatalita.sakura.ne.jp/3DLib/
0010名前は開発中のものです。
2008/10/25(土) 22:29:25ID:Vt8TEo7ADXライブラリ3DのURLもテンプレに入れた方が良いと思う。
私は結構期待しているし、私以外にも注目している人は多いはず。
というわけで自分なりにテンプレ入れてみる。
また、DXライブラリと互換性を持ったライブラリ、
「DXライブラリ3D」が開発も非公式ながらも行われている。
DXライブラリ3Dを用いることにより、DXライブラリの機能に加え、
3Dの処理を容易に行えることが期待できる。
http://fatalita.sakura.ne.jp/3DLib/
0012名前は開発中のものです。
2008/10/25(土) 23:34:54ID:BCFbbKcoFireFox3なんだけどそのリンク先、マウスにDxMainの透明ソースがくっついてはがれなくてクリックできない。
あ、実はDirectXについて調べててたまたま来ただけなんですが、ちょうど埋まってたので立ててみました。
DXライブラリの歴史は古いっぽいからスレタイの番号抜けちゃったのかなと年を入れて見たんですが、
次スレは2009年になりそうだしかまわないかなと。
僕がやりたかったのはDirectX使うゲームの画面をDirectXで静止画キャプチャなんですが、
DirectXでキャプチャするというHyperSnapでキャプチャしても画面が一瞬ロックしちゃうんであきらめました。
いろんなところにもBitBltより遅くなるって書いてあったし。
どんなゲームでもロックするとは限らないけど、ネトゲのセキュリティ機能が影響してるかもしれない。
廃スペックな人からは「そんなロックかからないよ」って言われたし、スペックでカバーできるっぽいし。
こういったライブラリは自前窓への描画や画面への出力前提だろうから、方向性もちょっと違いましたね。
0013名前は開発中のものです。
2008/10/25(土) 23:54:35ID:ZbA2BxSK0014名前は開発中のものです。
2008/10/25(土) 23:56:47ID:4olZVcWC……って時には結構強いよね、3D版。
ポリゴンモデルを用意できるかどうかは別として。
0015名前は開発中のものです。
2008/10/27(月) 14:23:21ID:Jt+1Mejfクリックできないとは?
うちもFirefox3だけど問題ないが
0016名前は開発中のものです。
2008/10/27(月) 15:24:06ID:nBdNvLmf0017名前は開発中のものです。
2008/10/27(月) 22:20:31ID:nZeh8WoA画像が重なった瞬間消すだけでもいいんだけど、どうすればいいかよくわからん
0018名前は開発中のものです。
2008/10/27(月) 22:24:13ID:OObvFpvs最も単純って言うと、
if ( x1 == x2 && y1 == y2 )
とか?
0019名前は開発中のものです。
2008/10/27(月) 22:48:15ID:zN//f5BC0020名前は開発中のものです。
2008/10/27(月) 23:21:07ID:nBdNvLmf普通にピタゴラスの定理使えばいいだけ
002118
2008/10/27(月) 23:28:42ID:OObvFpvs0022名前は開発中のものです。
2008/10/27(月) 23:42:59ID:zN//f5BC0023名前は開発中のものです。
2008/10/27(月) 23:52:30ID:nBdNvLmfピタゴラスの定理より簡単になるの?
0024名前は開発中のものです。
2008/10/28(火) 09:43:23ID:/xky1qOF0025名前は開発中のものです。
2008/10/28(火) 10:06:09ID:jGlZfuVr0026名前は開発中のものです。
2008/10/28(火) 11:15:02ID:Ot+vqO8gあるあるw 処理時間の関係でどうしてもなるよな。あれが厄介
0027名前は開発中のものです。
2008/10/28(火) 19:25:08ID:Ot+vqO8gDXライブラリ3Dの動画発見した
0028名前は開発中のものです。
2008/10/28(火) 21:25:44ID:mug6SHfM0029名前は開発中のものです。
2008/10/29(水) 04:50:01ID:yue3f1oWあれは線と線の交差を計算するだけ
0030名前は開発中のものです。
2008/10/29(水) 04:51:17ID:HeG9A7jn0031名前は開発中のものです。
2008/10/29(水) 05:21:45ID:yue3f1oW移動前と後の座標間を結ぶ線を引く。線を引くといっても直進なら2つの座標が直線を表す式になる。
直線1本を座標変換によってX軸と一致すると仮定する。
検査対象のオブジェクトのY座標が全てプラスまたは全てマイナスなら交差していない。
検査対象が1本の直線だとしよう。
直線は2つの座標で表されるので、その座標がプラスとマイナス座標の組み合わせなら交差していることになる。
数学では交点を求めるが、交差のみ検査するなら、Y座標だけ調べればいい。
二つの座標を(x1,y1)と(x2,y2)として、y1×y2がプラスなら交差なし、マイナスなら交差ありになる。
ポリゴンは線の集合なので、ポリゴンを構成する全ての直線についてこの計算をするもよし、
正の座標と負の座標それぞれの数を数えるもよし。
座標変換については高校数学で習うけど、ゆとり教育の今は大学まで進まないと習わないだろうね。
コンピューターグラフィックとかシミュレーションやるなら絶対必要な数学なんだけど、
大学生になってから学び始めても理解できるわけがない。
ようするに日本人は優秀なプログラマにはなれない。
0032名前は開発中のものです。
2008/10/29(水) 08:48:56ID:46mBxw3n0033名前は開発中のものです。
2008/10/29(水) 15:25:49ID:S9yFdqtr>Y座標だけ調べればいい。
という意味がわからん・・。
x軸と一致するように回転した線分の定義域x0の範囲を
x01< x0 <x02
としたら、この範囲の中でyの掛け算結果がマイナスになれば交差とわかるけど。
もし交点がこのx0の範囲じゃないところで交差していたらどうするの?
直線と直線の交差ならこれでいけるけど、
使いたいときってほとんど線分と線分じゃない?
0034名前は開発中のものです。
2008/10/29(水) 15:36:57ID:HeG9A7jn横レスすみません。直線と線分って定義上違うんですか?
直線と長方形という意味でしょうか?
0035名前は開発中のものです。
2008/10/29(水) 15:41:55ID:p+8U8df2直線の長さは無限大。(線分には端が存在するが、直線には端が存在しない)
だから、二本の直線は必ず交差する
注1 並行である場合を除く
注2 2Dの場合に限定
0036名前は開発中のものです。
2008/10/29(水) 15:45:07ID:HeG9A7jn詳しい説明ありがとうございました。なるほどそういう違いがあるんですね。
0037名前は開発中のものです。
2008/10/31(金) 03:09:52ID:wPwg2eVl003831
2008/10/31(金) 06:44:39ID:SBgHi4S/まあ確かに>>33の言うとおり、x座標の範囲も見ないと実際は分からないけど、
直線とみなさないとy座標だけでは上にあるとも下にあるとも言えないから。
両方を直線とみなせば並行じゃない場合必ず交差する。
でも、平行じゃない直線が取るx座標、y座標は無限となるでしょ。
y座標のみ見るというのは、点として見ているから交差しない。
僕が言いたかったのは、基本的には数学の計算を利用するけど、交点まで求める必要はないということ。
計算手順としては、座標変換後、それぞれのx座標のみについて基準の線分の範囲内にあるかどうかを見て、
次に>>31で説明したようにy座標のみを見れば大体判断できる。
x座標が範囲の内と外をまたぐ線はあいまいだけど、
基準線の交差する側の端点を基準にしてx成分とy成分の比率を見れば交差するかどうかが分かる。
ちなみにこの計算方法はキャノンが特許申請してるが
常識なので却下するべき。
http://www.j-tokkyo.com/2003/G06T/JP2003-085568.shtml
0039名前は開発中のものです。
2008/10/31(金) 07:17:25ID:2oP1KQG/0040名前は開発中のものです。
2008/10/31(金) 07:37:16ID:ypJM5WNCあんた詳しいな。いろいろと。差し支えなければ職業とか聞きたい。
0041名前は開発中のものです。
2008/10/31(金) 20:29:02ID:2jgW7Qyq0042名前は開発中のものです。
2008/11/01(土) 15:44:46ID:NPyLG5nz中心と半径だけで計算できる。
0043名前は開発中のものです。
2008/11/02(日) 08:06:57ID:lCIgFzJ90044名前は開発中のものです。
2008/11/02(日) 11:25:09ID:N/BXqZR70045名前は開発中のものです。
2008/11/02(日) 12:31:49ID:5aCVFStd本家の隠し関数の中にあるかどうかまでは知らない。
0046名前は開発中のものです。
2008/11/02(日) 15:48:59ID:HThmNcwBDXライブラリって、そういう系統の関数は用意しないという設計思想のよーな。
0047名前は開発中のものです。
2008/11/02(日) 19:05:58ID:tamTTJ4k初心者なら四角か球同士の判定を自分で実装することの勉強にもなるし2Dは
高校の数学程度で十分自力で実装可能。
3Dならそれだけで分厚い本があったり研究者がいたりするくらいだから面倒だけど。
0048名前は開発中のものです。
2008/11/02(日) 19:10:46ID:R+WQmTm12Dでも面倒なことするなら面倒
0049名前は開発中のものです。
2008/11/07(金) 09:51:29ID:D/J6e6ls0050名前は開発中のものです。
2008/11/07(金) 17:21:25ID:F7VY1GkH0051名前は開発中のものです。
2008/11/07(金) 17:24:04ID:F7VY1GkH0052名前は開発中のものです。
2008/11/07(金) 17:32:26ID:AIGNp4++0053名前は開発中のものです。
2008/11/08(土) 04:58:31ID:AWLKZdyA0054名前は開発中のものです。
2008/11/08(土) 14:28:00ID:zrv99/58リアルタイムの画像処理はDXライブラリじゃ難しい?
0055名前は開発中のものです。
2008/11/08(土) 14:45:42ID:cVyljR6EDXライブラリを詳しくわからないのだけど、
DXライブラリってテクスチャつかえますよね?
レンダリングターゲットをテクスチャに設定して
そこに視覚エフェクトを描画。
それを、通常レンダリングターゲットにもどして
そのテクスチャを描画してみては?
視覚エフェクトのアルゴリズムがわかれば可能だと思います。
0056名前は開発中のものです。
2008/11/08(土) 15:49:01ID: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個?)しないといけません。
それに書く量も多いです。
何か良い方法はないでしょうか?
0057名前は開発中のものです。
2008/11/08(土) 16:18:22ID:QvZXcY8M普通に考えればそうなるんじゃないかなあ。
タイピングを必要とするソフトなんだろうか。
0058名前は開発中のものです。
2008/11/08(土) 16:22:15ID:mEomuEolKEY_INPUT_○○を全部一つの配列に入れとけばループで処理できる
KEY_INPUT_RETURNが来たときだけ別にすればいい
0059名前は開発中のものです。
2008/11/08(土) 16:30:21ID:L3IthcNyif (CheckHitKey(KEY_INPUT_RETURN) == 0)
{
flgOn = true;
}
じゃだめなの?
0060名前は開発中のものです。
2008/11/08(土) 16:31:40ID:L3IthcNy0061名前は開発中のものです。
2008/11/08(土) 16:31:51ID:jD220VQNCheckHitKeyAll( void )を使って、キーボードの状態を監視しておいて、
何か押されたとき、CheckHitKey(KEY_INPUT_RETURN)で、
エンターが押されているかどうか判別する。
エンターが押されていなければ、エンター以外の何かが押されたことになる。
0062名前は開発中のものです。
2008/11/08(土) 17:05:01ID:cnhuR5WyCheckHitKeyAll(DX_CHECKINPUT_KEY) で。
……これでもパッドが反応するんでコードチェックしたらバグだった。
DxInput.cpp:
>// ジョイパッドのチェック
>if( CheckType & DX_CHECKINPUT_KEY ) // DX_CHECKINPUT_PAD のはず
気になるならバグ報告して修正を依頼してください。
0063名前は開発中のものです。
2008/11/08(土) 17:08:47ID:eTLcPw0w一応タイピングのゲームです。
ループ処理をヒントに、
bool flgOn = false;
for (int i = 0; i < 256; i++ )
{
if (i != KEY_INPUT_RETURN)
{
if (CheckHitKey(i) == 1)
{
flgOn = true;
}
}
}
という風な処理にしたら、一応望み通りの動きができました。
でもバグ有りそうな予感がします。
CheckHitKeyAllを使えばもう少しスマートに書ける……のかな?
0064名前は開発中のものです。
2008/11/08(土) 17:24:48ID:QvZXcY8Mそのあたりを省いた方がいいかも
0065名前は開発中のものです。
2008/11/09(日) 13:19:18ID:YyCrr7f5&を使えばシンプルにすっきり書けるはずだよ。
0066名前は開発中のものです。
2008/11/09(日) 15:04:32ID:wPDrFVAu0067名前は開発中のものです。
2008/11/09(日) 15:37:16ID:d71QR9Rf公式で紹介されてない所だと夜光蛾4とかDiadraEmptyとか。
同人系は「DXライブラリでここまで作れる」っていう良い例が多いな。
0068名前は開発中のものです。
2008/11/09(日) 16:53:27ID:HksuFgRc個人的にはモノリスフィア。
0069名前は開発中のものです。
2008/11/09(日) 17:01:59ID:p4NI5+2s四聖龍神録は?半オープンソースだし。
0070名前は開発中のものです。
2008/11/09(日) 18:19:57ID:/7amOdfc007154
2008/11/10(月) 00:04:21ID:fweGd5hJ描画先変更できたのかーー!
こいつは便利だ
他にも見落としてる便利な関数あるかもと思って久しぶりに本家リファレンスページ見たら
”ドット単位で画像にアクセスしたい関係”ってのが追加されてて便利すぎフヒヒきゃっほう!!!11
もうひとつ質問です。DrawPolygon3Dかなにかで3D平面を、空気遠近法で表示させたいのですが
似非でもいいのでいい方法ないでしょうか
0072名前は開発中のものです。
2008/11/10(月) 17:51:27ID:22QGh1G7本家のリファレンスみたらわかるはず。
0073名前は開発中のものです。
2008/11/11(火) 01:35:00ID:g6Sl8AVbあとはゲームではないが
ウディタ(WOLFRPGエディタ)もそうだ。
0074名前は開発中のものです。
2008/11/11(火) 16:04:15ID:VHeofJsH参加者は今のとこ私の他は3人です。その後焼き鳥でも食べに行きましょう。
0075名前は開発中のものです。
2008/11/11(火) 19:37:44ID:ktqf9Hz0DXライブラリもその煽りを食らってるって聞いたんだけど、どうなん?
0076名前は開発中のものです。
2008/11/12(水) 06:22:06ID:yL4++M3C9600GT,8800GTS,6600GTの3つ使ってるけどどれも不具合出たこと無いよ。
それよりVistaでたまにおかしなことになる・・。
同じコードで動かしてもXPとVistaじゃ違う挙動することが。
一つ一つのサンプル動かしても全然違わないんだけど、
スゲー大きなプログラムを動かしてみると違いが出てくることがある。
どうしてなんだろ・・。
DX管理人さんはそんなことないって言ってるから
自分のプログラムが悪いだけかもしれんが・・。
みんなそういうこと無い?
0077名前は開発中のものです。
2008/11/12(水) 08:00:35ID:10ZLablIVISTAに最初からはいってるのはDirectX10だからね。それも中途半端な。
MSの中途半端な対応のせいでゲーム開発者はみんな迷惑してる。
DirectX9とか新しいDirectX10とかを入れてみると改善すると思う。
0078名前は開発中のものです。
2008/11/12(水) 08:10:38ID:wRCT4Vg2ビデオドライバ類が関係しているとかないかな
007975
2008/11/12(水) 18:00:22ID:IPCAcIHc自分は持ってないんで確認できないまま適当に書いた、すまん。
008076
2008/11/12(水) 20:17:02ID:yL4++M3C今度出るwindows7だっけ?あれはどうなるんだろう・・。
>>75
VistaとXPデュアルブートするといいよ。
作ったゲーム色んな環境で試してみれる
0081名前は開発中のものです。
2008/11/12(水) 20:59:00ID:IPCAcIHc2000 orz
0082名前は開発中のものです。
2008/11/12(水) 22:09:52ID:10ZLablI0083名前は開発中のものです。
2008/11/13(木) 01:05:13ID:mdnPfmFMなんかうちの周りだと、PCに詳しくない奴が買ってるOSってイメージがある。
そのまま終わっていくのかビスタ。
0084名前は開発中のものです。
2008/11/13(木) 07:38:57ID:lJxFlB+u0085名前は開発中のものです。
2008/11/13(木) 19:45:16ID:EnpEGfrmネットできりゃそれでいいってやつが買ってる印象だな
あとはofficeでも使えりゃ困らないしな
0086名前は開発中のものです。
2008/11/13(木) 23:48:34ID:mdnPfmFM0087名前は開発中のものです。
2008/11/14(金) 00:26:08ID:5PrZBKJs今時デュアルブートって流行らないんじゃない?
VPCとかさ。
0088名前は開発中のものです。
2008/11/14(金) 01:06:10ID:71kfvXp8グラフィックボード使ってなくて、CPU依存
0089名前は開発中のものです。
2008/11/14(金) 01:26:37ID:ZojnRlhq0090名前は開発中のものです。
2008/11/14(金) 01:28:06ID:5PrZBKJs0091名前は開発中のものです。
2008/11/14(金) 01:28:54ID:BF+CzcYiつ*
0092名前は開発中のものです。
2008/11/14(金) 13:57:39ID:foiTr96ESetGraphModeとChangeWindowModeを同時に使うと、
かなりの確率でOSごと落ちるorz
0093名前は開発中のものです。
2008/11/14(金) 14:22:12ID:foiTr96Eサーセンwwwフヒヒwwwww
0094名前は開発中のものです。
2008/11/14(金) 14:48:29ID:ZojnRlhq初期化の前にウィンドウモードにした方が処理が早いよ
0095名前は開発中のものです。
2008/11/14(金) 14:50:12ID:foiTr96Eうちの環境ではなぜかフリーズするんです
0096名前は開発中のものです。
2008/11/15(土) 19:53:04ID:MzdFlqkaゲームの速度をどのPCでも一定になるようにするために、
ScreenFlipを使う前と後の時間差を利用してる方法が本にあったのですが、
そもそもScreenFlip一回の時間はどのように決まっているのでしょうか?
0097名前は開発中のものです。
2008/11/15(土) 20:12:06ID:56rIt8Hu画面のプロパティ→設定→詳細→モニタ で、リフレッシュレートが確認できる。
つってもこれは俺のPC(windows2000)だから他の環境だとちょっと違うかも。
0098名前は開発中のものです。
2008/11/15(土) 20:17:30ID:56rIt8HuScreenFlipがリフレッシュレート通りになるのは
デフォルトで垂直同期信号待ちをしてるからであって、
「SetWaitVSyncFlag ScreenFlip関数実行時にCRTの垂直同期信号待ちをするかのフラグセット 」
で、垂直同期信号待ちを切った場合は関係ない。
また、条件は知らないが特定の環境(うちの場合はサブのノートPC)では
垂直同期信号待ち設定にしていても、ScreenFlipで垂直同期信号待ちしてくれない場合が
ある事を確認済み。
0099名前は開発中のものです。
2008/11/15(土) 20:27:43ID:MzdFlqka返事ありがとう。
リフレッシュレート自体はわかったんですが
後半よくわからなかったのでちょっと調べてみます・・・。
0100名前は開発中のものです。
2008/11/15(土) 20:51:40ID:56rIt8Huってのがどんなのか判らないけど、
ScreenFlipの垂直同期信号待ちを利用した方法だとすると
前述したようにリフレッシュレートに依存するから
「どのPCでも一定の速度」にはならないよ。
リフレッシュレートを60にしてるPCと70にしてるPCではスピードが違う。
まぁそれを踏まえた上でいちばん簡単で代表的な速度を一定にする方法なんだけどね。
(つまり、リフレッシュレートが60の場合を前提としてゲームを作り、
60以外にしてる人は60にしてからプレイしてください、となるw)
0101名前は開発中のものです。
2008/11/15(土) 21:13:47ID:56rIt8Hu俺も聞きかじりの知識だが。
最近はテレビにしろディスプレイにしろ、液晶が主流で「薄型」になってるが
もしブラウン管(分厚い)のテレビなりディスプレイがあるなら、画面の前で手を振ってみるといい。
残像がぶつ切りに、ストップモーションのように見えるはずだ。
これはどういう事かというと、画面が60分の1秒に一回、点滅してるからそう見えるんだ。
(厳密には60分の1秒に画面半分)
つまり、画面が光ってる時に「手の影が見えて」、画面が消えてる時には「見えない」から
手の動きがぶつ切りに見えるわけだ。
そうやって点滅してるのに、ずっと光ってるように見えるのは残像のせい。
もっとも「眼(瞳孔)」の方は反射で動いてるから、画面が光ってる時には瞳孔が小さくなり
画面が消えてる時は瞳孔が大きくなってたりするはず。
だから画面に近づいたり、暗い部屋で画面を見たりすると極端に眼が疲れる。
0102名前は開発中のものです。
2008/11/15(土) 21:24:13ID:56rIt8Huブラウン管ってのは、奥から電子ビームを画面に向けて照射して、その部分のみを光らせてるわけだから
実際に光ってるのは1点のみ。(もっとも一度照射されるとしばらくは持続するらしいが)
その電子ビームの照準が、画面の左上から始まって、右端まで動き、
一段さがってまた左端から始まって右まで動き、を繰り返し、画面の右下まで進む。
つまり
┏━━━┓
┃□ぬ□┃
┃□る□┃ みたいな画面が表示されてると、それは実際は
┃□ぽ□┃
┗━━━┛
┏━━━┓
┃□ぬ□┃
┃■■■┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃□る□┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃■■■┃
┃□ぽ□┃
┗━━━┛
という感じで高速に書き換えられてるという事。
0103名前は開発中のものです。
2008/11/15(土) 21:30:19ID:56rIt8Huもしこの「動く」のが前述した「画面を書き換えてるタイミング」だったらどうなる?
┏━━━┓
┃ぬ□□┃
┃る□□┃ この状態から
┃ぽ□□┃
┗━━━┛
┏━━━┓
┃□□ぬ┃
┃□□る┃ この状態からにまで移動しようとすると
┃□□ぽ┃
┗━━━┛
┏━━━┓
┃ぬ□□┃
┃■■■┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃□る□┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃■■■┃という感じになり、
┃□□ぽ┃
┗━━━┛
┏━━━┓
┃ぬ□□┃
┃□る□┃ 人間の目にはこう映ってしまう。この現象をティアリングと呼ぶ。
┃□□ぽ┃
┗━━━┛
0104名前は開発中のものです。
2008/11/15(土) 21:38:19ID:zVe3F0+t「ScreenFlipを使う前と後の時間差を利用してる方法」ってのを普通に解釈したらリフレッシュレートに依存せずに一定になるよ。
ScreenFlipの待ち時間に関係なく、1フレーム(1ループ)の差時間から移動距離を割り出せばok。
ただし、ゲーム画面がアクティブでなくても実際に時間は経過してるので、ゲームに戻るとその分進む(進んだ)ことになる。
これを回避するなら、ゲーム内で独自にインクリメントカウントを設置し、そこから移動距離を割り出せばok。
ゲームプログラミング独特の考え方だね。
0105名前は開発中のものです。
2008/11/15(土) 21:40:57ID:zVe3F0+tブラウン管テレビは29.97fpsだよ。
0106名前は開発中のものです。
2008/11/15(土) 21:41:23ID:56rIt8Huこれが「垂直同期信号待ち」であって、つまりは
ディスプレイが画面全体の書き換えが終わるまで、
次の描画処理をしないで待ってるってわけだ。
これがScreenFlipではデフォルトで行われてる。
だからScreenFlipを使うと速度が一定に保たれる……のだが、
「画面の点滅は60分の1秒」と言ったが前述したが、これが要するにリフレッシュレートの事。
つまりこの速度をPC側で自由に変更できたりする。
リフレッシュレート60の場合はScreenFlipは60分の1秒経つまで待つわけだが、
リフレッシュレート70の場合は70分の1秒しか待ってくれない。
その分ゲーム速度は速くなってしまうわけだ。
(もしプログラム処理自体が重くて、70分の1秒で終わらなかったら
70分の2秒、つまり35分の1秒かかるわけで、逆に遅くなる)
0107名前は開発中のものです。
2008/11/15(土) 21:47:42ID:56rIt8Hu当たり判定もそれ相応の処理にしなくてはいけないし、
そうなるとリプレイ記録&再生をどうやればいいのかわからなくなる。
そこらへんはどうやってるのかな。
ってこれはDXライブラリと関係ないか。
0108名前は開発中のものです。
2008/11/15(土) 21:57:26ID:zVe3F0+tでもScreenFlipの待ち時間を基準にするなんて誰もしないと思うから
あたかもScreenFlipを使うとスピードがリフレッシュレート依存になるみたいな解説はやめたほうがいいと思うよ。
0109名前は開発中のものです。
2008/11/15(土) 22:29:29ID:PnDW3j7Q1ループが17ミリ秒(60FPS)になるまでウェイトをかけてやればいい
これが一番簡単で確実
0110名前は開発中のものです。
2008/11/15(土) 22:34:05ID:RlpGwAN3それ以外はタイマで
0111名前は開発中のものです。
2008/11/15(土) 23:12:07ID:56rIt8Huいや、俺してたし、してるしw
0112名前は開発中のものです。
2008/11/15(土) 23:32:40ID:zVe3F0+tその話をしてるのは君だけど、実際にそれを採用してる人はいないって事だよ。
もしかして君は採用もしてるの?
だとしたら自分が長々と説明したデメリットが解消できてないよね。
それを解消したくて質問したいならそれなりの場所でそれなりの質問方法を取ればいいと思うよ。
もしそうじゃないなら誰も採用しない方法を解説されてもややこしくなるだけだから…。
0113名前は開発中のものです。
2008/11/15(土) 23:41:52ID:56rIt8Hu最初はゲーム起動時に測って自動切換えにしてたけど
それもやめて結局手動切り替えに……。
0114名前は開発中のものです。
2008/11/15(土) 23:43:35ID:56rIt8Hu移動距離算出方法はやった事ないです。
0115名前は開発中のものです。
2008/11/16(日) 00:40:12ID:H38ODQJJとりあえずDXライブラリを使うならScreenFlip()で垂直同期を待てば良いと思うよ。
スピードの話はまた別の話。
>>113
ゲーム起動時に何を測るの?
それと、切り替える必要性が見えないんだけど・・・?
0116名前は開発中のものです。
2008/11/16(日) 01:43:29ID:Hwka3oLK>ゲーム起動時に何を測るの?
ScreenFlipを一秒間繰り返して、その回数で判断。
>>98で書いたけど、垂直同期信号待ちをしてるはずなのに
ScreenFlipで待ってくれない場合があるから、
FPS値が異常に高かったらそうだと判断して
タイマー値によるウェイトかけるようにしてた。
>それと、切り替える必要性が見えないんだけど・・・?
それはどっちを基準にして?
ScreenFlipを基本として考えるなら、リフレッシュレートが変更された場合や
上で書いた垂直同期信号待ちしてくれない環境の時に異状スピードになってしまう。
タイマ値でウェイトかける場合は、やっぱりティアリングが気になるし、
1フレームごとに点滅するエフェクトとかがきちんと点滅しなくなる。
0117名前は開発中のものです。
2008/11/16(日) 02:40:28ID:H38ODQJJえっと、だからね、ScreenFlipとティアリングは関係あるけど、
それらとウェイトは関係ないって事だよ。
ゲーム起動時にScreenFlipの待ち時間からリフレッシュレートを判断してるようだけど、
それも結局ScreenFlip基準でタイマー取る方式だよね。
てことは例えば60Hzを基準にウェイトをかけるって事だよね。
だとしたらはじめからリフレッシュレートのウェイトなんかに頼らずに、
マルチメディアタイマーででも1/60sを基準にコードを書けばいいでしょ?
だから起動時に測る必要もないし、リフレッシュレートの変更やVsyncを待たない場合は考慮しなくていいの。
繰り返すけど、タイマーでウェイトかけてもScreenFlipを使うならティアリングはないよ。
0118名前は開発中のものです。
2008/11/16(日) 03:40:07ID:Hwka3oLKタイマでウェイトかける場合は、ScreenFlipのVsync待ちはOFFにしてあるんだけど、
それでもティアリングは発生しない?
んじゃ発生してる俺のプログラムは何か間違ってるのか。
理屈上、1/60sを基準にウェイトかけるようにすれば
ゲームスピードは一定になるが、タイミング次第で
ティアリングが発生しない状態か、
あるいはティアリングが発生し続ける状態が
維持されるものだと思っていたのだが。
0119名前は開発中のものです。
2008/11/16(日) 04:22:31ID:H38ODQJJこれを前提に最初から読み返してみて。
0120名前は開発中のものです。
2008/11/16(日) 14:59:43ID:Yf+kFgNP0121名前は開発中のものです。
2008/11/16(日) 17:43:53ID:fHnaEgZYティアリングは発生しないけど動きが凄いガクつくぞ
ADVみたいに動きの少ないゲームならそれでも良いと思うけど、
STGやACTでは見るに耐えない
0122名前は開発中のものです。
2008/11/16(日) 18:33:07ID:H38ODQJJ75Hzの環境なら60fpsに制限されるから多少はガクつくけどこれはトレードだね。
ちなみに3Dモノとか海外のゲームはfpsを出来るだけあげて垂直同期しないっていうのが主流みたい。
>>121みたいにfps制限はするわ垂直同期しないわっていうのは愚の骨頂。
ティアリングするわfps制限されてるわでひどいもんですわ。
0123名前は開発中のものです。
2008/11/16(日) 21:17:57ID:gVsDrcFZガッ
0124名前は開発中のものです。
2008/11/16(日) 21:57:20ID:fHnaEgZYなんでそんなに相手を見下したような態度なの?
>60Hzに合わせれば60Hzの環境なら結局タイマーでウェイトしないから問題ないよ。
それはわかってるよ
だから最初にリフレッシュレート測って垂直同期主体にするかタイマー同期にするか判断するんでしょ?
121はあくまでfpsとリフレッシュレートが一致していない場合の話
>75Hzの環境なら60fpsに制限されるから多少はガクつくけどこれはトレードだね。
ここで122の言うとおり垂直同期とるかとらないかはプレイヤーの好みの問題
オプションで選択できるようにすべきだと思う
>ちなみに3Dモノとか海外のゲームはfpsを出来るだけあげて垂直同期しないっていうのが主流みたい。
そうだね。3Dモノは可変fpsと相性良いよね。
>>121みたいにfps制限はするわ垂直同期しないわっていうのは愚の骨頂。
垂直同期をとらないことで手軽に入力に対するレイテンシを下げることができるし、
リプレイを取る目的でfpsを固定しなければならない場合もあるんだから、
短絡的に愚の骨頂というのはどうだろう
122的には60fps固定+垂直同期してない東方緋想天は愚の骨頂?
俺はそうは思わないけど・・・
0125名前は開発中のものです。
2008/11/16(日) 22:50:57ID:5RilDqvEリプレイ周りの実装も含めて、やっぱりFPSは60に固定でロジックを組みますよ。
オプションで「Vsync待ちをするかタイマーか」を選択させてます。
124さんもリプレイの話をしているから、そういう前提で言ってるのだと思うのですが。
0126名前は開発中のものです。
2008/11/16(日) 23:07:43ID:xtMr6+ch入力があったキーとその時の経過フレーム数があればいいんだし
0127名前は開発中のものです。
2008/11/16(日) 23:30:59ID:0yDeWpwc0128名前は開発中のものです。
2008/11/17(月) 01:36:47ID:GetktCW+何そのゲーム。>東方なんたら
最悪だね〜。
>>126
だよねぇ。
0129名前は開発中のものです。
2008/11/17(月) 03:32:51ID:qWlXMT4E0130名前は開発中のものです。
2008/11/17(月) 18:51:51ID:TAngTg8T0131名前は開発中のものです。
2008/11/17(月) 21:49:06ID:E1tboJG/0132名前は開発中のものです。
2008/11/17(月) 22:00:58ID:tSUha7RY作者の好意で公開してるソースをそんな言い方するなよ
0133名前は開発中のものです。
2008/11/17(月) 22:04:49ID:Zhr1hzWJ0134125
2008/11/17(月) 22:57:25ID:pxmPH9a8たしかにそうですね。
ただ、自分の場合は、FPSを固定すればあとはキー入力さえきちんと記録できていれば
リフレッシュレートが違えどもリプレイがずれることがないのでそうしていました。
0135名前は開発中のものです。
2008/11/17(月) 23:31:08ID:OriaVhLmやり方も違ってくるんじゃないかな。
0136名前は開発中のものです。
2008/11/18(火) 13:05:35ID:FZcPiuDyしょぼんのアクション だっけ?
やっと1−1クリアだと思ったのに愕然とした記憶がある。
0137名前は開発中のものです。
2008/11/19(水) 13:43:13ID:xnzA6xl60138名前は開発中のものです。
2008/11/19(水) 14:54:42ID:TpPgoKXnあれはやばいです
あれはほんとうに・・やばい・・。
この道10年のベテランですらあれを見ると悶絶して悶え死ぬレベル。
あのソースを読んだあの日、私は自分の人生について考えさせられました。
0139名前は開発中のものです。
2008/11/19(水) 15:08:39ID:lxkh5WN50140名前は開発中のものです。
2008/11/19(水) 15:11:10ID:Lz0a0oQh0141名前は開発中のものです。
2008/11/19(水) 18:41:54ID:TpPgoKXn0142名前は開発中のものです。
2008/11/20(木) 23:58:11ID:UIc9LZep0143名前は開発中のものです。
2008/11/21(金) 00:08:16ID:AZA6fSH/0144名前は開発中のものです。
2008/11/21(金) 00:14:35ID:IPu5qEL0むしろ逆に頭良いと思う
0145名前は開発中のものです。
2008/11/21(金) 00:46:35ID:PFCyKir90146名前は開発中のものです。
2008/11/21(金) 05:06:26ID:0gMw7+uwこれもマジキチ
0147名前は開発中のものです。
2008/11/21(金) 05:58:28ID:VvYw+mZMこれはアイテム4つで実装力尽きるw
配列すら使ってないとかやべぇ
でもスレチ
0148名前は開発中のものです。
2008/11/21(金) 12:55:25ID:3m8CIP+tそれにしてもその作者はDXライブラリ3Dの作者なの?
なんか色々考えさせられるな…。
0149名前は開発中のものです。
2008/11/21(金) 15:36:28ID:ELcxKG7H0150名前は開発中のものです。
2008/11/21(金) 19:40:33ID:yD9XL+v+0151名前は開発中のものです。
2008/11/21(金) 21:42:08ID:FU8hvFU50152名前は開発中のものです。
2008/11/22(土) 22:21:51ID:j0m39ynAゲーム一本完成させるって難しいな。
0153名前は開発中のものです。
2008/11/23(日) 02:26:12ID:YAgqgFQm0154名前は開発中のものです。
2008/11/23(日) 02:27:42ID:Ef5lma7pプログラム練習としても面白いジャンルのような気がします
がんばりましょう
0155名前は開発中のものです。
2008/11/23(日) 14:21:16ID:bJorsnCE俺知ってるよ
そういうのをあじゃいるって言うんだよね
0156名前は開発中のものです。
2008/11/23(日) 17:55:00ID:pnQpCtQfSaveDrawScreen()で画面全体を保存した後に、
その画像を加工して表示するという方法を試しましたが、遅くてとても使えませんでした。
ちなみに手順は
保存→加工→保存→表示です。
加工と二回目の保存の処理の間がとても遅かったです。
直接DXライブラリで描画してる画像をぼかせばもっと早くなると思うのですが、
DXライブラリで直接ぼかす方法がさっぱりわからりません。
どういう方法でぼかせれるのでしょうか?
0157名前は開発中のものです。
2008/11/23(日) 20:09:39ID:YAgqgFQm昔、モーションブラーもどきを自分で作ったが細かいやり方は忘れた。
0158名前は開発中のものです。
2008/11/25(火) 00:31:59ID:xYyBQpV1そのまま画像を描画
↓
αブレンドを適当に128くらいに指定してxy数ドットずらして描画×数回…
こんなのでどう?
0159157
2008/11/25(火) 20:03:29ID:5UMAw8SPああ、そうそう。
そんな感じでできると思う。たぶん。
ずらし量やブレンド率でぼけ足上手いこと調整してどうにかする。
関数化できたら楽そうだ。
0160名前は開発中のものです。
2008/11/25(火) 22:23:11ID:VmASE6nWいろいろとありがとうございます。
アドバイスのおかげで、それらしいのはできました。
縦には動かしていないのですが、とりあえずそれっぽい動作はします。
ソースは以下の通りです。
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になります。
軽くする良い方法は何かないでしょうか?
0161名前は開発中のものです。
2008/11/25(火) 22:39:54ID:MBrRa9Zc0162名前は開発中のものです。
2008/11/25(火) 23:02:53ID:EDWbdjkCi < 640/dot
を
i < 160/dot
くらいにまで下げてみる
ぼかすのがゲーム上そんなに大事じゃなかったら
このくらいで妥協するのが一番
0163157
2008/11/26(水) 02:18:18ID:eTjv2Xnvそんなに回数要る?
dotの値がいくら位で何回位描画しているのかとか、コードの意図とかちょっとわからんので
↓とどっちのコードの方が性能良いのかよくわからんけど…
int times = 4;//描画回数:4〜16推奨
int gap = 2;//ギャップ:1〜4推奨。残像拳のような効果を狙うなら大き目に。
SetDrawBlendMode( DX_BLENDMODE_ALPHA , 32 ) ;//描画回数×ブレンド率=128〜256推奨
for (int i = 0; i < times; i++){
DrawGraph( i*gap - times*gap, 0, GHandle, 0);
DrawGraph( times*gap - i*gap, 0, GHandle, 0);
}
0164名前は開発中のものです。
2008/11/26(水) 04:53:23ID:mqCcsZAV本当に速度が必要で、それなりのクオリティーが欲しいなら
LoadSoftImage関数とLoadSoftImageToMem関数を使うといいかもしれない。
自分は近頃、DXライブラリまったく触ってなかったから、どんなもんか
わからんが、説明を読む限りではこっちの関数で処理して
GraphHandleをつけて、表画させる方が高速みたいだし・・・・・
0165名前は開発中のものです。
2008/11/27(木) 05:33:03ID:9lHdy+ssDXライブラリとかの関数を変な使い方すると、めっちゃ重くなったりして(コンパイルエラーが出るわけではない)、
上手く扱わないとたとえ数百行のプログラムでさえ上手く動かないのに
市販されてる3Dゲームとかだとそれこそ想像もつかない量のプログラム書いてると思うんですが
それを全く重くならないように作るというのはまさに神の所業としか思えないんですが・・・
やはり職人的なひとはそれほどすごいってことでしょうか?
それとも単にまだ自分が未熟なだけでしょうか?
なんか抽象的な質問ですみません。
0166名前は開発中のものです。
2008/11/27(木) 07:22:55ID:UFJsiMGy普通に使っている分には問題ないと思うけど…
コード量も関係ないし。
メインのループ(秒間30〜60回くらい回しているとこ)の外で1回やれば済む処理を
ループの中で毎回やってたりしてない?
例えばグラフィックハンドルへの画像の読み込みを毎回やっているとか。
0167名前は開発中のものです。
2008/11/27(木) 12:05:54ID:tLRoJzh6そりゃまぁPCの性能にもよるけど。
市販されてる3Dゲームとかは、俺はヘボプログラマだからそれこそ神の領域にしか思えないけど
同じ市販ゲームでも、すごいグラフィックなのに軽快なのとか、やったらもっさりして重いのとかあるから
そこらへんはプログラマの腕次第でしょ。
凄腕のプログラマは極限まで無駄な処理を省いてるんだと思う。
0168名前は開発中のものです。
2008/11/27(木) 17:02:45ID:HwZNU9zJ0169名前は開発中のものです。
2008/11/27(木) 18:56:41ID:9lHdy+ssなるほどサンクス・・・
確かに無駄に繰り返してるかもしれない・・・。
0170名前は開発中のものです。
2008/11/27(木) 20:46:39ID:GnzSYpCC0171名前は開発中のものです。
2008/11/27(木) 22:41:46ID:LOD/UyCKありがとうございます。
回数がご指摘の通り多すぎました。
>>157のコードと併用して、思っていたぼかしができました。
コードは私の作成したコードと>>157のコードを関数化しただけなので省略させていただきます。
0172名前は開発中のものです。
2008/11/27(木) 22:48:28ID:tLRoJzh6別フォント用意すりゃいいことだが。
0173名前は開発中のものです。
2008/11/28(金) 05:15:28ID:10isJ4oYにしたらドラゴンボールの世界になってワロタ
0174名前は開発中のものです。
2008/11/29(土) 16:25:44ID:BtMciNRd0175名前は開発中のものです。
2008/11/29(土) 22:48:46ID:kaHILOZBいますぐ昔の再放送の刑事ドラマやドラマの
事務所シーンを見るんだ!!!
パソコンのディスプレイあるだろアレみるとわかりやすい
0176名前は開発中のものです。
2008/11/30(日) 02:55:10ID:Kx1+nHAmあれ今見るとなんでそう見えるか理解出来るな
タイヤが逆回転して見えるのとかも
0177名前は開発中のものです。
2008/12/01(月) 09:18:57ID:PQmt2oZjDXライブラリ(3D)で完璧に作ったのと
DirectXで完璧に作ったのだったら動きのサクサクさにどれくらい差が出るのかな?
PCの性能は結構良いのでそれは関係なく
個人的にはマリオ64くらいのクオリティーは出したいと思ってるんだけど
始めての大型ゲームなんで全く想像付かない
0178名前は開発中のものです。
2008/12/01(月) 09:51:01ID:Mqk5OkvC0179名前は開発中のものです。
2008/12/01(月) 10:23:13ID:PQmt2oZj0180名前は開発中のものです。
2008/12/01(月) 16:53:55ID:B+fc1nCX0181名前は開発中のものです。
2008/12/01(月) 16:57:45ID:Mqk5OkvCそのプロセッサ専用のライブラリを熟知してれば
サクサク動くゲームになる
例えばPS2ならEEとかのベクトル計算のためのライブラリの仕様とか
windowsマシンにはそんな計算機能はデフォルトじゃついてないから
どうしてもグラボ依存になる
0182名前は開発中のものです。
2008/12/02(火) 00:02:20ID:zbFv8MtrChangeWindowMode(TRUE);
SetDrawScreen(DX_SCREEN_BACK);
while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
ClsDrawScreen();
〜〜
ScreenFlip();
}
}
↑こう書いたとき、〜〜 の部分の処理が毎回変わるモノだった場合でも、よほど〜〜の処理が長くならない限り、
ScreenFlip()があることによって、画面に出力される周期は〜〜の処理時間によらない、と考えていいんでしょうか?
なんか説明下手ですみません・・・。 たとえば、指数関数的に動く物体を作りたいとして、
〜〜の部分を「毎回n=n+1して、x^nの位置に画像を出力」という内容にしたとした場合、
ループが来るたびにnが増えるからx^nの計算の処理が多少だんだん増えていくと思うのですが、
もしその処理時間も画面出力に影響してしまったら、動きが時間の正確な指数関数にならないと思うのですが、
『ScreenFlip()によって、「処理が終わっても、規定時間δtが来るまでは画面出力しない」という仕組みが加わってるので、
処理時間に影響せず一定時間ごとに画面出力される。 ただし、もちろん 処理時間の方がδtを超えてしまったら、重くなるという別の影響は出てくる。』
というものだと解釈していいのでしょうか?
(すみません。アク禁中の代レスなので、返事できないかもしれません。)
0183名前は開発中のものです。
2008/12/02(火) 08:48:55ID:jLo5RDUc本文は読んでいない。
0184名前は開発中のものです。
2008/12/02(火) 08:53:50ID:l3NK/S0H0185名前は開発中のものです。
2008/12/02(火) 09:50:01ID:ptyOGcVX0186名前は開発中のものです。
2008/12/02(火) 21:13:42ID:xSROB0kK0187名前は開発中のものです。
2008/12/02(火) 22:13:19ID:g62jpxUX0188名前は開発中のものです。
2008/12/03(水) 05:14:23ID:Ts8WjI0J#include <stdio.h>
#include <windows.h>
void main (){
int cell=0,jinzo18=2,jinzo17=2,tensinhan=25,seimeiryoku=1;
int hikinobasi=0;
cell+=jinzo17;
for(hikinobasi=0;hikinobasi<30;hikinobasi++){printf("おお\n"); SleepEx(200,TRUE);}
printf("天津飯「まずい17号を吸収しやがった・・・チャオズ俺は死ぬかも知れない\n");SleepEx(2000,TRUE);
printf("セル「天津飯!!雑魚が何をするつもりだ!」\n");SleepEx(4000,TRUE);
printf("天津飯「新気功砲!!ハー」\n");SleepEx(200,TRUE);
printf("セル「(゚Д゚)ぬお!\n");SleepEx(200,TRUE);
while(tensinhan>0){
printf("セル「<`Д´>おのれー」\n");SleepEx(200,TRUE);
printf("天津飯「(; ゚Д゚)ハァー!」\n");SleepEx(500,TRUE);
tensinhan-=seimeiryoku;}
printf("天津飯「化け物め・・・・うう・・・・」\n");SleepEx(5000,TRUE);
printf("セル「むううう」\n");SleepEx(1000,TRUE);
printf("セル「こんな雑魚に足止め食らうとは」\n");SleepEx(4000,TRUE);
cell=jinzo17+jinzo18;
for(hikinobasi=0;hikinobasi<100;hikinobasi++){printf("おお\n"); SleepEx(50,TRUE);}
printf("完全体セル「すばらしい力だ 諸君!!」\n");
SleepEx(10000,TRUE);
}
0189名前は開発中のものです。
2008/12/03(水) 05:38:32ID:ecRDRm37空のサーフェスを作成 → 一旦バックバッファに文字列を描画 → バックバッファから空のサーフェスに文字列の画像を取得
こうして予め文字列を描画しておいたサーフェスから
毎回メイン処理でDrawGraphしているのですが、どうもスッキリしません。
しかもGetDrawScreenGraphの説明にもある通り透過色が使用出来ません。
DXライブラリでは作成したサーフェスに直接描画出来ないのでしょうか?
やりたい事は「同じ文字列を毎フレーム描画する処理を軽くしたい」だけなのですが、
文字グラフィックファイルを用意することは出来れば避けたいので、良い方法があったら教えて下さい1
0190189
2008/12/03(水) 05:45:19ID:ecRDRm37(例えば説明文等の)同一の文字列を毎フレーム描画する処理を軽くしたいが
文字グラフィックファイルを用意する以外で良い方法があったら誰か教えて下さいです。
0191名前は開発中のものです。
2008/12/03(水) 09:09:23ID:Zrkeui/rフォントハンドルを毎回読み込んだりしていない?
0192189
2008/12/03(水) 17:18:45ID:ecRDRm37お返事遅くなって申し訳ありません。
当方の環境ではDrawStringでやった場合のFPSが30くらいでDrawGraphにすると60になりました。
DirectX自体、文字描画にGDIを使っているのでビデオカードで処理できるBitBltの方が高速だと思っていました。数年前の知識ですが。。
低スペックでも快適に動くように作りたいので、DrawStringは極力使いたくないです。
0193189
2008/12/03(水) 17:29:14ID:ecRDRm370194名前は開発中のものです。
2008/12/03(水) 18:07:17ID:o+fnXJLeそれともPC環境が悪すぎる?
俺普通にDrawString使ってるけど別に遅くなった事ないよ?
普通に60FPS出てる。古いノートパソコンで。
最高でまぁ10行程度の表示しかしてないけど。
0195名前は開発中のものです。
2008/12/03(水) 18:30:58ID:JlppSG1I192の知識通り、今も文字列表示は遅いよ。
189の方法が適切だと思うし、他に方法を提示できないのは申し訳ないけど、
少なくとも文字列表示が遅いって前提でレスされると無駄だと思ったので口を出してみた。
0196名前は開発中のものです。
2008/12/03(水) 18:37:18ID:JlppSG1I○少なくとも文字列表示が遅いって前提を否定するレスは無駄だと
0197名前は開発中のものです。
2008/12/03(水) 19:17:52ID:o+fnXJLe別にテストしたわけじゃなくて、普通に使ってるだけなんだが。
文字列表示が遅いってのが前提なら、そもそもグラフィック表示だって遅いだろ。
グラフィック表示が遅いから他の方法はありますか? って質問があったとしたら
まず現在どういう環境でどれだけのグラフィックをどういう方法で表示させてるのか教えろってのは普通の流れだろ?
そこをかっとばしてグラフィック表示処理そのものを早くする方法を考えるのは無駄な話だ。
0198名前は開発中のものです。
2008/12/03(水) 19:27:15ID:zxrZF3eH今与えられた情報だけではなんともいえんな
0199名前は開発中のものです。
2008/12/03(水) 19:41:02ID:RJPTfL79「フォントの変更は行っていない」というのが、フォントの大きさやアンチエイリアス有無の変更は行っているかもしれないとも読める。
0200名前は開発中のものです。
2008/12/04(木) 00:31:01ID:jlPFeEOB文字列表示はグラフィック表示より遅いって常識知らないの?
そこは議論の余地なしだから言ったまで。
それと、テストじゃないなら>>194の報告は不適切。
まあ上記の前提を知らなかった故だからしかたないと言えばしかたないが、ややこしくなるのでなかったほうがよかったな。
情報は少ないが、前提を知っているば容易に共感できるし、解決方法を知っている人ならこの情報量でも回答できるかもしれない。
0201名前は開発中のものです。
2008/12/04(木) 00:33:46ID:GF73/yq8>文字列表示が遅いってのが前提なら、そもそもグラフィック表示だって遅いだろ。
(;^ω^)
0202名前は開発中のものです。
2008/12/04(木) 02:05:10ID:z7drhJqcDXライブラリは文字を描画する前にテクスチャにキャッシュしてるから
同じ文字なら2回目以降はほぼDrawGraphと同じコストで処理は完了する
キャッシュ用のテクスチャは512x512だから画面一杯に異なった文字を
描画するくらいしない限りは文字列描画特有の遅さは発生しないぞ
まあ、毎フレームキャッシュに無い文字を描画したら一般に言うところの
「文字列表示が遅い」ってのに当てはまるけど
0203名前は開発中のものです。
2008/12/04(木) 09:46:46ID:ggjOtlxcみなぎってきた、学校でゲーム作ってくる
0204名前は開発中のものです。
2008/12/04(木) 10:33:56ID:763fKCgi何を言ってるんだ君は。
60FPSで動いてるゲームに、一回のDrawString処理を追加しただけで30FPSにまで落ちたりするか?
普通はしないだろ?
じゃあどういう処理にしてるんだ? っつーレベルの話だぞ?
192が出してる情報はその程度って事。
0205名前は開発中のものです。
2008/12/04(木) 12:47:01ID:GF73/yq8>>202
分からない(・∀・)カエレ!!
0206名前は開発中のものです。
2008/12/05(金) 18:06:46ID:YY5q+8z/どれのことなのでしょうか?
一部のPCだと動かなかったりする時にこれを使えばいいらしいのですが……。
リファレンスを見た限りそれっぽいのがありませんでした。
0207名前は開発中のものです。
2008/12/05(金) 18:19:39ID:MN0oAg79ttp://www.dkut.flnet.org/dxlibwiki/?3D%B5%A1%C7%BD%A4%F2%BB%C8%A4%A6%A4%AB%A4%C9%A4%A6%A4%AB%A4%F2%A5%E6%A1%BC%A5%B6%A1%BC%A4%CB%C1%AA%C2%F2%A4%B5%A4%BB%A4%EB
0208名前は開発中のものです。
2008/12/05(金) 20:49:20ID:YY5q+8z/ありがとうございます。
SetScreenMemToVramFlag( FALSE );
と、
SetUse3DFlag( FALSE );
を使ったらよさそうなのでこの二つを使ってみようと思います。
0209名前は開発中のものです。
2008/12/06(土) 03:56:27ID:5bnbt+Lt垂直同期を使って処理していれば僅かな処理の遅さでFPSは半分になることがある
そしてGDIは遅い
>>189はDrawStringを使用せずに同等の文字描画処理をする方法を模索しているであって
デバッグをしてくれと言っているわけじゃないんだから君がムキになるのは頓珍漢な話
俺を含め解決策が分からない初心者が回答することが間違い
0210名前は開発中のものです。
2008/12/06(土) 04:17:22ID:MshHJhkd>DXライブラリでは作成したサーフェスに直接描画出来ないのでしょうか?
と明確に聞いてるぞ。
それを初心者が関係ない知ったか話をしてるとしか見えない。
「俺は平気だよ?」とか言う話もいらないと思うww
>>202もヒントになると思うけど多分新しい文字列を頻繁に表示しようとしてるんじゃないかな。
毎フレーム更新される数値を表示するって事も多いと思うし。
0211名前は開発中のものです。
2008/12/06(土) 06:11:31ID:VA5mVjgv数字ゲームとかあれ作ると面白そう
0212名前は開発中のものです。
2008/12/06(土) 09:55:12ID:DCsCuBVu0213名前は開発中のものです。
2008/12/06(土) 11:21:34ID:gOAp6PdOまあ任意のオフスクリーンバッファに描いてそれを転送したい、というのはわかるが
できる機能を追加するかDXライブラリをやめるしかないのでは。
0214名前は開発中のものです。
2008/12/06(土) 16:48:54ID:KujsLoK9公式などにクリックイベントのコードがなかったのでここで質問させてください
0215名前は開発中のものです。
2008/12/06(土) 17:16:43ID:t9JSHoeE↑で描画すると30フレームあたりまで落ちるんですが、SetWaitVSyncFlagをFalseにしてても同期するってあるんでしょうか?
待機を16200にすると60フレームになるので、同期でひっかかってるんだと思うのですが……
0216名前は開発中のものです。
2008/12/06(土) 17:19:10ID:KujsLoK90217名前は開発中のものです。
2008/12/06(土) 20:30:15ID:JBa6ugiY0218215
2008/12/07(日) 18:55:49ID:OyZdJ9xq0219名前は開発中のものです。
2008/12/08(月) 00:25:32ID:2qR4Oo16C言語というより、DXライブラリ言語でのプログラミングという印象を受けました。
DXライブラリを使ってプログラミングする場合は、
Cのほうは入門書を一通り読んだだけの知識でよくて、
あとはDXライブラリの使い方をきちんとやるほうがいいんですよね?
0220名前は開発中のものです。
2008/12/08(月) 00:31:03ID:A0APKyuo平行して勉強しなはれ。
0221名前は開発中のものです。
2008/12/08(月) 00:55:25ID:FYgRMyd9もろCで作ってるよ
printfが絵を表示する関数になるだけ
0222名前は開発中のものです。
2008/12/08(月) 03:17:20ID:tsVxmfWH「C言語 = printfやscanf、fopen等の標準関数」だと思ってるんならそれは間違いだ
0223名前は開発中のものです。
2008/12/08(月) 03:37:47ID:ghLgcWkzそれでいいと思うよー。
Cの文法なんて覚える事少ないし、入門書片手に取り掛かっちゃえば大丈夫。
今後も、プログラミングで何かを作る時、基本的にDXライブラリのような、外部のライブラリの使い方を覚えるって作業が大半になるよ。
入門書に書いてあるstdio.hのprintfみたいな標準関数を覚えるみたいに。
0224名前は開発中のものです。
2008/12/08(月) 11:27:49ID:tq0zLS+0>>>202もヒントになると思うけど多分新しい文字列を頻繁に表示しようとしてるんじゃないかな。
>毎フレーム更新される数値を表示するって事も多いと思うし。
それこそ仕様を見直せとしか言いようがないようなw
毎フレーム更新する数値や文章ならプレイヤーに全文しっかり読ませるためものじゃないだろうし。
0225名前は開発中のものです。
2008/12/08(月) 18:07:49ID:ofH1nP7I0226名前は開発中のものです。
2008/12/08(月) 18:55:26ID:dZklSLE80227名前は開発中のものです。
2008/12/08(月) 20:50:58ID:vtoynrkC60フレーム固定のシューティングを作ろうと思ったんですが
公式をみると「グラフィックがぶれがひどくなる」と書いてあって
ttp://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N13
で、実際にサンプル試してみたら
確かに時々ひっかかる感じが。
これって改善はできないものなんでしょうか?
0228名前は開発中のものです。
2008/12/08(月) 20:56:58ID:a6vLxw2w0229名前は開発中のものです。
2008/12/09(火) 01:42:49ID:osPjvukMint Time; を
LONGLONG Time; に、
Time = GetNowCount(); を
Time = GetNowHiPerformanceCount(); に
while( GetNowCount() - Time < 17) {} を
while (GetNowHiPerformanceCount() - Time < (1000000 / 60)) {} に
書き換えてみたら?
0230名前は開発中のものです。
2008/12/09(火) 13:46:02ID:uZqK3QytRPGやアドベンチャーゲームなら
1文字ずつゲーム内Windowに描画され、ゲーム内Windowごと表示非表示を切り替えられるって仕様は普通に有るでしょう
0231名前は開発中のものです。
2008/12/09(火) 15:29:12ID:hNxQdCPd文字表示ぐらいしかないと思うけど・・・
0232名前は開発中のものです。
2008/12/09(火) 15:52:37ID:R5xGo07t前はあったはずなんだが。
0233名前は開発中のものです。
2008/12/09(火) 17:32:59ID:PL50HxGw「スクリプトプレーヤー」の事じゃないかな。
0234名前は開発中のものです。
2008/12/09(火) 18:26:23ID:hNxQdCPdいきなりスクリプトのソースみろとか言われてもなにがなにやらって感じ
0235名前は開発中のものです。
2008/12/09(火) 19:12:36ID:PIQiSLzg見てもわかるの?
という疑問が湧く。
同じ動きをするものを自分で書けるくらいの技量がなければ結局読めない気がする。
他人のソース読むのが超苦手で自分で書いた方が早い俺限定の話だが。
0236名前は開発中のものです。
2008/12/09(火) 19:35:05ID:aLvm7Uo6アルゴリズムは同程度の技量がないと読めないけど、設計はそんなことないよ。
スクリプトプレイヤーのソース見たけどちょっと酷いな。
マジックナンバー、関数長すぎる、グローバル変数使いまくりetc...
たしかにこれ読めとか言われても俺も困る。
自作2Dライブラリ作ってたんだが、画像系の実装が終了したところで
面倒になってきたんでDXライブラリを使うことにした。おまいらよろしく。
0237名前は開発中のものです。
2008/12/09(火) 20:33:33ID:PIQiSLzgああ確かに設計は読みたいかも。
うまい人のクラス構成とかはみてみたい。
0238名前は開発中のものです。
2008/12/09(火) 20:44:39ID:HfON+uiV表面だけ見れば理解できるよね
0239名前は開発中のものです。
2008/12/09(火) 20:59:26ID:MCEWLRF6すいません、内部処理は一定化したかったので・・
>>229
ありがとうございます!
引っかかりが無くなりました。
タイマーの精度の問題だったみたいですね。
0240名前は開発中のものです。
2008/12/10(水) 15:43:30ID:LwDc2Tc0>>221
>>222
>>223
printfなどが関数だということを意識していませんでした。
まさに、C言語=標準関数のつもりで勉強していました。
外部ライブラリを使うのだから、それから提供される関数の使い方を勉強するのは当たり前ですね。
プログラミングに対する疑問が少し解けました。どうもありがとうございました。
0241名前は開発中のものです。
2008/12/11(木) 09:38:29ID:oww0q0NNループ表示する背景の一部分だけを拡大表示したいです。
0242名前は開発中のものです。
2008/12/11(木) 10:38:54ID:qrB4r20jそれをしてから拡大表示させればいいんじゃないかな。
前提条件として矩形範囲のみって事になるけど。
0243名前は開発中のものです。
2008/12/11(木) 11:00:28ID:oww0q0NNなるほど、ありがとうございます。矩形なのでその辺は大丈夫です。
でもアクションゲームみたいに、リアルタイムにバックグラウンドをスクロールさせつつ、
拡大率を変えてバックグラウンド表示するのはその方法ではコストが掛かり過ぎて無理なようですね。
DrawExtendGraphの描画元矩形指定関数があれば一発なのに><
0244名前は開発中のものです。
2008/12/11(木) 11:23:00ID:qrB4r20jそれじゃ無理だね。
それならいっそ、
背景を普通の大きさで書く → 画面の描画範囲を設定(SetDrawArea) → 背景を拡大して書く
ってやってみるのはどうだろう。
背景を二回描くから、やり方によってはコストかかるけど……。
0245名前は開発中のものです。
2008/12/11(木) 12:23:15ID:Otp3maXe0246名前は開発中のものです。
2008/12/11(木) 12:49:25ID:oww0q0NNそうですそうです、元画像の一部分を拡大表示したいんです。
>>245
おお!ありがとうございます。そんな関数があったんですねw
面倒でも自分でDxLib.hをチェックしないと駄目ですねw
0247名前は開発中のものです。
2008/12/12(金) 18:14:48ID:dqaLLhhf800 x 600 ウィンドウモードで作っているんですが
2Dゲームは 640 x 480 が基本だと聞きました。
800x600だと何か不都合でも起こるんでしょうか?
0248名前は開発中のものです。
2008/12/12(金) 19:08:10ID:e0uVhp4S0249名前は開発中のものです。
2008/12/12(金) 20:15:13ID:dqaLLhhf800x600だと特定の環境ではちらつきが酷いとかだったら嫌だなぁと思いまして
0250名前は開発中のものです。
2008/12/12(金) 20:24:18ID:yokHYtBf処理速度の問題とユーザの環境の問題
ちなみにカラーモードも256色パレットモードが基本だった
しかしそれは過去の話
今はPCのスペックは十分だし、800*600の画面モードの無いPCの方が少ないと思うから問題ないかと
0251名前は開発中のものです。
2008/12/12(金) 21:25:42ID:aXKygAOwCRT使いなんでわからないんだけど
液晶の場合、画面サイズに合わない画面モードの表示ってどうなるの?
1)全画面に拡大されてぼやける
2)表示分だけ使われて余白は黒塗りになる
0252名前は開発中のものです。
2008/12/12(金) 21:28:59ID:8ZHcqCMQA.液晶の設定しだい
0253名前は開発中のものです。
2008/12/12(金) 22:00:48ID:J3zydYCSうまく言えないんだけど
player.cpp内でint宣言をして、void player()で増減させる。
そして
「enemy.cpp内」で「player.cppのvoid player()」で増減したint変数を使用して作りたい判定があるんだけど。
こういうのってやっぱり出来ないのかな?
0254名前は開発中のものです。
2008/12/12(金) 22:09:20ID:r3WCUutT0255名前は開発中のものです。
2008/12/12(金) 22:12:35ID:dqaLLhhfenemy.cppの冒頭にextern宣言すれば判定にも使えるようになるよ
0256名前は開発中のものです。
2008/12/12(金) 22:19:36ID:J3zydYCSああそれ忘れてたww
おもいっくそ素材ファイルの読み込みで使ってたのに
ありがと、助かった
0257名前は開発中のものです。
2008/12/12(金) 22:34:39ID:ztObze9Yint i;
void player(){ i += 1; }
-- enemy.cpp --
extern int i;
void enemy(){ if(i) ・・・ ;}
0258名前は開発中のものです。
2008/12/12(金) 22:49:50ID:aXKygAOw即レスサンクス。
じゃあプログラムする側としては
あんまり気にしても意味無いんだ・・
勉強になりますた。
0259名前は開発中のものです。
2008/12/12(金) 23:04:32ID:e0uVhp4S最近流行りの低価格ノートPCとかだと、どんな感じなんだろう?
縦600くらい?
0260名前は開発中のものです。
2008/12/13(土) 01:45:20ID:E/1bppJyDeleteGraph( enemy01 ) ;
}
else if(hitS < hit ){
PlaySoundMem( hit_test , DX_PLAYTYPE_BACK );
shotflag = 0;
enemy01_Life -=1;
}
このコードで、最後のenemy01_Life -=1の判定を一回だけ判定場合ってどうすればいいの?
ダメージ判定だけがどうしても残ってしまう
0261名前は開発中のものです。
2008/12/13(土) 02:02:18ID:Swo2xfir具体的に何がしたいが、何が起こってるのかを示せ。
コードにはコメントを入れろ。第三者には何をやってるか分からない。
んで、だ。
ショットが命中した時、
(1)ショット自体を消す(敵に当たると弾が消える)
(2)敵ごとにカウンタを作っておき、「一度当たったら10フレームの間は無敵」とかにする
(3)弾ごとに自分がどの敵に命中したかを覚えておき、2度目は命中扱いにならないようにする
こんな感じ?
0262名前は開発中のものです。
2008/12/13(土) 02:20:00ID:E/1bppJy玉の画像は消えるんだけど、当たり判定だけが「次にショットボタンを押すまで」残るんだ。
何がしたいかは、「玉一つにつき一回だけダメージ判定」をしたい。
ショットコード↓
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;
0263名前は開発中のものです。
2008/12/13(土) 02:39:09ID:DJ2YFwb1判定のコードが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 ) ;
}
0264名前は開発中のものです。
2008/12/13(土) 02:43:12ID:DJ2YFwb1if(shotflagが真)
{
//ここに判定のコードも書く
}
0265名前は開発中のものです。
2008/12/13(土) 02:56:17ID:E/1bppJyショットコード内で
if( shotflag == 1 ){ //ショットフラグONになったら
この部分に判定コード(>>263のGetGraphSize〜DeleteGraph( enemy01 ) ;)
}
を入れないとダメってこと?
0266名前は開発中のものです。
2008/12/13(土) 03:06:51ID:DJ2YFwb1shotflagって弾があるかないかのフラグでしょ?
今のままだとshotflagが0の時にも判定される
あといろいろ突っ込みどころがあるけど
そういう書き方してると確実にスパゲティソースになる
0267名前は開発中のものです。
2008/12/13(土) 11:56:05ID:E/1bppJyマジかw
プログラム初心者で全然分からんから適当に組んでる
既にややこしくなってる
0268名前は開発中のものです。
2008/12/13(土) 12:55:29ID:6PMqtPt6実際に作って慣れればいいのだ。
0269名前は開発中のものです。
2008/12/13(土) 13:01:52ID:E/1bppJyそのとおりにやってみたけど
やっぱり玉一つで「次にショットボタンが押されるまで」の間に複数回攻撃判定が出ちゃう・・・。
0270名前は開発中のものです。
2008/12/13(土) 13:08:45ID:WaQfNGav初心者なら仕方なら、一回スパゲティコード書いて捨てる経験もしてみるといいかもね。
それがいやならオブジェクト指向の簡単な本があるからそれ読んでみるといいよ。
オブジェクト指向とゲームは相性がよい部類。
ためしにオブジェクト指向で書き直してみようかと思ったけど、半分ほど書いた時点で
長くなった上に果たしてこれを理解できるのかという疑問がわいてきたので捨てた^w^)
0271名前は開発中のものです。
2008/12/13(土) 13:10:15ID:WaQfNGav0272名前は開発中のものです。
2008/12/13(土) 13:19:00ID:klDdA96T素人の俺がいうのもなんだけどむしろ相性はよくない方だと思うけど、経験が足りないからかな?
一応ゲーム作りはDXライブラリ使ってもOO(OO風ともいう)を意識して書いてるけど、
C++の便利な機能(クラスや継承程度)を使うくらいでこれぞOOって感じでもないなぁ。
C#でちょっとしたツールなんか作るとOOだなぁって感じるけど。
0273名前は開発中のものです。
2008/12/13(土) 13:48:06ID:WaQfNGavツールを作る件はオブジェクト指向じゃなくて提供されるオブジェクト指向ライブラリが優秀
ってだけだと思う。
>相性はよくない方
どの辺が?ならデータ指向で作る?手続き指向で?俺は絶対いやだけどなー。
パラダイムってのはつまるところコードの整理術なわけで、それを感じないってのは別に
不思議じゃないよ。
さっきでたコード、弾丸と敵との当たり判定がでてきだけど、
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 ) )
{
/*ヒット処理*/
}
変更にも強く、なおかつコードはわかりやすくなる。
0274名前は開発中のものです。
2008/12/13(土) 17:56:36ID:E/1bppJyいっそコレ仕様にすっか
敵の端っこにショット当てた状態でショットボタンを押さないと一定時間大ダメージ!
画期的と言えば画期的だが生憎ただのバグだ。
0275名前は開発中のものです。
2008/12/13(土) 18:54:39ID:DJ2YFwb1今じっくり見たけど
>>262のif( shotflag == 1 )のブロックを>>262の一番最後で閉じるか
else if(hitS < hit )のブロックの中でhitSを条件満たさないように変更する
これで正常になると思うが、違ったらすまそ
0276名前は開発中のものです。
2008/12/13(土) 18:56:46ID:O5bnNqrG弾が生きているときだけ判定をすればいいわけだよね。
>>>264が言う通り当たり判定をするブロックを if ( shotflag == 1 ){}で囲めば出来ると思うんだけどなあ。
弾が死んでても玉の座標は留まって、さらにshotflagが機能していないから(セットが上手く行っていないか判定処理に考慮されていない)
何度も当たっていると思われるんだけど。
てか敵をデタッチするのにDeleteGraph()で画像そのものを削除するって激しすぎないか?w
if ( enemy_alive ) { Task(); } // 敵が生きているときのみ敵に関する処理を行う
とかにした方が良いと思うんだが。
0277名前は開発中のものです。
2008/12/13(土) 18:59:29ID:O5bnNqrG0278名前は開発中のものです。
2008/12/13(土) 21:59:39ID:E/1bppJy当たり判定は座標で行ってたから
http://www.uploda.org/uporg1853070.jpg
この画像の様に(hit>hitS)になってる時に判定が出て、その判定が次玉を出すときまで残るんだ。
だからこの画像はhitは21でhitSは13.9.....ってなってるので次に玉が出るまで(hitSの数値が変わるまで)凄い勢いでenemy_Lifeが減り続けてる
敵に当たった瞬間にhitSをリセットすればいいのかな?
0279名前は開発中のものです。
2008/12/13(土) 22:22:05ID:O5bnNqrG0280名前は開発中のものです。
2008/12/13(土) 22:28:29ID:E/1bppJyパスは274
問題のソースはenemy_moveとplayerにあります。
初心者だからすげー読みずらいと思う
0281名前は開発中のものです。
2008/12/13(土) 22:30:08ID:DJ2YFwb10282名前は開発中のものです。
2008/12/13(土) 22:32:35ID:E/1bppJyうん、その通りにやってみても何故か結果は変わらずだった
0283名前は開発中のものです。
2008/12/13(土) 22:32:46ID:O5bnNqrGそれは当たり判定をする必要があるとき、
つまり弾と敵が生きているときに毎フレーム計算すればいい
弾の座標を遥か彼方にリセットしたりhitSを直接いじくって
当たり判定が真にならないようにすれば確かに上手く行くだろうけど
本質的には当たり判定をする必要が無いときに判定しているのが問題なんじゃないの?
0284名前は開発中のものです。
2008/12/13(土) 22:45:11ID:E/1bppJy毎回計算して判定してるんだけど
ヒットした時に計算が次玉出すときまで止まっちゃう
0285名前は開発中のものです。
2008/12/13(土) 22:47:31ID:O5bnNqrG全然修正されてないじゃないかw
「enemy_move.cpp」の
GetGraphSize( enemy01 , &SizeX , &SizeY ) ; //グラフィックのサイズを取得
の前に一行追加して
if ( shotflag == 1 ){
GetGraphSize( enemy01 , &SizeX , &SizeY ) ; //グラフィックのサイズを取得
とする。
次に、その下のほうの
int Color ;
の前に閉じ括弧を追加して
}
int Color ;
とする。
つまり、当たり判定をしている部分を
if ( shotflag == 1 ){
}
で括る。
それとインデントをきっちりしないとネストレベルが分からなくなるよ。
0286名前は開発中のものです。
2008/12/13(土) 22:53:39ID:klDdA96TんーていうかC#の件は、ライブラリが優秀で作りやすい=オブジェクト指向って事じゃなくて、
コントロール一つ設置してイベントを呼び出すってだけでオブジェクト指向を感じる。
もっと具体的に言えばイベントハンドラ(やデリゲート)がオブジェクト指向だなぁって。
提示してくれた下のコードも、それだけじゃオブジェクト指向を感じない。
結果的に言わんとしようとしてることはわかるけどね。
ただそれだけじゃただのサブルーチン呼び出し。
言いたいのはそのコードだけを見てオブジェクト指向じゃないって事じゃないし、
自分でゲーム作る時もオブジェクト指向で書きたいわけだけど、
概念的に無理やり感があるのと、非オブジェクト指向でも書けるってので、
GUIアプリと比べて相性がいい方ではないって事。
0287名前は開発中のものです。
2008/12/13(土) 23:05:58ID:E/1bppJyおおおおおおお!!!ありがとおおおおお
一つのライフしか減らないwwwwwww
すげー!ショットフラグがONの時にしか判定しないようにするってそういう事だったのかwww
ちなみにプログラムの書き方?はこんな感じでいいのかな?
0288名前は開発中のものです。
2008/12/13(土) 23:22:28ID:HImZ/jwv俺は気持ち悪いからconstでやってるわけだが
0289名前は開発中のものです。
2008/12/13(土) 23:33:22ID:Swo2xfir・歴史的な経緯とかはあるかも
・特に理由が無ければconstでいいんじゃね?
・defineじゃないと出来ないこと、スマートなこともあるから気をつけろ
0290名前は開発中のものです。
2008/12/13(土) 23:34:35ID:Swo2xfirとりあえず、何でもいいので1つ完成させてからじゃないと
定番の書き方とかは説明しても意味が無いし、おそらく理解できないと思う。
0291名前は開発中のものです。
2008/12/13(土) 23:42:11ID:MCFYNnvA気を付けないと間違った結果が返ってくるハメになるが
0292名前は開発中のものです。
2008/12/14(日) 00:49:54ID:UsQn7VQkおめでとう。お世辞にも綺麗なソースとは言えないけど、
モノとして動いているということはとても大事なこと、すごいことだよ。
作り続けていれば段々上手くなって行くはず。
あと>>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 ) ; /* ここに */
} /* 移動 */
}
まずはインデント(ソースコードの段落処理)から始めよう。
0293名前は開発中のものです。
2008/12/14(日) 01:24:21ID:2jf1rfQx0294名前は開発中のものです。
2008/12/14(日) 07:22:24ID:HIyGZizOさっき提示したコードの価値をただのサブルーチン呼び出しとか
言っちゃってる時点でなんかもう全然わかってない。
あれはShotオブジェクトにEnemyとの当たり判定を”頼んで”いるんだよ。
この違いがわからないんならいつまでたっても素人のまま。
というか
>もっと具体的に言えばイベントハンドラ(やデリゲート)がオブジェクト指向だなぁって。
デリゲートなんか関数型プログラミング言語の概念の拝借だよ。
これがオブジェクト指向!なんてデザインパターンこそがオブジェクト指向!というのと同じくらい笑えるんだが。
>概念的に無理やり感があるのと、非オブジェクト指向でも書けるってので、
>GUIアプリと比べて相性がいい方ではないって事。
どこが無理やりなんだよw
さっきのコード、Enemy,Player,Shotというクラスを抽出できるけど、これのどこが無理やりなんだよ。自然だろうに。
それとGUIアプリだって手続き型で書ける。イベントハンドラやデリゲートはオブジェクト指向の一機能を使って
実装されてるけれど、それ自体はオブジェクト指向じゃない。だからVBでもGUIアプリが組めるわけだ。
ここまで言ってゲームをオブジェクト指向で組むのは向いてないと言うならもうしらね
というかもっと勉強してくださいいやマジで
0295名前は開発中のものです。
2008/12/14(日) 09:52:32ID:1zOFBaLDでもゲームとオブジェクト指向は相性いいと思うよ。
0296名前は開発中のものです。
2008/12/14(日) 11:03:33ID:DFScKmBlオブジェクト指向になるのか? 実質的に全く等価なのに?
>>294の言うオブジェクト指向って何なんだ
0297名前は開発中のものです。
2008/12/14(日) 11:38:14ID:NFgVN8d30298名前は開発中のものです。
2008/12/14(日) 12:16:50ID:h39ltAFv未だにオブジェクト指向が理解できん。
273で言うならちょっと表へ出ろレベル以下だ。
0299名前は開発中のものです。
2008/12/14(日) 17:59:02ID:17g8Fdx4突っ込むところが多すぎるww
「ShotオブジェクトにEnemyとの当たり判定を”頼んで”いる」だけでオブジェクト指向とかww
ところで、ゲームをオブジェクト指向で組むのは向いてないって話題は誰がしてるの?してない気がする。。
0300名前は開発中のものです。
2008/12/14(日) 18:01:31ID:17g8Fdx4たぶんオブジェクト指向入門書にはそういう概念的な事が書いてあると思うけど、
オブジェクト指向って本当は概念の事じゃないよ。
もっと具体的なプログラミングの事。
「ShotオブジェクトにEnemyとの当たり判定を”頼んで”」も別にオブジェクト指向じゃないww
0301名前は開発中のものです。
2008/12/14(日) 18:44:57ID:CDnr1Yv3そうなん?
レシーバか引数が違えばそれは別物だっていう名前空間の概念がまずあって
そいつを楽に実現するための補助がクラスやテンプレートやインターフェースなんだって認識だったが
具体的なプログラミングの事を言うなら言語がクラスベースかどうかで相当違ってくると思うし
あと>>299最後の行は>>272
0302名前は開発中のものです。
2008/12/14(日) 18:58:29ID:AhiFoxCUそれで動かしたらオブジェクト指向。
そう思っている俺が通りますよ。
0303名前は開発中のものです。
2008/12/14(日) 19:02:22ID:ST598Jfh>>272は基本的に用語を間違っているがそれに気付いていない
で、親切に答えてくれた>>273と会話がかみ合っていない
>>272はVBライクなコンポーネント貼りつけとプロパティ設定での
プログラミングスタイルとオブジェクト指向を混同している
また、Windowsのイベントドリブン構造を言語仕様と勘違いしてる
-まとめ-
Q.DXライブラリを使うとVBでアプリ作るみたいにコンポーネント貼ってプロパティ設定だけでプログラムできますか?
A.できません
Q.イベントドリブンがオブジェクト指向ですよね?
A.違います
Q.イベントドリブンでゲームプログラムは書けますか?
A.書けます
Q.オブジェクト指向でゲームプログラムは書けますか?
A.書けます
0304名前は開発中のものです。
2008/12/14(日) 19:18:54ID:mrF69eoK>>272の
>DXライブラリ使ってもOO(OO風ともいう)を意識して書いてるけど
っていうのはDXライブラリ自体がC(非OOPL)で書かれてるけどって意味だろ
>>303こそ勘違いしてるだろ
0305名前は開発中のものです。
2008/12/14(日) 19:22:31ID:17g8Fdx4メッセージ呼び出しっていう機能はないし、それに似た機能はメソッド呼び出し(=関数呼び出し)でしかないし。
組み込み型もオブジェクトじゃないしいきなりint main(){}で始まるしww
0306名前は開発中のものです。
2008/12/14(日) 19:33:16ID:5menpJL80307名前は開発中のものです。
2008/12/14(日) 20:33:18ID:P8eg6rH1それとも人それぞれ考え方が変わるモノなの?
0308名前は開発中のものです。
2008/12/14(日) 20:46:29ID:uHyIUedUDXライブラリのスレでオブジェクト指向を熱っぽく語る男の人って……
0309名前は開発中のものです。
2008/12/14(日) 21:04:56ID:SEtb8HBj/ \ /\ キリッ
. / (ー) (ー)\
/ ⌒(__人__)⌒ \ < 厳密に言えばC/C++使ってる時点で
| |r┬-| | ピュアなオブジェクト指向は無理だけどな。
\ `ー'´ /
ノ \
/´ ヽ
| l \
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、.
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
____
/_ノ ヽ、_\
ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒)
| / / / |r┬-| | (⌒)/ / / // だっておwwwww
| :::::::::::(⌒) | | | / ゝ :::::::::::/
| ノ | | | \ / ) /
ヽ / `ー'´ ヽ / / バ
| | l||l 从人 l||l l||l 从人 l||l バ ン
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、 ン
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
0310名前は開発中のものです。
2008/12/14(日) 21:23:33ID:a4AnO2Clあ、スレ間違えました!すみません
0311名前は開発中のものです。
2008/12/14(日) 21:47:10ID:17g8Fdx4int main()ってオブジェクト指向的になんなの?www
0312名前は開発中のものです。
2008/12/14(日) 22:41:43ID:ST598Jfh何がん〜・・・?だ
そんな事だから
>>286
>んーていうかC#の件は、ライブラリが優秀で作りやすい=オブジェクト指向って事じゃなくて、
>コントロール一つ設置してイベントを呼び出すってだけでオブジェクト指向を感じる。
とかマヌケな事を書いてしまうのさ
>>303のまとめでいいんだよ
RADツールと言語の区別もついてない質問に対して、みんなにちゃんと答えてもらってる事をまず理解するべきだな
元々スレ違いだ、感謝こそすれ相手を見下すとか勘違いすぎるんだよww
0313名前は開発中のものです。
2008/12/14(日) 23:20:03ID:17g8Fdx40314さらに話がちょいズレの人
2008/12/15(月) 00:08:20ID:JJfbOdAjさらに様々な言語にそれらのOOが混同されながら導入される過程で
どんどんと複雑に入り組んでいってる。
(しかも、良くも悪くも元がProgramming言語における概念だから、
普通の言葉に意味を汲み出す過程で色々とノイズや過不足が起こる。
さらに、OOAだ、OODだなんだので純粋なOOよりも
とりあえず使える道具としてのOOが今のメインストリームだと思うし。)
だから、結果的には、人によってOOの概念も色々な違いがある。
あと、そんな訳だからと言う訳じゃないがCだって、OOPLは可能。
ただし、言語的なサポートが対応してないから、
様々な工夫をする必要があったりする。
また、逆の意見としても>>305のint main()で始まるからオブジェクト指向じゃない。
ってのもどうかと思う。
OSも含めたアプリケーションをProgramとみるならば、
int main()は、ズバリそのアプリの呼び出しメッセージと見做しても誤解ではないしね。
あと、>>301の言ってる事は別にOOじゃないと思うぞ。
それらは単に多態性とかであって、OOとしてあったら好ましいが、
さらに>>300のプログラミングの概念と具体的なプログラミングが別モノっぽいのも違うんじゃない?
基本アセンブリでやるでもない限りは、プログラムは概念に概念を積み上げた産物だし、
それらの概念を如何につかうか?どのように解釈するか?がプログラミングでしょ。
だからこそ、gotoは悪!!やJavaにはポインタはありません!!みたいな話も出てくるわけでww
0315名前は開発中のものです。
2008/12/15(月) 00:20:00ID:xNu63hXkそれなりに作れてメンテできればいいかな
ピュアなのがいい人はその人が納得する言語なりなんなりを使えばいいし
0316名前は開発中のものです。
2008/12/15(月) 00:48:36ID:syJyrDB+時間のとり方について質問があります
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R7N1
のサイトを見て時間所得して表示までできたのですが、ボタン(たとえばスペースボタン)を押して時間を最初からやり直すのはどうすればいいでしょうか?(キー入力状態の取得はできています)
日本語わかりずらかったらすいませんm(_ _;)m
0317名前は開発中のものです。
2008/12/15(月) 00:52:41ID:r0Y4Aqo3ゲーム内ではこっちを使う = GetNowCount();
if (ボタンが押された) ゲーム内ではこっちを使う = 0;
0318317
2008/12/15(月) 00:57:14ID:r0Y4Aqo3int ゲーム内ではこっちを使う;
int 前にリセットした時間;
int now = GetNowCount();
ゲーム内ではこっちを使う = now - 前にリセットした時間;
if (ボタンが押された) { ゲーム内ではこっちを使う = 0; 前にリセットした時間 = now; }
0319名前は開発中のものです。
2008/12/15(月) 05:27:51ID:dny0TB5Oいや、スレチでもないぞ。ライブラリ作者の古い作品だから
0320名前は開発中のものです。
2008/12/15(月) 11:37:12ID:gYDVxSnYif( shot->hitTest( enemy ) )
{
/*ヒット処理*/
}
って書くとたしかに変更に強くわかりやすくなるけどそれがOOだっていうのは尚早だよ。
hitTest()の中身は結局上と同じ事してるんだから。
だからその部分がOOだって言われるとただのリファクタリング手法でしかない。
もしその部分だけでOOだっていえるならGUIアプリだって
TextBox tb = new TextBox;
list.add(tb);
ほら、同じ。
でも両方ともただオブジェクトを渡してるって事実しかないよ。
それを推しておきながらデリゲートだけじゃOOじゃない!っていうのは横暴だなぁ。
ちなみにVBは今はOOPLだよ。
OOは議論が起きるくらい曖昧なところもあるけど、やっぱりカプセル化・継承・ポリモーフィズムの3つは最低限主張すべきだね。
個人的にはわざわざなんでカプセル化なんてあるのか疑問だけどw(隠蔽や最小の原則なんかは構造化言語からずっとあった)
0321名前は開発中のものです。
2008/12/15(月) 11:46:55ID:gYDVxSnY煽るわけじゃないけど流れを読んできてなんでいきなりWindowsのイベントドリブンが出てくるのかなって思ったんだけど、
きっと>>305のメッセージ呼び出し機能って言葉からそう思ったのかな?
たしかにイベントドリブンもメッセージっていうけどOOのメッセージっていうのは全く別物だよ。
純粋なOOPL(Smalltalkなど)ではメッセージ機能っていうのがあるんだ。
メソッド呼び出しに似てるけどちょっと違う。
C++ではメンバ関数、Javaではメソッド呼び出しで実現してるけどね。
詳しくは自分で調べてみて。
0322名前は開発中のものです。
2008/12/15(月) 13:36:35ID:Mi5wQEEl>>286
>コントロール一つ設置してイベントを呼び出すってだけでオブジェクト指向を感じる。
>もっと具体的に言えばイベントハンドラ(やデリゲート)がオブジェクト指向だなぁって。
いや、Windowsのイベントドリブン構造の事だ
読めばわかる
0323名前は開発中のものです。
2008/12/15(月) 17:20:30ID:k3xYLtfr0324名前は開発中のものです。
2008/12/15(月) 18:27:06ID:VbZykIE50325名前は開発中のものです。
2008/12/15(月) 20:55:40ID:0kk0L8Suint WINAPI WinMain(うんたらかんたら〜){
Application App;
App.Run();
return 0;
}
Applicationのインスタンスが生成されてる間はアプリが生きてる。
App破棄と同時にアプリも終了する、この形がいちばん美しいと思う。
0326名前は開発中のものです。
2008/12/15(月) 21:40:30ID:fyQ9eFTJシングルスレッドであれば、確かに良いアイディアだと思う。
0327名前は開発中のものです。
2008/12/15(月) 21:43:08ID:WW1gkqvT0328名前は開発中のものです。
2008/12/15(月) 23:22:35ID:A6pVWDv7中でタスクマネージャー的なものでCPU毎に負荷分散させているかもしれんぞ?
0329名前は開発中のものです。
2008/12/16(火) 00:20:42ID:fzHt/ZSS0330名前は開発中のものです。
2008/12/16(火) 00:26:55ID:JBSSxUHl用語が適当すぎるよな。
メモリを占拠した実体→「オブジェクト」
コンパイルして出来るファイル→「オブジェクト」
自分自身で処理させる論理機構→「オブジェクト」
名前付けたやつちょっとツラ貸せっていうか
昔、書籍読んだときさっぱり意味わからんかったぜ・・
0331名前は開発中のものです。
2008/12/16(火) 00:44:36ID:o3pFEybH0332名前は開発中のものです。
2008/12/16(火) 01:58:01ID:r2TMQqJU0333名前は開発中のものです。
2008/12/16(火) 04:02:55ID:dNyohwYS0334名前は開発中のものです。
2008/12/16(火) 11:37:43ID:IA9CyF+Nオブエクとは「物」と訳される。曖昧さの象徴である。
頭の中でイメージしなさい。
物と呼ばれる、段ボール箱「みかん箱」がたくさんある。
みかん箱の中身は隠されている、知らなくて良い。
みかん箱を紐で結ぶ事が「プログラム」である。
みかん箱には切替スイッチが付いている、それで位置、色、大きさが変化する。
みかん箱が「オブジェクト」である。
0335名前は開発中のものです。
2008/12/16(火) 14:57:03ID:j+OyGE8J0336名前は開発中のものです。
2008/12/17(水) 01:37:25ID:SDA7SaR9簡単に言うと
バカでも切り替えスイッチをポチって押せば変化する事が出来る。
けどその変化する「仕組み」を理解する必要は無い。
って事?
オブジェクト指向あんまよく分からないけど、そうなると定数#defineって簡単なオブジェクト指向に入るの?
例えば
#define SPEED 25//数値を変えると速度が変えられます。
ってあったら数字を変えるだけで変化が実装できるし。
なんか違うかw
0337名前は開発中のものです。
2008/12/17(水) 02:09:42ID:adQIUXL6それだけだとただのブラックボックス化。
OOの一部ではあるけどCの関数だってブラックボックスでしょ?
0338名前は開発中のものです。
2008/12/17(水) 02:33:05ID:S1ZUobQvDrawGraphとかDrawTurnGraphとかDrawExtendGraphとかDrawRotaGraphとかDrawRotaGraph2とかDrawModiGraphとか
あれみんな同じ重さなのかな
あと、やっぱ画像の大きさと重さにも関係あるのかな
あと、同じ四角のグラを表示させるのでもその四角のグラ用意して読み込んで表示させるのと
DrawBoxで表示させるとでは重さは変わらないのかな
0339名前は開発中のものです。
2008/12/17(水) 02:38:22ID:S1ZUobQv0340名前は開発中のものです。
2008/12/17(水) 02:53:08ID:dezoAnwU>>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
0341名前は開発中のものです。
2008/12/17(水) 02:59:26ID:dezoAnwU自分で実際に比べてみればいいんじゃね
0342名前は開発中のものです。
2008/12/17(水) 03:20:54ID:adQIUXL6”重さ”ってなんだ?^^;
ソース見てベンチ測って見ればいいじゃん。
0343名前は開発中のものです。
2008/12/17(水) 06:22:20ID:S1ZUobQvその発想はなかったわ
そんなこといままでしたことなかったからな
面倒臭さと相談してやるかどうか考えてみる
0344名前は開発中のものです。
2008/12/17(水) 07:31:49ID:dezoAnwUやるならGetNowHiPerformanceCount()を使うのはどうだ?
で、計測した方法と結果をここに書けば聞きっぱなしじゃなく他のやつの参考にもなる
0345名前は開発中のものです。
2008/12/17(水) 08:18:15ID:/BQwBqZh「画像を減算合成→重ねて加算合成」で実装すると、色深度が16ビットの時汚くなるし、描画コストも倍になるんですが……
0346名前は開発中のものです。
2008/12/17(水) 20:28:28ID:S1ZUobQv0347名前は開発中のものです。
2008/12/18(木) 10:36:19ID:Gli++Azx__int64 を使うならそれだね。
0348名前は開発中のものです。
2008/12/22(月) 14:30:15ID:3lSGgVQCDXライブラリ3Dとは別ものなのかね?
0349名前は開発中のものです。
2008/12/22(月) 14:38:38ID:fWgsLNUU0350名前は開発中のものです。
2008/12/23(火) 10:53:03ID:0Fgrfb5XDirectXっつーやつはすごいな
ダブルバッファリングっつーのがあれば
MSXのころ悩んでたことがほとんど悩まなくていいじゃんね。
スクロールすら画像を移動するだけって最強すぎ。
0351名前は開発中のものです。
2008/12/23(火) 12:05:58ID:UbzH2xVfちょっ、MSXの頃だってダブルバッファリングしてたっつうのw
MSXはページ切り替えできたから、最高に楽だったわ
まあ、ハードウェアスクロールがあればもっと良かったが仕方ない
0352名前は開発中のものです。
2008/12/23(火) 12:16:16ID:0Fgrfb5Xそうか
それはすまんかった
あー。そういえばあったような気がしないでもないな。
でも俺の技術では処理速度が遅くてスプライトを動かす程度しかできなかった
スクロールとかもってのはか。
0353名前は開発中のものです。
2008/12/23(火) 15:26:44ID:9N5u30T9もう覚えてないやw
0354名前は開発中のものです。
2008/12/23(火) 16:45:08ID:SQBujvLn利用してた気がしないでもないが。
0355名前は開発中のものです。
2008/12/23(火) 17:12:48ID:VOrvPW1PあとはAVGの絵や3D迷路の表示とか。
アクション系のゲームには使わなかったな。
0356名前は開発中のものです。
2008/12/23(火) 17:42:12ID:1h1OeV87ロゴとかが生成される様子が眺められるんだよな。あれはあれで楽しかった。
0357名前は開発中のものです。
2008/12/23(火) 17:47:08ID:0Fgrfb5XでもDXライブラリ使ったらそんなことまったく考えなくてよかったから
カルチャーショックだった。
0358名前は開発中のものです。
2008/12/23(火) 19:15:26ID:5et0/vdDま、MSXBASICのノリでかる〜く作っちゃえ。
0359名前は開発中のものです。
2008/12/23(火) 20:09:58ID:LP/OttsW0360名前は開発中のものです。
2008/12/23(火) 22:47:31ID:fMIdyvOB0361名前は開発中のものです。
2008/12/24(水) 00:56:47ID:DPn+CnyU「雑誌掲載のソースコードを打ち込んでも自分のマシンだと動かない」っていうのが
少なくなったって印象があったなあ。
まあ、MSX自体のバージョンアップがあって、その栄光も一瞬だったんですけどね!
>359
まだ20代の真ん中くらいだよ!
0362名前は開発中のものです。
2008/12/24(水) 01:58:38ID:fELrH+/v「自分で作ったプログラムが他人のPCでは動かない」っていうのが
少なくなった…………かな?
0363名前は開発中のものです。
2008/12/24(水) 05:58:03ID:IOaM1VJpCPUやビデオをアップグレードするには、PCをまるごと買い換えるのが基本だったり
お殿様商売の時代だったなあ
0364名前は開発中のものです。
2008/12/24(水) 06:59:35ID:S9NW4iC4>>351
MSX1なのか2なのか2+なのかターボRなのかどのスクリーンモードなのかで話が違ってくるし
ここはDirectXのスレじゃなくDXライブラリのスレだぜ!
0365名前は開発中のものです。
2008/12/24(水) 09:24:20ID:WpOVuCI5hoge = mL.GetCameraEyePoint();
としてVECTOR3の中身をとりだしたいのですが
hoge.x
とかいうような形でとりだせないものでしょうか?
0366名前は開発中のものです。
2008/12/24(水) 09:43:56ID:WpOVuCI5cc.x=5;
mL.printf("cc.x=%d", cc.x);
としてもcc.x=0って表示されてしまいます。
0367名前は開発中のものです。
2008/12/24(水) 09:51:25ID:WpOVuCI5mL.printf("cc.x=%f", cc.x);
にしたら表示されました。
0368名前は開発中のものです。
2008/12/28(日) 11:21:41ID:DBaYT0uRとあるウィンドウ内に表示することはできないでしょうか?
こんな感じで
http://blogs.wankuma.com/yo/archive/2008/01/25/119183.aspx
0369名前は開発中のものです。
2009/01/04(日) 19:04:03ID:X40+Kh+HDXライブラリ3Dって完成したの?
0370名前は開発中のものです。
2009/01/05(月) 13:47:48ID:hCfaSDI/DXライブラリでプログラムを作って起動し、終了させたのですが、
なぜかウィンドウは消えてもタスクバーに"DxLib"が残ってしまいます。
閉じようと何度も試しましたが消えてくれません(タスクマネージャでもダメ)。
以前同じことが起こった時はパソコンの電源をスイッチから直接切らないといけませんでした。
何か解決策はないでしょうか。
このトラブルが発生した時は自分の失敗で無限ループを脱せず、
ツールバーのデバッグの停止を使って終了させました。
たぶん原因はこれだと思います。
0371名前は開発中のものです。
2009/01/05(月) 14:31:31ID:etDOrpmFを呼ばなかったからに1票
0372名前は開発中のものです。
2009/01/05(月) 15:06:35ID:hCfaSDI/一応プログラムには書いてありますが、
その無限ループが発生したループ内では通ってないと思います。
これが原因なのでしょうか。
しかしDxLib_End()を通ると即プログラム終了だと思っていたのですが・・・
0373名前は開発中のものです。
2009/01/05(月) 15:15:38ID:aPIdrXExちゃんとその後ループから抜けてプログラム自体終了(WinMainからreturn)してるの?
0374名前は開発中のものです。
2009/01/05(月) 15:16:28ID:va+Hleat>たぶん原因はこれだと思います。
>これが原因なのでしょうか。
ソースも晒さず、これだ、あれだと聞き返されても返答が難しいよね
>失礼ですが質問です。
失礼だと思ったので、回答は出来かねます
0375名前は開発中のものです。
2009/01/05(月) 16:13:33ID:hCfaSDI/私に誠意が足りませんでした。申し訳ございません。
どう書けばよいのか分からないのですが、
WINMAINの中でreturnさせる直前にDxLib_End()を置いています。
DxLib_End()は一度限りでいいと思っていましたがもしかして違ったいたのでしょうか。
私が尋ねたかったのは、プログラムの起動中、
もしくは無限ループで抜け出せない時にデバッグの停止を行うと、
上述のトラブルが発生するのでしょうか、ということです。
分かりづらくて本当に申し訳ございません。
ソースに関しては、プログラムの内容について尋ねていたつもりではなかったため、
晒さずに漠然とした質問になってしまいました。この点に関しても私に落ち度がありました。
抜粋するのが適当だとは思いますが、ソースを全部晒しておきます。
ttp://www6.uploader.jp/dl/falljohn/falljohn_uljp00026.zip.html
・・・喧嘩腰に見えるorz 敬語って難しいです。
0376名前は開発中のものです。
2009/01/05(月) 16:20:42ID:hCfaSDI/int WINAPI WINMAIN( 略 ){
(ここにプロトタイプ宣言した関数) ←ここの中で無限ループが発生している
DxLib_End();
return 0;
}
という風にはしています。
ソースでは一応ですがループを自分で抜けられるようには少し変えています。
0377名前は開発中のものです。
2009/01/05(月) 18:20:18ID:P66gcfVh>(ここにプロトタイプ宣言した関数) ←ここの中で無限ループが発生している
>
>DxLib_End();
それだと、
そのループから処理が抜けない限り、絶対にDxLib_End()には辿り着かない
そんでデバッグツールでの停止ではもちろんDxLib_End()が呼ばれず、それが問題だというのは一応あってるかもしれない
0378名前は開発中のものです。
2009/01/05(月) 19:02:24ID:KsfcQKrhJavaScriptのsetIntervalのように
毎フレーム実行させるようにセット・解除できるような機能はないでしょうか?
0379名前は開発中のものです。
2009/01/05(月) 23:22:56ID:etDOrpmFソース見るのだるいから見ないが、
ループを抜けられるようにしてあるなら、ループを抜けてみてプロセスが残ってないか確かめればいいじゃないか。
プロセスがしっかり終了してればDxLib_End()が呼ばれてなくてそれが問題だったって分かるんじゃないか?まぁ、これだけじゃそうとも限らないが。
それでもし終了できていたらDxLib_End()を書いたものと書かないものとを比べればちゃんと分かるが。
で、それが分かればおのずと質問に答えられると思うが。
ただ、ProcessMessage()だっけ?で処理してくれるような終了の仕方(ってある?)の場合には、そこらをしっかり書けばちゃんと終了できると思うが。
0380名前は開発中のものです。
2009/01/05(月) 23:59:30ID:V4nq/52kwhile(CheckHitKey(KEY_INPUT_SPACE)==0){
battle();
WaitKey();
}
ScreenFlip();
WaitKey();
DxLib_End();
return 0;
}
これだとProcessMessageで-1引いてもループ抜けられないような気がする。
whileの条件式にProcessMessageの判定加えたらいいんでは。
あと抜けた後のWaitKeyは、強制終了後も参照されてしまうのでやめたほうがいい。
0381名前は開発中のものです。
2009/01/06(火) 00:18:40ID:F/Rau1w+何を毎フレーム実行させたいんだ?
というか質問は一つづつにしろよ
0382名前は開発中のものです。
2009/01/06(火) 07:35:09ID:Oinf+8tR情報が足りませんでした。申し訳ありません。
JavaScriptでは、
var set = setInterval(function(){
〜〜処理〜〜
}, 1);
のようにすると、1ミリ秒ごとにfunctionを呼び出すことができます。
また、clearInterval(set);で解除することもできます。
同じように毎フレーム実行させることはできるでしょうか。
whileに全て入れるのが面倒なのです。
0383名前は開発中のものです。
2009/01/06(火) 08:50:13ID:35IX/qYCアドバイスありがとうございます。
ProcessMessage()を完全に忘れていました。
まだまだ基本がなっていないようなので、しばらくROMって学んでいこうと思います。
0384名前は開発中のものです。
2009/01/06(火) 09:59:47ID:eUx/xd8Rどうも、聞きたいことがよく分からん。
while文に入れるのが面倒なほどに大量に関数があるのか?
複数の関数を一つの関数の中にまとめて、まとめた関数をwhile文の中においておくってのじゃダメなんか?
それとも、while文に全て入れるのが面倒じゃなくて、
フレーム管理とかプログラムの状態遷移が分からないってことか?
ってか、それはライブラリというより言語の使用じゃないか?
もし仮にDxライブラリで出来たとしても、登録、解除のし忘れとかでバグの原因になりそうに思えるんだが。
0385名前は開発中のものです。
2009/01/06(火) 11:50:37ID:WsDU+BU3for (int i = 0; i < enemyCount; i++) enemy[i].Update();
こういうようなことを言ってるの?
0386名前は開発中のものです。
2009/01/06(火) 15:00:44ID:Oinf+8tRwhileに全て入れるのが面倒に感じていましたが、言われてみるとそうですね。
>>385
毎フレーム実行させるという意味でこちらにきましたが、観点がずれていたようです。
while文の中にforループを入れるという発想はありませんでした。試行錯誤してみようと思います。ありがとうございました。
0387名前は開発中のものです。
2009/01/06(火) 15:06:41ID:WsDU+BU3試行錯誤するよりも初心者サイトでも見て素直に真似した方がいいよ
0388名前は開発中のものです。
2009/01/06(火) 20:56:28ID:Nr8kFssc少なくともVSの「デバッグの停止」ならDxLib_End()が呼ばれなかろうとなんだろうとちゃんとリソースを解放してくれるはず。
>>370がいつまでも終了しなかったのはexeを直接起動したかリリースビルドだったのでは?
>>380
WaitKey()は別に問題ないよ。
あとScreenFlip()がWhileの外にあったら画面更新されないから中へ。
0389名前は開発中のものです。
2009/01/11(日) 09:44:15ID:fWlpK7Co○○->(うんたらかんたら)
という処理が入っていると、エラーが発生して終了してしまいます。
0390名前は開発中のものです。
2009/01/11(日) 11:16:24ID:yJOODiUhその例文だと全く意味が伝わらない
0391名前は開発中のものです。
2009/01/11(日) 14:03:14ID:fWlpK7Coわかり難くてすいません……
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);
//================================================
}
0392名前は開発中のものです。
2009/01/11(日) 14:50:36ID:2fY4/RNq0393名前は開発中のものです。
2009/01/11(日) 16:25:19ID:rRSsOCCS参照エラーかな?
DXライブラリ側でLPDIRECT3DDEVICE8って持ってなかったっけ?
と無責任な事言ってみる。
DXライブラリのソース確認してみて。
>>392
出来るよん
0394名前は開発中のものです。
2009/01/11(日) 18:28:35ID:fWlpK7Coヘッダファイルを確認した所、LPDIRECT3DDEVICE7に関しての記述はみられましたが、
LPDIRECT3DDEVICE8についての記述はありませんでした。
ライブラリ初期化の前に読んだ所起動すらしなかったので、やっぱりDXライブラリとの競合ですかね……
0395名前は開発中のものです。
2009/01/11(日) 20:07:47ID:fWlpK7Coスレ汚し失礼しました……
0396名前は開発中のものです。
2009/01/16(金) 16:45:35ID:EID2Tgc4こんな感じの体験版となりました。
ttp://tikuwa.net/file/up7821.zip.html
DLKey:dx
0397名前は開発中のものです。
2009/01/16(金) 23:45:16ID:c/8VRMs/BGMやSEも自作?
引用があれば著作権等の明記はしっかりしておいた方が良いよ
0398名前は開発中のものです。
2009/01/16(金) 23:47:43ID:iRSkofRl0399名前は開発中のものです。
2009/01/17(土) 00:09:20ID:zPKek+/O0400名前は開発中のものです。
2009/01/17(土) 00:17:49ID:h2yGMjkVイメージ的にはこういうものを作りたいんだけど
http://www.geocities.jp/tjschallenger/TJS0320.html
http://www.geocities.jp/tjschallenger/img/TJS031701.png
↓
http://www.geocities.jp/tjschallenger/img/TJS000301.png
0401名前は開発中のものです。
2009/01/17(土) 00:30:31ID:r/BmSdjnttp://studiokingyo.fc2web.com/dxlib/kaibou/k_shiyou.html
で紹介されてる方法で駄目なら、ちょっと工夫が要る気がする
0402名前は開発中のものです。
2009/01/17(土) 01:42:14ID:A53qKgs6自作なので大丈夫かとは思います。
0403名前は開発中のものです。
2009/01/17(土) 01:46:05ID:hNEzfB400404名前は開発中のものです。
2009/01/17(土) 01:57:18ID:A53qKgs60405名前は開発中のものです。
2009/01/17(土) 09:58:07ID:OLTrE10Nすげえ
どんどん敵が固くなるw
敵がワイドショット撃ってくるあたりから先にいけん
0406名前は開発中のものです。
2009/01/17(土) 10:33:37ID:POC77fOB相変わらず難し過ぎる……w
ところでなんかボスのライフが下がり切らない内に倒せたんだけど。制限時間?
あとグレイズタイプって何かと思ったらサイヴァリアなのね。
0407名前は開発中のものです。
2009/01/17(土) 11:55:31ID:A53qKgs6どれも芋臭い曲ばかりですけどね…。
>>405
殆ど自機狙いなので直前に避けるとやりやすいと思います。
>>406
サイヴァリアの快感を再現してみたかったんです。
ボスはかすりで永遠に稼げるのと、ショット弱体化の対策として、
ワインダーを放ち終えた2分で自滅するようにしてみました。
0408名前は開発中のものです。
2009/01/17(土) 13:56:30ID: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 ) ; // 描画先画面を裏画面にセット
}
文字は表示されてもグラフィックは読み込まれない
左上隅に表示されるんだが、自分は中央拡大描画を求めている
0409名前は開発中のものです。
2009/01/17(土) 14:27:27ID:CHF9ChFjお前何か勘違いしてないか?知識なんて使って減るもんじゃないから只だと思ってんだろ?
人に物を訊くってのがどういう事だか、自覚してる?
知識ってのはな、社会人に取って金と同じく貴重な財産なんだよ。使っても減らないけど、教えたら広まった分だけ価値が下がる。それを分けてくれって言ってんの自分でわかってる?
社会で必要とされる知識ってのはな、本になんか載ってない事ばかりなんだよ。全部人から人へ、直接のコミュニケーションを介して伝わって来たモンなんだ。
そういうノウハウを分けてもらう申し訳無さみたいな物が、伝わって来ないんだよ。お前の態度からは。
猿だって仲間から餌を分けてもらう時は申し訳無さそうな顔するんだよ。ヘラヘラ笑いながら近づいてったら殴り殺されんぞ。
猿だったら今頃とっくに死んでんだよお前。そんな態度で今まで。何回も言ったよな。謝る時は申し訳無さそうな顔をしろって。
そういう学校じゃ受けられない教育を受けておきながら、社会人を経験しなきゃ得られない知識を貰っておきながら、
何にも生かせてないんだよ今のお前は。学生のサークルごっこじゃないんだから。もっと四六時中危機感を持って生きてなきゃ駄目だよ。いい加減いつまで学生気分じゃ。
0410名前は開発中のものです。
2009/01/17(土) 14:35:00ID:r/BmSdjn0411名前は開発中のものです。
2009/01/17(土) 15:00:14ID:A53qKgs6耳が痛い話です。
0412名前は開発中のものです。
2009/01/17(土) 15:06:33ID:B1CiFUTT0413名前は開発中のものです。
2009/01/17(土) 16:00:07ID:IVDG90gp0414名前は開発中のものです。
2009/01/17(土) 16:46:40ID:UCl/dEbD0415名前は開発中のものです。
2009/01/17(土) 23:46:21ID:h2yGMjkVマウスの左クリックを監視するようにしました
その際、ウインドウの範囲外をクリックしてもマウスの左クリックを認識してしまいます
その解決策として
ウインドウの左上の座標(x,y)からWindowの大きさ(X+width,Y+height)までの間でクリックされた時のみクリックを監視するという方法をとろうと思っています
そこで質問なのですが
ウインドウの左上の座標を取得する関数は存在するのでしょうか?
また、無い場合は何か他に代用できる関数は標準ライブラリなんかに入っているでしょうか?
あと、ウインドウがアクティブかどうか判断する関数ももしあったら教えてください
一応調べたのですがヒットしなかったためよろしくお願いします
0416名前は開発中のものです。
2009/01/17(土) 23:53:38ID:m/2DoB9T0417名前は開発中のものです。
2009/01/17(土) 23:57:48ID:h2yGMjkVありがとうございます見つかりました
下のは
GetActiveWindow()
でいけそうですね
上も調べてみます。ありがとうございました
0418名前は開発中のものです。
2009/01/18(日) 01:29:33ID:W8VFm9RV>>415はアドバイスのお陰で全て解決しました
ところで、作成したexeを起動するとLog.txtというものができるのですがこれは仕様なのでしょうか?
logファイルを作成しないように設定することは出来ないのでしょうか?
よろしくお願いします
0419名前は開発中のものです。
2009/01/18(日) 01:46:03ID:bv5ORrRe0420名前は開発中のものです。
2009/01/18(日) 19:14:35ID:d7+8UZEGより前でSetOutApplicationLogValidFlagを呼びださなければなら無かったのですね
解決しましたありがとうございました
0421名前は開発中のものです。
2009/01/18(日) 19:22:47ID:Dn7rF8inLogValidとか
0422名前は開発中のものです。
2009/01/18(日) 20:26:55ID:d7+8UZEG他のツールで作ったソフトの内部でDXライブラリを呼び出すことって出来るんですか?
例えば、ノベルゲーム作成ツールでゲームを作って、ところどころでDXライブラリで作ったゲームを組み込む
みたいな感じで
ノベルのほうで普通にDXライブラリ製のソフトを呼ぶと窓が起動してしまいますよね?
ノベルのほうと同じ窓でゲームを実行することってできないのでしょうか?
意味がよく分からなかったらすいません
0423名前は開発中のものです。
2009/01/18(日) 20:58:55ID:N4guzxX80424名前は開発中のものです。
2009/01/18(日) 21:03:33ID:BZ0GBkU2何が言いたいのかはわかるけど、残念ながら恐らく不可能。
両方でしっかりデータの受け渡しができれば、携帯アプリの前編後編みたいにすることは出来るかも知れないけど、
現存のツールではそこまでの機能は無いと思うし……。
0425名前は開発中のものです。
2009/01/18(日) 21:11:32ID:Dn7rF8in0426名前は開発中のものです。
2009/01/18(日) 21:29:03ID:d7+8UZEGそうですか・・・
あまり知識無いんですけど、描画先のウィンドウハンドル(ここではノベゲー)を取得して、内部でDXライブラリ製のソフトを呼び出した時
ウインドウを新規で作らず、いまあるウインドウを描画先に指定(取得したハンドルを用い)みたいなことができれば可能なのかな?
よくわからないorz
>>425
具体的にはどういうことでしょうか?
ぐぐったら分かるかな
アドバイスありがとうございます
0427名前は開発中のものです。
2009/01/18(日) 21:39:59ID:GlhQpd6d0428名前は開発中のものです。
2009/01/18(日) 22:57:46ID:d7+8UZEGありがとうございます
やることとしては>>426に書いたとおり
>描画先のウィンドウハンドル(ここではノベゲー)を取得して、内部でDXライブラリ製のソフトを呼び出した時
>ウインドウを新規で作らず、いまあるウインドウを描画先に指定(取得したハンドルを用い)みたいなことができれば可能なのかな?
描画先を既存のウィンドウにすればいいんですよね
これってどうやるんだろう・・・・
0429名前は開発中のものです。
2009/01/18(日) 23:10:15ID:3xnYsDJWできるぞ、(ただし、元のプログラムが自作かせめて、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
0430名前は開発中のものです。
2009/01/18(日) 23:14:26ID:d7+8UZEGベースプログラムは吉里吉里かSystem4.0を考えてるので多分dllの読み込みは可能かとも居ます
実際色々プラグイン公開されてるし
色々ありがとうございます
調べてみます
0431名前は開発中のものです。
2009/01/19(月) 10:34:52ID:X5SZs/u2亀だがやってみた
とりあえず途中から敵固すぎワロタ
ボンバーなしじゃ無理な気がww
俺のシューティングは随分昔にシューティングスレに投下してから弾幕に凝っててあんまり見た目の進歩がないぜ
0432名前は開発中のものです。
2009/01/19(月) 17:31:41ID:yZM1xSvo固さは面とレベルの兼ね合いにしたいと思います。
最近見かけばかりに力を入れてて肝心のゲーム内容は…。
0433名前は開発中のものです。
2009/01/19(月) 17:42:09ID:IkXU3fd80434名前は開発中のものです。
2009/01/19(月) 20:32:05ID:j6ExWModゼビウスみたいのなら楽勝だろとか思ってました、ごめんなさい
0435名前は開発中のものです。
2009/01/20(火) 11:58:06ID:dMyWKq6o質問なのですが、ゲームのBGMで
最初に戻って繰り返すときBGMをとぎれてしまわないようにする方法はありますでしょうか
例えばRPGの戦闘音楽のようにずっと放置していてもきれいにループするような方法です
0436名前は開発中のものです。
2009/01/20(火) 12:40:01ID:/e+EiVUH俺はやったことないけど
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_sound.html#R8N13
これできれいにループするんじゃない?
0437名前は開発中のものです。
2009/01/20(火) 12:51:49ID:dMyWKq6oありがとうございます!勉強してチャレンジしてみます!
0438名前は開発中のものです。
2009/01/20(火) 15:22:07ID:A5DSi9Sdあと、姑息な手段で申し訳ないが
MIDIのようにサイズを気にしなくて済むようなものなら、最初から10分続くファイルにしてしまうという手もある。
0439名前は開発中のものです。
2009/01/21(水) 22:18:20ID:2s5lyHkK>>435がファイル形式を言ってないのでわからないけどwavなら綺麗にループする。
0440名前は開発中のものです。
2009/01/22(木) 15:31:01ID:Xr8Aa3cYたぶん>>435が使っているファイルは曲の最初と最後が繋がってないやつなんだろう。
だから、普通にループ指定すると音が途切れずにループしない。
けど、市販ゲームでもこういうBGMあるし、俺は気にしないけどな
0441名前は開発中のものです。
2009/01/22(木) 17:11:41ID:q+tQcJ7A無音時間の全くない完全なシームレスループにしたい場合、下のページが参考になると思います。
ttp://www13.plala.or.jp/kymats/study/MULTIMEDIA/waveOut_multibuf.html
API使わないといけないのとWAV限定ですが。
0442名前は開発中のものです。
2009/01/22(木) 17:15:00ID:9/RQfEqVFF10のジェクト戦みたいにボーカルいれた音楽をBGMとして使えそうだな
すげえ
0443名前は開発中のものです。
2009/01/22(木) 17:34:21ID:Bh2KGHfp「最初に戻って」って書いてあるからなぁ。
でも途切れる方法が書いてないところが色んな憶測を呼ぶよね。
まぁここまでで解決方法出たと思うからいいんだけどさ…。
0444名前は開発中のものです。
2009/01/26(月) 16:05:31ID:2mzhNCi2'/O2' と '/RTC1' は同時に指定できません ってコンパイルエラーが出る。
プロジェクトの設定でO2→Odにしてるんだけれども。
RTC1の方を切ればコンパイルできるんだけど、なんでだー!
0445名前は開発中のものです。
2009/01/30(金) 19:51:30ID:Wy6ip41+どうやったらできるんでしょうか?
0446名前は開発中のものです。
2009/01/31(土) 06:27:02ID:mi0nZoft0447名前は開発中のものです。
2009/01/31(土) 08:53:12ID:dFEgAXD4どこかにそれっぽいサンプルがあったような……。気のせいかな。
0448名前は開発中のものです。
2009/01/31(土) 09:07:06ID:KRmQ80GsSetGraphModeで直接指定ができるね
なんとかして使ってるモニタの解像度を取得して当て込めば出来るかも
だけど処理速度は厳しいだろうな
0449名前は開発中のものです。
2009/01/31(土) 10:47:56ID:rbcO49fB右上の最大化のボタンを押せば、標準的なアプリと同じような
動作にしたいです、
画面全体にきっちり広がって間違ってマウスでドラッグしても動かないような感じです
0450名前は開発中のものです。
2009/02/01(日) 00:40:50ID:XJc1/NhO0451名前は開発中のものです。
2009/02/01(日) 10:34:54ID:lmI58fq8普通にフルスクリーンモードじゃなくてウインドゥモードにすれば
いいだけじゃないの?
そういう関数あったと思うけど。
0452名前は開発中のものです。
2009/02/01(日) 12:40:27ID:8EnnwsB0最大化ボタンも押すことができない
これを変えたいってことなら
サイズの手動変更の場合は>>448
あとはSetUseASyncChangeWindowModeFunction()で最大化ボタン有効化だと思うんだが
ちょっとこっちの使い方が分からないorz
0453名前は開発中のものです。
2009/02/01(日) 22:16:17ID:2n+Oqc2F480x640で起動することってできますか?
0454名前は開発中のものです。
2009/02/01(日) 22:20:08ID:90n+ELwGhttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R4N1
0455名前は開発中のものです。
2009/02/01(日) 22:30:43ID:2n+Oqc2Fできた!
ありがと^^
起動時に640x480になってるのが気になるけど、まいっか
0456名前は開発中のものです。
2009/02/01(日) 22:34:51ID:90n+ELwGもっと早い段階で呼び出せば良いよ
DxLib_lint()より上で呼べば最初からそのサイズになる
0457名前は開発中のものです。
2009/02/04(水) 01:44:28ID:igrRGuw3C++でプログラミングするにあたって、横スクロールアクション(マリオとかロックマンみたいな)
の作り方のサンプルを紹介してるサイトってないですかね?
↓シューティングゲームについては四聖龍神録さんのページが非常に役に立ちました!
http://dixq.net/rp/
0458名前は開発中のものです。
2009/02/04(水) 09:38:48ID:2Cf0XhT+公式HPのサンプル
0459名前は開発中のものです。
2009/02/04(水) 14:27:42ID:CO3XfILg0460名前は開発中のものです。
2009/02/04(水) 16:43:08ID:KduT8vdnC++でのサンプルはどこにもない。と言い切っていい。
JAVAだが、考え方としてはいいかもしれないのでこれを見て、自分で考えてはどうか。
http://javagame.skr.jp/index.php?FrontPage
これもC++ではないが、考え方としては(以下同文
http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231306/?ST=swd-tech
やはり、自分で考えて試行錯誤するしかないのではと思う今日この頃
0461名前は開発中のものです。
2009/02/04(水) 21:32:21ID:6meQrl/q次に構造体をグローバルにして使いまくって
次に構造体をポインタで書き換えるようにして
引数に構造体のポインタがどんどん増えていき
次に各構造体の先頭のポインタをまとめた構造体をつくってそれを引数にしたんだけど
だいたいみんなこんな感じ?
0462457
2009/02/04(水) 22:20:44ID:igrRGuw3レスサンクスです!
>>460
まさにこういうページ探してました!
横スクロールと敵の制御とか参考になりまくりです。
言語は問わないんですが、STGの情報は多いのにACTはなかなか無かったので。
↓自分でも探してたんですが専門学校(?)のゲームの作り方ページもよかったです。
http://rina.jpn.ph/~rance/directx8/
Web上だとなかなか情報が無いから、専門学校の
教科書が欲しいなんて思っちゃいました。笑
0463名前は開発中のものです。
2009/02/05(木) 03:42:29ID:GjXLMUdb前から気になってはいたんだけど、構造体とかグローバルで使うのって何かまずいことでもあるの?
ポインタにする利点をずぶの素人の俺にも分かり易く教えて欲しい。
引数で構造体を直に渡してなければ余り関係ない気がしてるんだけど。
0464名前は開発中のものです。
2009/02/05(木) 07:27:08ID:rTUW0rFPいちいち考えないといけないんだよな
プログラムの複雑さが増すので乱用は慎しめと言われてる
0465名前は開発中のものです。
2009/02/05(木) 08:09:33ID:ojur6QxZ注意して組む自身があるならグローバルでも問題ないと思う。
0466名前は開発中のものです。
2009/02/05(木) 08:48:42ID:9t4FKbe4俺は、あえて 「昨日の自分は他人」だと思って、
可能な限り、必要性のない限り グローバル変数は使わない方がいいと思うけどね。
(特に、携帯機器とかメモリ節約とか求められてない時は余計に。)
>>463
“普通の”ポインタの利点は、微妙だな。ただ、まだまだある所じゃ、速度的に値のコピーよりも
参照して行った方が効率が良かったり、処理の記述がしやすくなったり。
ただ、あるClassのポインタ(関数ポインタ含む)は処理の委譲に頻繁に利用される。
利点として、全体像が綺麗にできるし、コードの混雑が大きく減る。
cf.Strategy パターン Decorator パターン 双方向リスト 動的確保
0467名前は開発中のものです。
2009/02/05(木) 09:31:40ID:Qc5+f5Cjグローバル構造体自体は普通に使うよ。
グローバルクラスが普通に使われるように。
C++においては構造体=クラスだからね。
問題は、構造体に使われるpublic変数なんだと思う。
GetXX(),SetXX()にすればいいって問題でもないとは思うけど、もしクラスならメンバ変数は基本的にみんなprivateでしょ?
0468名前は開発中のものです。
2009/02/05(木) 10:35:01ID:4io8tQ0w0469名前は開発中のものです。
2009/02/05(木) 17:44:21ID:B8Cz6uqn461です
俺は今年からプログラミング初めた素人
まだグローバル変数使って困ったことはないけど
勉強しつつゲーム製作やってるから今はポインタ使って試してる
次はクラスってのを使ってみる予定
0470名前は開発中のものです。
2009/02/06(金) 00:33:01ID:O6HFVvT00471名前は開発中のものです。
2009/02/06(金) 00:35:30ID:O6HFVvT0すいません
DXライブラリで検索したら即効見つかりました
お騒がせしました
0472名前は開発中のものです。
2009/02/06(金) 00:57:03ID: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 ; // ソフトの終了
}
0473名前は開発中のものです。
2009/02/06(金) 08:46:48ID:7KSAHxxq原因を調べるにはまずどこがおかしいか調べようぜ
PlayMovieの戻り値は調べた?
まあおそらくtest.aviが開けないんだと思うけど。
exeと同じディレクトリでもカレントがそことは限らないよ、どうやって実行した?
フルパスで指定してみるのがいいかもね
0474名前は開発中のものです。
2009/02/06(金) 10:04:24ID:T3lftGPa#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はそこでムービー停止するまで処理とまるんだっけ?
そうじゃないならムービーの再生が終わるまで処理終わらないようにする工夫が必要
どれもこれもリファレンスにあるから一度目を通してね
0475名前は開発中のものです。
2009/02/06(金) 10:36:49ID:7KSAHxxqこれで問題ありますか?って、、、、
今後もサンプルがうごかないたびにコメントごとそのまま貼り付けるつもりか。
0476名前は開発中のものです。
2009/02/06(金) 10:44:57ID:RXpavouuフルパス指定を推奨しろよ
0477名前は開発中のものです。
2009/02/06(金) 22:13:54ID:bune21hQ0478名前は開発中のものです。
2009/02/07(土) 00:40:47ID:9/tOLDQPファイルが無いときも黒画面のフルスクリーンまでいって帰ってくる
0479名前は開発中のものです。
2009/02/07(土) 00:50:47ID:XZUozGI6音は鳴ってるの?
0480472
2009/02/07(土) 12:23:31ID:m2CcO09N解決しました
原因は動画のサイズが大きかったことでした
試しに400*300の小さい動画を再生したところ画面左端にきちんと表示されました
0481名前は開発中のものです。
2009/02/07(土) 16:43:56ID:5JGvk0Ld0482名前は開発中のものです。
2009/02/07(土) 18:57:56ID:fLtGYl8p0483名前は開発中のものです。
2009/02/07(土) 21:03:54ID:lpCM/pFJ0484名前は開発中のものです。
2009/02/07(土) 23:54:45ID:winQ4pAR0485名前は開発中のものです。
2009/02/09(月) 20:19:32ID:1pnOXqGt合成するにはどうしたらいいですか?
0486名前は開発中のものです。
2009/02/09(月) 21:02:42ID:r4CYwpcrファイル名_a.拡張子で指定。プログラムは変更不要で元ファイルといっしょに読み込む。
グレースケール(白黒)で256階調。
0(黒)が完全透過で255(白)がマスク、中間値で半透明処理できる。
0487名前は開発中のものです。
2009/02/09(月) 21:16:29ID:hQLvxnkO0488名前は開発中のものです。
2009/02/09(月) 21:39:39ID:kpyVvUs40489名前は開発中のものです。
2009/02/09(月) 22:04:30ID:1pnOXqGtアルファブレンド試してみました
ファイル一つ用意するだけで出来たんですね
美しい描画に感動しました
アルファチャンネル付きpngは今から作ってみます
作ったことないからグーグルから始めますが
今日中にがんばってみます
0490名前は開発中のものです。
2009/02/09(月) 22:37:00ID:1pnOXqGtありがとうございました
0491名前は開発中のものです。
2009/02/10(火) 01:17:10ID:4F920hOP0492名前は開発中のものです。
2009/02/10(火) 10:00:17ID:XFgx+1B+0493名前は開発中のものです。
2009/02/10(火) 10:05:10ID:rFLiGfwYpngを知ったら他の形式なんてとても使えたものじゃない。
0494名前は開発中のものです。
2009/02/10(火) 11:14:35ID:vQYvbazz0495名前は開発中のものです。
2009/02/10(火) 20:29:18ID:tnQHyXfF0496名前は開発中のものです。
2009/02/10(火) 22:37:01ID:vQYvbazz透過処理ってなんか重そうだから多用しないようにしてたんだけど、心配なかったのか。
0497名前は開発中のものです。
2009/02/11(水) 01:39:50ID:EiHo01Mu0498名前は開発中のものです。
2009/02/11(水) 02:00:10ID:v+EsJNk0その辺の表記なんたらは何にも必要ないよ
0499名前は開発中のものです。
2009/02/11(水) 03:56:50ID:abcckAid読み込んで表示させるプログラムの著作権じゃない?
>・下記の機能を使用した場合は、配布するソフトウエアのドキュメント等に各機能に応じた
> 著作権表示を含めてください。
>
> 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
0500名前は開発中のものです。
2009/02/11(水) 08:50:36ID:swUZoApZ>>495はアルファブレンドとアルファチャンネル付きPNGが一緒ってことじゃないかな?
透過処理は普通の描画に比べたら遅いよ。
0501名前は開発中のものです。
2009/02/11(水) 09:51:46ID:1w4T1utS491がなんでもかんでもって言ってるから
普通の描画と同じくらい軽いのかと思ってしまった。
0502名前は開発中のものです。
2009/02/11(水) 10:55:48ID:n8G83FSO圧縮アルゴリズムが単純だからPNGよりファイルサイズが大きくなるけど・・・
0503名前は開発中のものです。
2009/02/11(水) 19:22:37ID:AZ7K07ik0504名前は開発中のものです。
2009/02/11(水) 19:36:20ID:qrNBhwtd0505名前は開発中のものです。
2009/02/11(水) 21:30:38ID:EO0e2yUS0506名前は開発中のものです。
2009/02/12(木) 04:09:43ID:T7mGdx780507名前は開発中のものです。
2009/02/12(木) 09:22:15ID:g2cVI1Rq0508名前は開発中のものです。
2009/02/12(木) 10:15:43ID:S0rR+p5uうま
を思い出したwww作者どうなったんだw
0509名前は開発中のものです。
2009/02/12(木) 15:51:55ID:T7mGdx780510名前は開発中のものです。
2009/02/12(木) 19:27:06ID:g2cVI1Rq0511名前は開発中のものです。
2009/02/12(木) 19:28:31ID:V7VMrK+q0512名前は開発中のものです。
2009/02/12(木) 19:45:30ID:g2cVI1Rq0513名前は開発中のものです。
2009/02/13(金) 04:49:14ID:qd9k9XJd0514名前は開発中のものです。
2009/02/13(金) 08:52:43ID:gm7Wlof80515名前は開発中のものです。
2009/02/13(金) 09:20:00ID:Tj50RFPE前に使ってて一時期離れてたとか
DXライブラリの事を最近知ったなら今更とか関係ないし
てか、なんでそな事を疑問に思うのか疑問だ
0516名前は開発中のものです。
2009/02/13(金) 09:31:26ID:gsDT3swS失礼した。
0517名前は開発中のものです。
2009/02/13(金) 10:00:20ID:KHzspSCY0518名前は開発中のものです。
2009/02/13(金) 10:08:42ID:Gs8dKfU50519名前は開発中のものです。
2009/02/13(金) 13:24:47ID:OFBqMPYi0520名前は開発中のものです。
2009/02/13(金) 17:52:53ID:gamtZzLZ面倒なDirectX初期化周りやレンダリング処理を全部任せられるのがすごく便利。
今まで何度も1人でゲーム作ろうとしてゲームのライブラリ化までで燃え尽きてたけど、いけそうな気がする。
ただ、メッセージプロシージャ周りを完全に独立させて、他に譲渡できればいいんだけど、
DirectXの特性上難しいのが残念かな。
ウィンドウモードでデバッグウィンドウ周りを実装してたときに感じた愚痴です。
0521名前は開発中のものです。
2009/02/13(金) 19:27:10ID:6Q+KDpbI0522名前は開発中のものです。
2009/02/13(金) 19:33:25ID:OFBqMPYi0523名前は開発中のものです。
2009/02/13(金) 20:41:49ID:Br6f/DrZ3D版の作者のサイト、移転してたんだ
0524名前は開発中のものです。
2009/02/13(金) 21:15:25ID:vieAChNU日記の内容からして
もうDXライブラリの方は手をつけないんだろうか
0525名前は開発中のものです。
2009/02/13(金) 21:54:45ID:KHzspSCYそのうち書き込むんじゃない?
0526名前は開発中のものです。
2009/02/13(金) 22:01:18ID:6Q+KDpbIああ、移転だったのか。
あんなイカレた閉鎖文なんか載っけてどうしたのかと思ったよ。
0527名前は開発中のものです。
2009/02/13(金) 22:26:23ID:Tj50RFPE過去を全部捨てて仕切りなおしたって感じだな
もうライブラリとかそう言うのは作っても公開しない気がする
0528名前は開発中のものです。
2009/02/14(土) 00:37:02ID:vEcxeBnT0529名前は開発中のものです。
2009/02/14(土) 02:11:46ID:ioBOninzDXライブラリ3Dのソース見てみたらモデルの扱いにD3DX使ってて
まともなライブラリに至るにはまだまだ先の長い状態だったしな・・・
0530名前は開発中のものです。
2009/02/14(土) 13:24:54ID:esml8/+nまた公開してくれるまで諦めるな。
0531名前は開発中のものです。
2009/02/16(月) 13:18:58ID:xQ8BZc1p0532名前は開発中のものです。
2009/02/16(月) 17:21:56ID:2DsBHdnGDXライブラリ3Dファイナルパック
というのが、公開されてるんだが
http://fatalita.sakura.ne.jp/3DLib/
0533名前は開発中のものです。
2009/02/16(月) 17:48:01ID:i1Y9wFn0>※このサイトは2,3日以内に自動的に閉鎖されます
このスレ見て一時的に公開?w
0534名前は開発中のものです。
2009/02/16(月) 18:15:06ID:2i4RbFSc非常に乙でした
0535名前は開発中のものです。
2009/02/16(月) 21:10:15ID:yCP91q6a0536名前は開発中のものです。
2009/02/17(火) 14:12:08ID:VEVhf4mN0537名前は開発中のものです。
2009/02/17(火) 15:16:32ID:Zl2geQsR関数リファレンスページにあるリンクされてない関数ってサンプルがないだけで使えるんだよね?
SUGEEEE
0538名前は開発中のものです。
2009/02/17(火) 16:23:49ID:5nIY3uJBおつかれさま
いろいろ勉強させていただきました
0539名前は開発中のものです。
2009/02/17(火) 16:43:07ID:vyYC8VigSlimDXに行くかな
0540名前は開発中のものです。
2009/02/17(火) 16:47:15ID:gK6Z/ZXS.NET言語で書けること以外は生DirectXと同じだぞ
0541名前は開発中のものです。
2009/02/17(火) 17:10:56ID:nPVB/UbL0542名前は開発中のものです。
2009/02/17(火) 20:02:40ID:/uggH+y6おつかれさまでした。
0543名前は開発中のものです。
2009/02/18(水) 01:28:08ID:p5LpkikRif( 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です
0544名前は開発中のものです。
2009/02/18(水) 01:28:34ID:p5LpkikR0545名前は開発中のものです。
2009/02/18(水) 02:19:01ID:8ojm5TEPたとえばSetGraphMode(640,480,16);にしても起こる?
0546名前は開発中のものです。
2009/02/18(水) 04:12:49ID:p5LpkikR色を変えてもちらつきます・・・どうやら色問題でもなさそうです
で試行錯誤していろいろやってみたけど
SetDrawScreen(DX_SCREEN_BACK); というの行を削除して
実行するとまともにちらつきがなく1枚ずつまともにきれいに表示された
(理由はよくわからないけど・・・)
あ 肝心なDXライブラリはVer2.25です
0547名前は開発中のものです。
2009/02/18(水) 07:25:00ID:TxKBLHeJ全文かいてないからどうおかしくなるのか分からないけど、それだとすぐに終わらない?
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;
これでもだめ?
0548名前は開発中のものです。
2009/02/18(水) 08:16:18ID:476p40bEテクスチャサイズは2の累乗とか特殊なウィンドウサイズに対応してないとか
0549名前は開発中のものです。
2009/02/18(水) 08:38:08ID:p5LpkikRすいません自己解決しました^^;
どうやらDXライブラリのプログラム上ではなく
ATI Catalystのグラフィック設定がおかしかったようです・・・
3Dアンチエイリアス設定を「管理しているアプリケーション」を選択して
設定して実行すると 画面に残像現象がおきて変になるようです
そこの設定を 2x4x6x(どれでもOK)を選択すればちゃんと表示されました
0550名前は開発中のものです。
2009/02/18(水) 19:23:35ID:m9ZprRI/0551名前は開発中のものです。
2009/02/18(水) 19:41:11ID:VJaNf5ax^q^9m
>改変して二次公開したりしても別にかまいませんが、その際は二次公開の旨を分かる位置に掲載してください。
>なお、DXライブラリ3Dは著作権は原則フリー(常識の範囲内で)なので商用・非商用・自作ライブラリへの組み込み、
>全てにおいてあなたのやりたいようにやってください。
その内誰かうpしてくれるよw
0552名前は開発中のものです。
2009/02/18(水) 21:08:45ID:CQ81txgwうpロダにあげたよ
>二次公開の旨を分かる位置に
ミスったな
一応ここで二次公開って言っておけば大丈夫かな?
http://uproda55.2ch-library.com/s/gogo000065.zip.shtml
0553名前は開発中のものです。
2009/02/18(水) 21:30:08ID:VJaNf5axそれは中身改変してる場合じゃね?>掲載
0554名前は開発中のものです。
2009/02/19(木) 07:50:51ID:pIWtXiH10555名前は開発中のものです。
2009/02/19(木) 11:33:29ID:f0/T9Plaもうこれでずっと悩んでるんだが
0556名前は開発中のものです。
2009/02/19(木) 15:13:01ID:U9UHVYOh有限な計算精度
0557名前は開発中のものです。
2009/02/19(木) 16:41:47ID:4ok3CY5Z0558名前は開発中のものです。
2009/02/19(木) 19:45:08ID:f0/T9Plaニコ動に抵抗がなければ5:20あたりから見てくれないか。
ttp://www.nicovideo.jp/watch/sm6061026
0559名前は開発中のものです。
2009/02/19(木) 19:51:00ID:f0/T9Pla0560名前は開発中のものです。
2009/02/19(木) 19:57:29ID:qMcuPVNK0561名前は開発中のものです。
2009/02/19(木) 20:18:13ID:bxQhZGhK#include<stdio.h>
で好きなだけ代用できるじゃないか
intじゃなくてFILFポインタになるけど
アーカイブは探せばいくらでもあるから代用できる
……はず
0562名前は開発中のものです。
2009/02/19(木) 21:11:58ID:uEbxvwJbうはー、DXライブラリ3Dってこんなの作れるのか。
0563名前は開発中のものです。
2009/02/19(木) 21:35:14ID:lOZWd07Nそれにあわせて作者が同じ日に公開とか自演ぽくね?
閉鎖なのか公開なのかはっきりしろよ・・・
大学続けようとおもいます→大学中退しました→
夢があるからです→夢から冷めてきました→
興味が薄れてきました→PC壊れたので・・・→閉鎖します
0564名前は開発中のものです。
2009/02/19(木) 21:40:51ID:uEbxvwJb0565名前は開発中のものです。
2009/02/19(木) 21:48:49ID:tJ+D/Bvq0566名前は開発中のものです。
2009/02/19(木) 21:49:12ID:TRLSeDgGアホ?
これ以上のバージョンうpは無いと思ってればいいだろ
閉鎖されてから落とせなくて探してる奴が居ただけだ
ファイナルを何時から準備してかは知らんがな
てか、こんな過疎板に自演して作者に得があるのか?
0567名前は開発中のものです。
2009/02/20(金) 00:24:59ID:8YD/yL0t0568名前は開発中のものです。
2009/02/20(金) 00:29:18ID:ysEz7dEP無料だから文句は言えないけど、飽きたから管理止めますとか、無責任なことには代わりない
もうこの作者のことは信用できない
0569名前は開発中のものです。
2009/02/20(金) 01:17:54ID:A+5UBWwG0570名前は開発中のものです。
2009/02/20(金) 05:50:40ID:8tyTE/rK0571名前は開発中のものです。
2009/02/20(金) 07:41:19ID:8YD/yL0t0572名前は開発中のものです。
2009/02/20(金) 07:43:53ID:8YD/yL0t0573名前は開発中のものです。
2009/02/20(金) 07:44:51ID:jFTkkFCIそらそうだw
0574名前は開発中のものです。
2009/02/20(金) 08:28:32ID:8h4MKZuU0575名前は開発中のものです。
2009/02/20(金) 09:06:13ID:aIKFY2CZ0576名前は開発中のものです。
2009/02/20(金) 09:48:35ID:KdVzxEPs0577名前は開発中のものです。
2009/02/20(金) 10:58:30ID:8YD/yL0t有料でもいいから続けてみては?
0578名前は開発中のものです。
2009/02/20(金) 12:26:01ID:aZHJViPQむしろ、逆だろ。ほとんど何も言わなかった。
で、喋る時は、あらかじめブレーンが考えた フレーズで乗り切る。
だから、絵が欲しいTVには喋ってる所で、内容がぶれようがない。
変な編集かませる余裕を作らず、ちゃんとメガホンとしてマスコミを利用してた。
0579名前は開発中のものです。
2009/02/20(金) 12:38:02ID:jFTkkFCI0580名前は開発中のものです。
2009/02/20(金) 13:08:33ID:3qadtHxyそれ以上にDXライブラリの名前使ったのに逃げたのが許せない
0581名前は開発中のものです。
2009/02/20(金) 14:12:22ID:KdVzxEPs私の内閣では通用しない
感動した
そして解散を決めたときの名演説
いまさらかつての人気を貶めようとしても無駄ですよ
0582名前は開発中のものです。
2009/02/20(金) 15:48:19ID:D8Q9D5JtDXライブラリ 関数リファレンスページ
dxfunc2.htm(ファイル名) には詳しい説明がなくて
メニュー関係関数がいまいち使い方がわからない
0583名前は開発中のものです。
2009/02/20(金) 16:36:00ID:8h4MKZuU>それ以上にDXライブラリの名前使ったのに逃げたのが許せない
これはわかる
名前がまったく関連性のないものだったらよかったのにね
0584名前は開発中のものです。
2009/02/20(金) 17:24:08ID:MS2hL7JC0585名前は開発中のものです。
2009/02/20(金) 17:24:10ID:2MhbVJBH0586名前は開発中のものです。
2009/02/20(金) 18:29:28ID:kcT2uiGI関数の数も多ければ、引数についても説明不足でなにがなんだか分からないよ。まじで。
自分はResourceから作ってます。
IDR_MENUってのがメニューリソースでこんな感じ
SetUseGDIFlag(TRUE); //GDI利用
SetUseMenuFlag(TRUE); //メニュー利用
LoadMenuResource(IDR_MENU); //リソースからメニューを読み込み
SetDisplayMenuFlag(TRUE); //メニューの表示
注意を1点だけ。
Windowモードだと問題ないけど、フルスクリーンモードだと、
そのメニューからDialogBoxなりMessageBoxを呼ぶと、
一見ちゃんと表示されたようになりますが、処理復帰後、
その後、メニューが隠れて見えなくなります。
0587名前は開発中のものです。
2009/02/20(金) 18:30:55ID:kcT2uiGI0588名前は開発中のものです。
2009/02/21(土) 01:04:15ID:3rVkBDkP今DLしました
ありがとうございます!
0589名前は開発中のものです。
2009/02/21(土) 09:46:45ID:73or/HL/超ありがとう。
マジで。
おかげで開発引き継げられるわ。
0590名前は開発中のものです。
2009/02/21(土) 10:07:29ID:QPv83g/e引き継いでもいいけどDXライブラリ3Dという名称はやめてくれ
0591名前は開発中のものです。
2009/02/21(土) 10:35:53ID:73or/HL/わかるけど
変えたら変えたで問題じゃね?
0592名前は開発中のものです。
2009/02/21(土) 11:17:25ID:Vvb1WGeN完成度が高くて初心者でも分かる程度になってから名乗って欲しい
0593名前は開発中のものです。
2009/02/21(土) 11:52:48ID:YY9Vv2Rqどこのチョンだよ。
見てて恥ずかしい。
0594名前は開発中のものです。
2009/02/21(土) 12:04:32ID:Vvb1WGeNユーザーから賞賛されないって逃げたのは誰だよ
ホンディーって名乗ってホンダっぽさだして
富士山移して日本っぽさだして売名してる現代車と変わらないのは作者だろ
しかも、性能まで劣ってるというとこまで同じだし
叩くというかもう出てこないで欲しい
0595名前は開発中のものです。
2009/02/21(土) 12:37:57ID:73or/HL/0596名前は開発中のものです。
2009/02/21(土) 12:41:31ID:Vvb1WGeNそして、作者は現に逃げた 大学からも ライブラリからも サイトからも
0597名前は開発中のものです。
2009/02/21(土) 12:45:53ID:Wn6D0K7q0598名前は開発中のものです。
2009/02/21(土) 12:46:30ID:Vvb1WGeNブログっぽいのに書いてあった
その宣言と同時に突然DXライブラリ3Dの書き込みや動画投稿増えてるからなー
何をいわんとするかは察してくれ
0599名前は開発中のものです。
2009/02/21(土) 12:49:09ID:Vvb1WGeNあれはセンスないよなmL.とかないわーって思った。
普通に dxlib3d. とか略してdx3dなり関連性だせばいいのにな
そもそも初心者向け狙ってクラス前提はどうかな・・・
表面層ですべて関数化したほうがDXライブラリっぽくていいのいね
0600名前は開発中のものです。
2009/02/21(土) 12:56:14ID:YLpnm94h自分でやれよ。
うだうだうるさいな
0601名前は開発中のものです。
2009/02/21(土) 12:57:32ID:73or/HL/いざ自分がクラスを覚えるとやっぱクラスじゃなきゃやだな。
0602名前は開発中のものです。
2009/02/21(土) 12:58:37ID:YLpnm94hここは
Dxlibのスレだ
0603名前は開発中のものです。
2009/02/21(土) 13:10:33ID:Vvb1WGeN0604名前は開発中のものです。
2009/02/21(土) 13:16:06ID:dxxV1Mryなんかあったらどうせ同じように叩くんだろ?
で、お前ら1本くらいゲーム完成させたのかよ?
できてる奴は晒してくれ。できてない奴は3d叩いてないで、一緒に精進しようや。
0605名前は開発中のものです。
2009/02/21(土) 13:24:03ID:73or/HL/一銭にもならんのに世の中には奇特なひとがいるものだなと思っている。
使うほうとしては助かるが。
0606名前は開発中のものです。
2009/02/21(土) 13:27:49ID:Vvb1WGeNなんかあったら同じように叩くに決まってるだろwそれが悪いのか?
一銭にもならなくても集客や勉強にはなるからな
それを先に期待して失敗したライブラリもあるようだがw
0607名前は開発中のものです。
2009/02/21(土) 13:33:11ID:YLpnm94hhttp://pc11.2ch.net/test/read.cgi/gamedev/1233739646/
こっちだけでやってろよ
0608名前は開発中のものです。
2009/02/21(土) 13:43:26ID:Vvb1WGeN色んなとこでなw
よかったなJEX
0609名前は開発中のものです。
2009/02/21(土) 14:09:34ID:jnbX56CwクラスもOOPも必要ない
DXライブラリだけの知識で充分だ
DarkGDK
http://www.microsoft.com/express/samples/gamecreators/default.aspx
0610名前は開発中のものです。
2009/02/21(土) 14:22:42ID:dxxV1Mryフリーソフト全般に言えることだが、モチベーションはユーザーの笑顔だよ。
勉強も兼ねて作ったソフトでも他人が喜んでくれると嬉しいじゃん。
でも勘違いしないでほしいのは、「奉仕」ではなくて結局は自分が嬉しいからということ。
だから>>606みたいなコはツクールでも他のライブラリにでも行けばいいのは確定的に明らか。
…作者乙みたいになっとるorz
0611名前は開発中のものです。
2009/02/21(土) 14:27:52ID:Vvb1WGeNその話題をだすなホンディー野郎が
0612名前は開発中のものです。
2009/02/21(土) 14:51:46ID:9LkGvvey0613名前は開発中のものです。
2009/02/21(土) 18:11:06ID:ZosdmEGc0614名前は開発中のものです。
2009/02/21(土) 19:22:29ID:qDaUhwJp0615名前は開発中のものです。
2009/02/21(土) 20:09:47ID:YRfeqJWH0616名前は開発中のものです。
2009/02/21(土) 22:42:10ID:SXUTviSw投稿者:管理人 投稿日:2008/12/02(Tue) 03:41
> PSPで使えるDXライブラリ風のライブラリに取り組んでいます。
> DXライブラリPortableというそのまんまな名前です。
DXライブラリの名を冠するのでしたらDXライブラリのプログラムがそのまま動く方向で・・・ 嘘です ( いえ、***さんなら可能かもしれませんが・・・ )
というか、似てる度合いにもよりますが、なにもセンスの無い名前( DXライブラリ )を使う必要は無いのでは(^ ^;
;
遠回しな表現だが、DXライブラリの名が乱用されることに困惑している
プログラミング云々以前に、奥ゆかしい心を持つのが大事だと思うよ
渦中の人物さんも、とうに終わったことを批判してる皆様も
|ω・)。oO(・・・なんて言ってみたいね)
0617名前は開発中のものです。
2009/02/21(土) 23:09:02ID:73or/HL/なにを今更かもしれんが
「DXライブラリ」という名前は本当、どうにかならんかったのかな。
一般名詞なのか固有名詞なのか紛らわしい。
0618名前は開発中のものです。
2009/02/21(土) 23:32:02ID:Vvb1WGeNと、JEXが名前のせいにしています
0619名前は開発中のものです。
2009/02/22(日) 01:09:22ID:iXJQLcV6DirectXの公式ライブラリだと思ってる人も居るしね
でもこの微妙な名前のお陰で検索で迷うことが無いw(似た名前を誰も付けないから必ずトップに来る)
しかしDX(デラックス)ライブラリなのか"D"irect"X"ライブラリなのかどっちなんだ
0620名前は開発中のものです。
2009/02/22(日) 01:48:46ID:MYCg5Ttv遠回しな否定にちょっと笑った
>617
遠い昔に、同じようなことを(仲間内でだが)ツッコんだ記憶があるw
0621名前は開発中のものです。
2009/02/22(日) 10:47:40ID:SOgPp2Su0622名前は開発中のものです。
2009/02/22(日) 18:24:12ID:D+em7cNw0623名前は開発中のものです。
2009/02/22(日) 23:59:26ID:T9mimNJt今2Dのゲームを作り始めたばかりです。
座標系の変数にint型を使っていますが計算や関数に通すと小数点以下が切り捨てられ若干正確さに欠けるてしまうのが気になります。
floatやdoubleを使えば正確さは取り戻せるのですが、
この先ゲームを大きくしていくにつれて浮動小数点型を使用するデメリットなどはありますか?
たとえば大量の衝突判定を行う際の演算速度に影響しないかなどが気になるのですが・・・
0624名前は開発中のものです。
2009/02/23(月) 00:01:18ID:DH1AxR+6表示座標と内部座標について見直せ。
0625名前は開発中のものです。
2009/02/23(月) 01:02:40ID:pMCsbAxr0626名前は開発中のものです。
2009/02/23(月) 01:16:14ID:8ngKALzm表示の時は整数キャストしなさい。
切捨てが気になるなら四捨五入の関数やマクロでも使いなよ。
演算速度はint>float>doubleだが、
floatで座標を持たないといけない設計のゲームが、
演算速度の関係でint型に戻すとかは考えない方がいい。
作ってるゲームにもよるが、あたり判定はコストが掛かるところ。
演算速度が気になるようなら、基本的な衝突判定アルゴリズム(4分木空間分割)を使うがいいさ。
演算速度の問題はアルゴリズムが解決してくれる。
0627名前は開発中のものです。
2009/02/23(月) 03:04:34ID:E10pxrASそれとは関係ない、こっちの話だが
俺の作ってる2Dゲー、今までは普通に動いてたのが
PCに故障によって多少環境が変わったところ、
状況によって激重になるようになってしまった。
もともとそんなに高性能PCってわけじゃない(はずな)のに
非効率な組み方でちゃんと動いてたから安心してたんだが
これはちょっと根本的に見直す必要があるのかもしれん。
画像のサイズを2のn乗にする事で多少改善した部分もあるが
画像とは関係なしに重くなる部分があるようなので
それこそ以前勉強しようとして挫折した空間分割とか考える必要があるのかも……。
0628名前は開発中のものです。
2009/02/23(月) 03:12:12ID:8ngKALzm当り判定なのか、描画処理なのか、読み書きなのかだ。
それぞれマイクロ秒単位(GetNowHiPerformanceCount)で処理時間を計測して、
ボトルネックになってる箇所があたり判定なら空間分割したらいい。
勉強するのが嫌なら、どっかその辺のライブラリ引っ張ってきたらいいさ。
0629名前は開発中のものです。
2009/02/23(月) 08:31:25ID:wwU8DbAV広がっていきませんか?
0630名前は開発中のものです。
2009/02/23(月) 12:31:35ID:cbCnDoWc誰かアドバイス頼む。
0631名前は開発中のものです。
2009/02/23(月) 12:34:36ID:s3UHHKOo0632名前は開発中のものです。
2009/02/23(月) 12:35:17ID:D3Z7OH4U0633名前は開発中のものです。
2009/02/23(月) 13:49:42ID:cbCnDoWc例えば、毎フレーム5ドットずつ動くオブジェクトがあるとする。
「速度アップ」というアイテムがあり、それを取ると移動速度が10%上昇する。
速度10%アップということは、速度が5から5.5になることを意味する。
だが、当然ながらint型では5.5という数字は表現できない。
無理矢理に5.5を表現しようとすれば、
フレーム毎に5ドット移動と6ドット移動を繰り返す……みたいなプログラムになるだろう。
でもこれはロジックとしては最悪だろうし、見た目にもガクガクしてしまう。
この場合、整数型で「速度10%アップ」なんていうアイテムの仕様が悪い。
もし一人で作っているなら、そのゲームの仕様を見直すべき。
これは極端な喩えだが、
そういう部分を考えずに、安易に浮動小数点にしよう!とするから問題が起こる。
0634名前は開発中のものです。
2009/02/23(月) 13:54:01ID:wvqDMdSg0635名前は開発中のものです。
2009/02/23(月) 14:05:09ID:2rXEX53B0636名前は開発中のものです。
2009/02/23(月) 14:12:20ID:cAIICXpl減算とか特殊な描画モード使ってたり、大きいテクスチャ使ってると環境毎に差が出やすかった経験
0637名前は開発中のものです。
2009/02/23(月) 14:14:52ID:JKBRWfYbどうせキャラは1ドットずつしか動かないだろう。
いまどきなシューティングしようとおもったら、
弾の移動なんかは、弾オブジェクトに加速度や速度をベクトルで持たせるだろうから、小数点使いなよ。
丸め誤差については値のとるべき範囲と計算式の展開方法を見直せ。
やれやれ。こんな質問じゃあDXライブラリ使用者の質が問われるぜ……。
0638名前は開発中のものです。
2009/02/23(月) 18:54:46ID:GQvUpA/Gfor(i=0;i<10;i++) x += 0.1;
とやってもx==1.0にはならないと読んで、
次アクション系作るときは座標を固定小数点にしようと思った。
たとえば上の計算の直後の x は0.9999になる場合がありそのときそれをintにキャストしたりfloorすると0.0になってしまう
というのを(常識なのかもしれないが)それを読むまで知らなかった
0639623
2009/02/23(月) 19:27:59ID:4Qo3h6rv回答ありがとうございます。
衝突判定に試行錯誤する覚悟でfloatを使っていこうと思います。
>>633
たとえば、5ドットずつ動く弾をx軸から10度の方向に撃つとき、
sin10°*5だと1を割ってしまうので座標を整数で記述していると10度の方向に行かず水平に移動してしまいます。
intを固定小数点数的に記述する方法もあるにはあるのですが
あくまでみなし少数なので注意してコーディングしないとバグが出る、要するに面倒くさいんです。
0640名前は開発中のものです。
2009/02/23(月) 20:03:52ID:JKBRWfYbまさか1周256°のsinテーブル保持するなんて、オールドテクニック使うつもりじゃないんだよね?
整数部と小数部を持たせる固定小数点だとfloat演算より余計にオーバーヘッド食うよ。
素直にfloatでOK。
0641名前は開発中のものです。
2009/02/23(月) 20:22:10ID:JKBRWfYb1.浮動小数点に関して、==で比較してはならない。
2つの浮動小数点数の差を取り、その絶対値が誤差限界より小さい時には、等しいものと判定するようにする。
2.浮動小数点同士の計算は一番最後に行う。
誤差の蓄積を防ぐため。上手いこと計算の順序を変える。
3.一時的に整数型を使う
0.1を10回足し算する計算を、0.1を10倍して1にしてから10回足して、その後に10で割る。
固定小数点の中でも、特に整数部と小数部を分けた固定小数点はバグの温床になりやすい。
正直いらんお世話だと思うが、1人でも悩んでいるのならとおもって書いておいた。
0642633
2009/02/23(月) 21:54:08ID:cbCnDoWc整数だと正確さに欠けると言っても、その「正確」って言葉自体に色んな意味があると思うんだ。
(1)何らかの物理法則(嘘物理でもいい)をトレースする正確さ
(2)プログラマの想定通りに動くという意味で正確さ
前者だと、intよりもfloat、floatよりもdoubleの方がより正確だろう。もちろん限界はあるけど。
後者だと、ちゃんと仕様を理解している限り正確さなんて変わらない。
なので、整数型だと正確じゃなくなる、という表現は誤解を招くかもしれない。
自分(>631>633)もそうだが、>624なんかも後者の意味で捉えたんだと思う。
>後半(>633へのレス)部分
要は、プログラム側で整数型を使うと決まっている時に、
整数で表現できない数字を使おうとするのが、そもそもの間違いってこと。
よく言われることとして、ゲームは物理シミュレーションではない。
物理法則を “正確” にトレースするより、物理法則に従ってるっぽく見えることの方が重要なわけだ。
>639の例なら、45度の角度なら水平に飛ぶことはないだろう。
もちろん誤差は出るが、その誤差に合わせてゲームの内容や難易度を調整すればいいんだ。
あ、浮動小数点を否定しているわけじゃないぞ。
最終的にはfloatとかdoubleを使うことになるだろうし。
0643名前は開発中のものです。
2009/02/24(火) 18:11:56ID:ZuK8YWCVRPG作ろうと思って2週間くらい粘って
斜め移動とか歩くモーションとかは入れられるようになったんだ
で、チップを使わずに、もしアイテムとか人が立ってたとしたら
ある範囲まで近づいたら頭の上にでもアクションが出るようにしたいんだけど
こうすると、いけるところといけないところの判定を作るのがごちゃごちゃになる。。
先人の知恵があれば、誰か。。
0644名前は開発中のものです。
2009/02/24(火) 18:16:16ID:jZRLhqc7間に壁があったらアクションが出ないようにしたいってこと?
0645名前は開発中のものです。
2009/02/24(火) 18:24:36ID:ZuK8YWCV壁の絵を描いたとする。
その壁の座標に沿って越えられないようにする。
ような感じなんだけど、チップでやれば、
チップ番号で判定してそこだけ通れないですむけど
壁が複雑な形(円状に、三角だとかだと、どうするのかなぁって。
0646名前は開発中のものです。
2009/02/24(火) 18:26:41ID:ZuK8YWCV円状になってたり、角になってたり、
です
0647名前は開発中のものです。
2009/02/24(火) 18:35:54ID:CVLB4nkp0648名前は開発中のものです。
2009/02/24(火) 18:38:56ID:ZuK8YWCV通れないところはたとえば緑で塗りつぶして
座標と入力された方向に移動量を加算して
画像の1bitで判定してもし緑なら動作しないでおk?
0649名前は開発中のものです。
2009/02/24(火) 19:02:21ID:dNVL6GY6画像を使ってもメモリが許すなら>>648の作り方でOK
で、キャラと反応オブジェクトの間に壁があるなら非アクション。それ以外なら距離が近づいたらアクション
みたいな感じでいいんじゃない?
0650名前は開発中のものです。
2009/02/25(水) 00:50:52ID:d7hz7bDRすげーわかりにくいぞ。
頭の上にでもアクションってんが、メタルギアソリッドの敵兵の気づき!
みたいなのだとするとして、
1)アクション表示キャラの判定の選別が難しいのか?
それとも、2)キャラの動きの判定(進入可能区域か否か)が難しいのか?
その両方か?それとも判定じゃなくて、3)衝突反応に問題を抱えてるのか?
どれだ?
※衝突反応・・・・壁に計算上はめり込む位置からの移動の時に、
垂直にぶつかったら、壁の前で停止、
斜めにぶつかったら、壁に沿って進行方向に近い向きに進む。
などの判定以降の処理。
とりあえず、 『実例で学ぶゲームAIプログラミング』に1)2)等については書いてあった。
たぶん、今後とも良い勉強になるとおもうから、お勧めする。
3)は、ひたすら細かい調整をしていくしかない。
基本は、幾つかの場合分けをして考えれば直ぐに分ると思う。
0651名前は開発中のものです。
2009/02/25(水) 01:12:39ID:tDlRDwGK2)だぜ。親切にありがとう。本屋で探してみる。
0652名前は開発中のものです。
2009/02/25(水) 02:31:40ID:Z85CVAO20653名前は開発中のものです。
2009/02/25(水) 03:43:37ID:kcXQw5Ss全然わからなかったw
0654名前は開発中のものです。
2009/02/26(木) 12:21:47ID:dehVPWYB描画先指定でグラフィックハンドルを指定したら出来なかったから気になったんだけど……
0655名前は開発中のものです。
2009/02/26(木) 16:44:08ID:FCvuxnjLそれじゃないと書き込みできないよ
0656名前は開発中のものです。
2009/02/26(木) 17:45:59ID:dehVPWYBグラフィックと画面は別なのね……
0657名前は開発中のものです。
2009/02/27(金) 06:25:11ID:MX3xvzHi座標扱う時は素直にfloatでよかったのか
俺は小数点型だともしかしたら遅くなるかもと思い
座標計算には100倍したものを使い、表示するときに100で割って使ってたのだが
(まあ10倍で十分かもしれんが)
あと、どっかでfloat よりも double 使った方が良いと聞いたので、
俺は小数点型を扱う時には専ら double型を使ってるのだが
0658名前は開発中のものです。
2009/02/27(金) 07:50:49ID:KlYIcaW4それが得策。floatは、使い方が難しい。
悪く言えば、既に過去の産物で、互換性のために残ってる・・・。
ぐらいに思い切ってしまった方が良いぐらい。
有効桁数が小さいし、感覚と違う所が強いから
小数点として扱う時は、意味も分らずにfloatを使ってると
変なバグに嵌りまくる。しかも、見た目間違ってない様なコードで嵌るからねwww
逆に、doubleだと、intよりも有効桁数が大きいから、
intで大丈夫な桁範囲を軽くカバーできるしね。
ボトルネックになってない所の計算だったら、正直doubleが無難だよ。
(あと、意外とdoubleの方が早かったりすることも多いから、
実測で比べるのは言うまでもないが。)
0659名前は開発中のものです。
2009/02/27(金) 10:49:02ID:tFIcInvl確認もせずに想像で言ってみる。
0660名前は開発中のものです。
2009/02/27(金) 19:35:42ID:0AHSCy/i0661名前は開発中のものです。
2009/02/27(金) 21:05:19ID:EURlNcbtこのライブラリ知る前から自前のライブラリもDxLibって付けちまってたし
まぁ何年もまえの話だが
0662名前は開発中のものです。
2009/02/27(金) 21:13:18ID:ZQTPwJtlちょっとダサカッコイイ感じが対象者レベルにぴったりだし。俺含めて。
0663名前は開発中のものです。
2009/02/27(金) 21:31:46ID:lChaxYTzが、いまさらオリジナルの名前に戻されてもね。
DXLibで十分や。
0664名前は開発中のものです。
2009/02/27(金) 23:17:07ID:0AHSCy/iその微妙な心境が手に取るように分かるぜw
0665名前は開発中のものです。
2009/02/27(金) 23:17:18ID:+el9j4ty0666名前は開発中のものです。
2009/02/28(土) 00:42:10ID:aTuc4vAr0667名前は開発中のものです。
2009/02/28(土) 06:17:37ID:P7f9XrLxウィンドウハンドルを取得する方法を探してたら、非公開関数で取得できるのを知って
他にも有用な関数がありそうなので気になったんだが
0668名前は開発中のものです。
2009/02/28(土) 06:32:10ID:TAywFnWh利用する頻度の少ない関数を初心者に公開するには混乱の元というコンセプトらしい。
コメントとソースで自力で読むしかない。
0669名前は開発中のものです。
2009/02/28(土) 06:34:58ID:LqQy7pZDttp://studiokingyo.fc2web.com/dxlib/kaibou/k_shiyou.html
0670名前は開発中のものです。
2009/02/28(土) 06:54:33ID:P7f9XrLx非公開関数のリファレンスは書くつもりは無いのか
わざわざ用意した関数のリファレンスを書かないのは勿体無い気もするが
ヘッダ見たら色々あったけどコメントだけじゃ引数がわからないし、ソース読むしかないのね
>>669
そこ見て非公開関数の存在を知ったんだけど、他にも説明のある非公式のサイトとかないのかな?
0671名前は開発中のものです。
2009/02/28(土) 06:58:59ID:TAywFnWhわかんなかったのはMenu関係かな。
どれが便利な隠れ関数なのか人によってまちまちだからな〜。
全部教えるわけにはいかないので、その都度聞いてくれ。
あと、大概公式の掲示板を関数名で検索すると作者がサンプルコード書いてあるよ。
0672名前は開発中のものです。
2009/02/28(土) 07:00:08ID:LqQy7pZD他のところは知らないかな
もし需要あるなら非公開関数ちょっと調べてリファレンスでも作ろうか?
0673名前は開発中のものです。
2009/02/28(土) 07:01:10ID:TAywFnWh俺からも ぜ ひ 頼 む
0674名前は開発中のものです。
2009/02/28(土) 07:06:17ID:LqQy7pZDでも、正直DirectX使えばなんとでもなるから、わざわざ推奨されない非公式関数発掘して制約多い状態でDxLib使うより
その方が早い気もする
中見てないから分からないけど、ソースが綺麗だったらまだ救いようあるんだけどな……
0675名前は開発中のものです。
2009/02/28(土) 07:19:28ID:TAywFnWhリファレンスもあったら便利だけど、目ぼしい関数はチェックしてるからなぁ。
0676名前は開発中のものです。
2009/02/28(土) 07:27:18ID:P7f9XrLx教えてもらえるなら助かるわ
といっても、そこそこ量があるので使えそうな関数を探すのが難しそうだがw
>>672
非公開関数をまとめてくれるのなら有難い
0677名前は開発中のものです。
2009/02/28(土) 12:35:30ID:1J8Bdlx6結構需要あると思うし、個人的にもすごくうれしい
0678名前は開発中のものです。
2009/02/28(土) 17:39:28ID:mz4DlK2y0679名前は開発中のものです。
2009/02/28(土) 18:56:21ID:JPI33j26ってことはDXライブラリでも極めれば市販ゲームレベルの作品が作れるって事だね
0680名前は開発中のものです。
2009/02/28(土) 20:56:23ID:GSZZUTVZ0681名前は開発中のものです。
2009/02/28(土) 21:06:52ID:gSUwRndo全部別々のファイルを読み込んでアニメーションさせるのって負荷とか違うのかな?
後者の方がやりやすいんだがどうなんだろう
0682名前は開発中のものです。
2009/02/28(土) 21:15:45ID:GSZZUTVZテクスチャの切り替えが減って効率は良くなる
0683名前は開発中のものです。
2009/02/28(土) 21:20:02ID:gSUwRndoやっぱりそうなのか・・
パーツ分けがめんどくさいんだよなぁ
0684名前は開発中のものです。
2009/02/28(土) 21:25:21ID:GSZZUTVZそれこそ機械にやらせればいいでしょ
0685名前は開発中のものです。
2009/02/28(土) 23:32:58ID:gSUwRndoフォトショで画像作ってるからPSDファイルなんだよね
ヘボプログラマーなんでPSDファイルを分割するプログラムは作れないです・・
0686名前は開発中のものです。
2009/03/01(日) 01:19:31ID:Q0b0e5s40687名前は開発中のものです。
2009/03/01(日) 01:43:53ID:gJBH+jz2あるよー
でもマクロするほどの作業量でもないので手動でやります
0688名前は開発中のものです。
2009/03/01(日) 04:00:52ID:4UMfyekW681と682の質疑応答の意味がよくわからん。
1ファイルを分割しようが、複数ファイルを読み込もうが使用する数は同じじゃないの?
0689名前は開発中のものです。
2009/03/01(日) 04:46:48ID:gjx3PjZU同じじゃん。
どっちの方が管理が楽だろう?っていう人間の負荷の話ならともかく
0690名前は開発中のものです。
2009/03/01(日) 05:31:56ID:idjBCaEs一枚の画像を読み込み複数に分けハンドルを取得→PCが操作する画像は一枚
複数の画像を読み込みそれぞれをハンドルを取得→PCが操作する画像は複数
負荷が多いのは勿論後者
大げさだけど
一枚100MBの画像を一枚開くのと
一枚10MBの画像を10枚開くの
どっちが早いか考えてみたら分かるんじゃないかな?
まあ、数十枚の画像なら気にする必要はないんだけどさ
容量的にも、バイナリで開けば分かるけど、一枚ごとに色々付加されるから
200kbの画像を2つに分けて保存しても合計で220kbくらいになっちゃう(ものによって違うかな)
0691名前は開発中のものです。
2009/03/01(日) 08:23:41ID: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 ) ;
// マウスを表示するかどうかのフラグを取得する
0692名前は開発中のものです。
2009/03/01(日) 08:24:40ID:idjBCaEs// マウスを表示するかどうかのフラグを取得する
int GetWindowCloseFlag( void ) ;
// ウインドウを閉じようとしているかの情報を得る→本当に終了しますか?とか確認を表示するのに使えそう
int GetWindowUserCloseFlag( int StateResetFlag = FALSE ) ;
//×ボタンが押されたかどうかを調べる
int SetDoubleStartValidFlag( int Flag ) ;
// 2重起動を許すかどうかのフラグをセットする←複数起動させてもいいゲームならここを変更
マルチタスクのゲーム作りたいならここらへんが役に立ちそう
int AddMessageTakeOverWindow( HWND Window ) ;
// メッセージ処理をDXライブラリに肩代わりしてもらうウインドウを追加する
int SubMessageTakeOverWindow( HWND Window ) ;
// メッセージ処理をDXライブラリに肩代わりしてもらうウインドウを減らす
軽くみた感じ使えそうなのはこのあたりかな?
0693名前は開発中のものです。
2009/03/01(日) 08:37:37ID:idjBCaEs// ウインドウの初期位置を設定する
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から呼ぶことも出来そうだけど本体いじらなきゃ駄目っぽくてめんどくさい
0694名前は開発中のものです。
2009/03/01(日) 08:44:55ID:idjBCaEs〜略〜
SetWindowUserCloseEnableFlag( FALSE ); //×ボタンで自動終了しない
while(ProcessMessage()==1)//だっけ?
{
ClsScreen();
game();
ScreenFlip();
if(GetWindowUserCloseFlag()==-1)//×ボタンが押されたら
{
if(MessageBox(NULL,"終了しますか?","終了確認",MBYESNO)==IDYES) //YES,NOでYESが押されたら
break;
}
}
〜略〜
こんな感じにすればできる(と思う)
組み合わせだからなあ……リファレンス作るより小技をいくつか乗せた方が良いのかな?
0695名前は開発中のものです。
2009/03/01(日) 08:45:28ID:idjBCaEs悲しくなってきたから寝る
0696名前は開発中のものです。
2009/03/01(日) 09:26:49ID:k4cT38FBリファレンスも欲しいけど、小技のほうがうれしいかも。
0697名前は開発中のものです。
2009/03/01(日) 09:55:31ID:gjx3PjZU最初のファイル読み込みはともかく
ハンドルに分けて使う段になったらどっちも同じじゃね?
×一枚の画像を読み込み複数に分けハンドルを取得→PCが操作する画像は一枚
○一枚の画像を読み込み複数に分けハンドルを取得→PCが操作する画像は複数
>>691乙
0698名前は開発中のものです。
2009/03/01(日) 10:04:25ID:idjBCaEs>>694だと×ボタンが押された時点でキューが送られちゃってるからDXライブラリの内部の構造的に終了確認はできない(終了確認が無限に出続ける)
「終了します」って有無を言わさぬ表示なら出来るけどね
中身見てるけど、終了キューを解除する関数は見あたらないし
独自に一度キューを取得して、ProcessMessageに投げる前に解除しちゃえば良いんだろうけど、そんなことすると初心者でも使えるって良点があじゃぱー
>>696
どんな小技が良いかな?
さっきあげた関数は単体で使えると思うし
今ソース見ながら色々いじってたけど
それ以上のことやろうと思うと色々内部的に引っかかることに気付いた
>>697
もう一度よーく読んでほしい
0699名前は開発中のものです。
2009/03/01(日) 10:54:11ID:gjx3PjZUごめん。
よく読んだ上で書いたけどわからない。
理解力なくてすまん。きっと俺が間違っている。
が、これは瑣末な問題なので暇なときにでも考えておくとして…
>>693
>一応応用テクニックとして、HSPからDXライブラリを呼ぶ方法とかだったら需要ある?
これ興味あるかな。
0700名前は開発中のものです。
2009/03/01(日) 11:24:01ID:oPHW1ePYハンドル分けたらだめ
一つのハンドルから転送元の領域を指定して描画するんだよ
同じテクスチャを連続して使うときは切り替えが行われないからその分効率が良くなる
0701名前は開発中のものです。
2009/03/01(日) 11:38:25ID: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
読みこみ速度は同じだけど描画速度は
一枚の画像を読み込み複数に分けハンドルを取得 > 複数の画像を読み込みそれぞれをハンドルを取得
0702名前は開発中のものです。
2009/03/01(日) 11:39:47ID:a7Bg5ATd0703名前は開発中のものです。
2009/03/01(日) 11:44:24ID:oPHW1ePY0704名前は開発中のものです。
2009/03/01(日) 13:22:39ID:gjx3PjZUなるほど
理解したdクス
>>701
読んでみる
>>702
今更HSP使う気はないけどやり方にはちょっと興味が
0705名前は開発中のものです。
2009/03/01(日) 13:39:31ID:9rIzOA3I乙
前にHSPから使ったりしてたけど、わざわざHSPから呼び出す必要があまり無いような気がしたのでVC導入したな
0706名前は開発中のものです。
2009/03/01(日) 14:11:25ID:idjBCaEsなるほど
StateResetFlagは初期値FALSEになってるやつか、完全に見落としてたアリガトウ
>>702
HSP使うメリットってなんだろう、(うろ覚えだけど)3D処理が簡単なDLLかなんかがあったよね?
でも、それ使うなら最初からHSP使えばいいし……
自分から言っといてなんだがメリット見えないやごめんw
DXライブラリの可能性を追求しようと思ってドラッグ&ドロップで画像表示するアプリ作ろうと思ったらこんなに時間かかっちゃったよ
やっぱりアプリ系はおとなしくWINAPI使うに限るorz
http://www3.uploader.jp/t/nico/images/nico_uljp00021.zip
ふ、と思ったんだけどこのスレ結構知識ある人多いしうpロダでも用意しとけばサンプル集みたいなの作れるしいいんじゃね?
人のソース見れるってのは、(俺含め)初心者にはとてもありがたいんだよね
0707名前は開発中のものです。
2009/03/01(日) 14:27:12ID:ZNmLTGrU0708名前は開発中のものです。
2009/03/01(日) 14:51:26ID:lYNtcth60709名前は開発中のものです。
2009/03/01(日) 15:45:22ID:z/eFYQPp一応動いているが、初心者どころの問題じゃない。
0710名前は開発中のものです。
2009/03/01(日) 16:15:26ID:xm1UJhmc指摘されればどこが良くて悪いのかが分かって次に必ず生かせる。
リアル知人じゃなくて2chで晒すのがいいかはよくわからんが・・・
うpするのとは話がちょっと違うけどここでも読んでみるといい
http://www.kojima-cci.or.jp/fuji/mybooks/cdiag/cdiag.0.6.html
0711名前は開発中のものです。
2009/03/01(日) 16:37:16ID:g9LGhZvF0712名前は開発中のものです。
2009/03/01(日) 16:45:33ID:c9LYSV+3きれいに書いたpngだとぜんぜん解像度違うような気がして変になっちまった。
ドット絵の設定ミス?それともpngにそろえるべきかな。。
0713名前は開発中のものです。
2009/03/01(日) 18:31:12ID:a1nbTQe/0714名前は開発中のものです。
2009/03/01(日) 23:17:37ID:2a8K6SCCグラデーションの画像を極座標変換?して
円形の画像を作成しているのだけれど、
これが何をやっているのかよくわからん。
0715名前は開発中のものです。
2009/03/01(日) 23:25:10ID:oPHW1ePY0716名前は開発中のものです。
2009/03/01(日) 23:54:03ID:A8mpIuw80717名前は開発中のものです。
2009/03/02(月) 00:15:56ID:ziDQhibJ0718名前は開発中のものです。
2009/03/02(月) 00:35:55ID:hEBh+N4j多分違うと思うぞ
Pixel氏が以前DirectX2だか3だかを使って作ったって言ってたし
何か勘違いしてああ答えたか、若しくは今作ってるゲームにDXライブラリを使ってるんだろう
0719名前は開発中のものです。
2009/03/02(月) 01:43:24ID:3riYRQc6フルスクリーンにしないといけないから制約はあると思うけど
0720名前は開発中のものです。
2009/03/02(月) 01:47:07ID:7FxY5OR7あれいじればできるんじゃね?
0721名前は開発中のものです。
2009/03/02(月) 01:52:06ID:x0I/gxMTSetGraphMode( 800 , 600 , 32 ); で800*600になる
0722名前は開発中のものです。
2009/03/02(月) 02:06:23ID:3riYRQc6ライブラリ書き換えるのはアウトだろ常識的に考えて……
そのせいでいつどこでバグが起こるかわからぬ
>>721
サンクス
画面モードの変更で解像度が変えれるとは、単語検索で見つからないわけだ
0723名前は開発中のものです。
2009/03/02(月) 02:13:56ID:PBT6djln一覧を一通り目を通せば済むだろ。
0724名前は開発中のものです。
2009/03/02(月) 06:43:49ID:+ax8ZdoD上から下まで読むんだけどなぁ・・・
0725名前は開発中のものです。
2009/03/02(月) 08:17:17ID:vDZSfAmrでも文字表示とかDXライブラリっぽいよな
0726名前は開発中のものです。
2009/03/02(月) 11:57:41ID:6eQe3/TVリファレンスをさらさらっと流して、「これなら俺にも使えるんじゃないかな?」と思って
使い始めたな。
別に覚えなくても、一度目を通しておけば、
後になって「こういう事がしたいけど、それっぽい命令あったよな……」って
探しやすくなるしな。
0727名前は開発中のものです。
2009/03/02(月) 20:14:38ID:hc/QEiU+DirectXでゲームを作るっていうジャンルに関して革命的だし、最早XNAなんかも超えてると言っても過言ではない。
0728名前は開発中のものです。
2009/03/02(月) 20:18:02ID:qXNeI5og0729名前は開発中のものです。
2009/03/02(月) 21:13:54ID:Rv93cI1M0730名前は開発中のものです。
2009/03/02(月) 21:38:18ID:3lZqI4Auそこじゃねーだろwww
0731名前は開発中のものです。
2009/03/02(月) 21:42:53ID:3lZqI4Au0732名前は開発中のものです。
2009/03/02(月) 22:25:14ID:ziDQhibJ一枚一枚画像を作ってパラパラ漫画みたいにアニメーションさせるのとどっちが負荷低いかな
0733名前は開発中のものです。
2009/03/02(月) 22:54:20ID:qXNeI5og原理的に変わらないはず
0734名前は開発中のものです。
2009/03/02(月) 22:57:12ID:qXNeI5ogまあ変わらん
0735名前は開発中のものです。
2009/03/03(火) 01:09:39ID:vuUaUlBc回転ありの描画命令よりは回転なしの方が負荷は軽いだろうけど、
大した差じゃないみたいだし、好きにしていいんじゃないかな。
0736名前は開発中のものです。
2009/03/03(火) 02:53:14ID:l+63ggMa512x512のパーツが回ってるぜ!とか
回転角度に応じて256パターンの画像を用意しました!
みたいな変なことやってなきゃ大丈夫だろう
0737名前は開発中のものです。
2009/03/03(火) 03:53:26ID:wZU6jxH0パラパラ漫画が全部VRAMに乗るとは限らないし、
1フレーム1枚のように別テクスチャ作るのであればさらに重くなる。
1枚でまとめる場合も、作成できるテクスチャサイズ制限があるハードウェアが過去にあり、
(Voodoo時代ではテクスチャサイズが256*256が最大であった)
そのような場合、DXライブラリではテクスチャ分割が行われるので、
大きなテクスチャを作るとパフォーマンスが犠牲になります。
なので、回転・反転・拡大縮小などといった
Direct3Dによるハードウェア支援で記述できる内容であるのなら、前者の方がパフォーマンスがよくなります。
ちなみに後者で実装するのであれば、テクスチャのサイズは正方形が望ましいですよ。
0738名前は開発中のものです。
2009/03/03(火) 04:22:48ID:l+63ggMa最初から画像を用意しておいた方が綺麗に見えることは多々あるな。
プレイヤーキャラの画像など、
重要そうな部分だけパターンを用意しておくのも悪くない。
0739名前は開発中のものです。
2009/03/03(火) 09:38:20ID:HSt7mZci>正方形
一辺の長さが2の倍数の正方形ね
0740名前は開発中のものです。
2009/03/03(火) 14:11:43ID:lmHLCC6G> 2の倍数
2の累乗ね
0741名前は開発中のものです。
2009/03/04(水) 10:39:32ID:IqyXTxRbグラフィックハンドルがintって事は、持てるグラフィックハンドルの最大数は約32000って事?
0742名前は開発中のものです。
2009/03/04(水) 10:43:25ID:OmVViNLoその前にメモリがなくなるだろうけど
0743名前は開発中のものです。
2009/03/04(水) 16:29:04ID:aWTUpMQ10744名前は開発中のものです。
2009/03/04(水) 17:38:35ID:IqyXTxRbintってそんなに長かったっけ?
>>743
ちゃんと1つずつID割り振って読み込んでるみたい。
0745名前は開発中のものです。
2009/03/04(水) 18:29:44ID:Q764ubCY符号無しintは2^32
符号ありintは2^31(符号に1bit使用)
プログラミングしてるなら知ってて当然だろ…
0746名前は開発中のものです。
2009/03/04(水) 18:29:46ID:zCrgAKk6おまえさんのいってるのは short int
0747名前は開発中のものです。
2009/03/04(水) 19:26:33ID:IqyXTxRbなんで勘違いしてたんだろう……
0748名前は開発中のものです。
2009/03/05(木) 00:07:34ID:aVo6G4mJ何を言ってるんだ?
東方はDXライブラリ使ってないぞ
0749名前は開発中のものです。
2009/03/05(木) 10:15:06ID: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 ) ;
とすると透過処理されません
なぜでしょうか?
0750名前は開発中のものです。
2009/03/05(木) 10:26:43ID:ddVb/3t1旧VBのIntegerが16bitなのと混ざってない?
>745
ハードは関係ない。コンパイラが決定する。
16bitアプリを32bitハードやOSで走らせても
intが勝手に32bitになったりしない。
処理系にあわせて決定するのが自然なだけ。
0751名前は開発中のものです。
2009/03/05(木) 11:04:56ID:B3wyDoGNはい? え?
back.bmp を透過処理なしで描いた上に、char.png を透過処理ありで描いたらそりゃちゃんと透過処理されるだろうけど
char.png を透過処理ありで描いた上に、back.bmp を透過処理なしで描いたらそりゃ上書きされるだけだと思うんだが……。
0752名前は開発中のものです。
2009/03/05(木) 12:34:23ID:+9ctDc2hあー、昔に見た資料がかなり古いものだったから間違って覚えてたのかも
0753名前は開発中のものです。
2009/03/06(金) 21:17:00ID:pmzRauOhリファレンス見る限り見当たらないのですが
0754名前は開発中のものです。
2009/03/06(金) 21:34:26ID:+Tdk650S透過の度合いはPal引数
クラス使って透過率とグラフィックハンドルをまとめて管理するようにするといい
0755名前は開発中のものです。
2009/03/06(金) 21:46:01ID:pmzRauOh即レスありがとう^^
うまくできました!!
0756名前は開発中のものです。
2009/03/06(金) 23:45:45ID:HF/v1JaI0757名前は開発中のものです。
2009/03/07(土) 00:24:08ID:3MouTLA1本家DXライブラリにテクスチャ付モデルとフォグ表示機能だけあれば最高なんだが
0758名前は開発中のものです。
2009/03/07(土) 01:56:55ID:JfYg6t6e意外と簡単に組めたよ。
ポリゴン事に情報を配列に落として、座標を変換してVERTEX配列に入れてから描画。
フォグは出来なかったから単色背景+奥の頂点を透過で誤魔化してる。
0759名前は開発中のものです。
2009/03/07(土) 07:03:57ID:pCqKP5AO仕様ですか?
他で初期化するから別に問題ないけど。
0760名前は開発中のものです。
2009/03/07(土) 08:46:35ID:9xqjyk6rでもLoadGraphみたいな失敗しやすいものをコンストラクタで使うのはあまり好ましくない
0761名前は開発中のものです。
2009/03/07(土) 13:25:49ID:d6ZakwC30762名前は開発中のものです。
2009/03/07(土) 20:23:03ID:83odH6gl0763名前は開発中のものです。
2009/03/08(日) 01:02:04ID:sz9LKWkIんなこたないw
0764名前は開発中のものです。
2009/03/08(日) 01:07:09ID:PVP1w5NP.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お願いします!!!!!!!!!!
0765名前は開発中のものです。
2009/03/08(日) 02:05:16ID:Os5GQobq今PC故障中で携帯から書き込んでるので、一週間後位になるけど……
龍神録プログラミングの館に似たような内容の講座があったので、
それを参考にした方が早いかも?
自分のソースと比べた所、アルゴリズムは大差なかったし
0766名前は開発中のものです。
2009/03/08(日) 03:07:46ID:PA5CtbPk>>762
それだわ。
メインループの外だったよ。
0767名前は開発中のものです。
2009/03/08(日) 07:29:17ID:CGpW+st2そうなの?
憂鬱本かなにかにコンストラクタで複雑な処理はやめたほうがいいって
書いてあったから信じてたよ。
0768名前は開発中のものです。
2009/03/08(日) 11:20:16ID:lUOcnlf/0769名前は開発中のものです。
2009/03/08(日) 11:49:19ID:8uH2yrBU失敗したら絶対に例外を投げること
そうでなければダメ
0770名前は開発中のものです。
2009/03/08(日) 13:15:29ID:sz9LKWkI言語仕様的にはまったく問題ない
>768が言ってるように、
その本には別の理由でやめたほうがいいって言ってるんだと思うよ
ただし、staticなインスタンスは例外で
この場合、mainが呼ばれる前のスタートアップルーチンで
インスタンスが生成されるのでコンストラクタでは
初期化以外のことをやるとまずい
0771名前は開発中のものです。
2009/03/08(日) 15:28:40ID:Os5GQobq0772名前は開発中のものです。
2009/03/08(日) 15:35:38ID:26PtmX+Gそれを気にしてたら、世の中作品なんて生まれない。
大丈夫、何ら問題ない。思う存分やれ。キミは盗作じゃない。
……自分のやりたいことを、他の人が作ったのでそれで満足しちゃったなら知らんw
(こっちもよくある話だけどな!)
0773名前は開発中のものです。
2009/03/08(日) 17:25:05ID:tah76f/h0774761
2009/03/08(日) 18:12:09ID:pjH2xL1q俺も>>767のように憂鬱本で読んで信じてきたんだけど、後学のために教えて欲しい。
まず憂鬱本にはこんな風に書いてある。
・コンストラクタやデストラクタはあまり難しい処理をするのは考え物。
1・返り値を持つことが出来ない。
2・インスタンスが完全な状態ではない。
3・外部変数としてクラスインスタンスがある場合、コンストラクタやデストラクタはmain()の走る前、後になる。
>>770さんが言っているのは3の場合で、この本によると
「ポインタとして宣言しておきmain()が走った後でその中でnewする」
という解決策が書いてある。
で、問題の2にははっきりと
「コンストラクタ、デストラクタが走っているときは、インスタンスは完全な状態ではない」
と書いてあり、
「実は内部的にはそのインスタンスの使用するメモリの取得/解放とそれに伴う複雑な作業も行っている」
「インスタンス自体がまだ生成途中であり、内部的にはまだ不安定な状態」
と書いてあります。
問題点は、
「このような状態で他のクラスのインスタンスのメンバ関数を読んだりすると巡り巡ってまだ生成途中の自分自身のメンバ関数が呼ばれるかもしれないから」
との事です。
C#なんかではコンストラクタでのメソッドの呼び出しなども保障されてますが、C++では言語使用的には保障されていない、と解釈したのですがここらへんどうなんでしょうか?
0775名前は開発中のものです。
2009/03/08(日) 19:09:05ID:CrTNgcou今どき2Dだけじゃなぁ
0776名前は開発中のものです。
2009/03/08(日) 19:25:34ID:tHlNETTLいや、意味が分らん。
碌にDirectXすら使えない人間が3Dに手をだしてどうしたいんだ?
むしろ、本家は本家であの程度でまとまってるからこそ良いライブラリだろ。
もっと色々とやりたかったら海外の3Dライブラリをあさればいい。高機能の多いぞ。
(まぁ、普通に日本語対応がメンドイけど。)
0777名前は開発中のものです。
2009/03/08(日) 19:52:53ID:CrTNgcou0778名前は開発中のものです。
2009/03/08(日) 23:53:47ID:Os5GQobq弾幕毎に名前付けてるから、気を付けないとまんまになっちゃうんだよね
もう開き直っちゃおうかな……
0779名前は開発中のものです。
2009/03/09(月) 00:24:37ID:y+3gsDNg0780名前は開発中のものです。
2009/03/09(月) 05:38:20ID:xYWyf4vJ変なこと気にせず好きにやっちゃえYO!
0781名前は開発中のものです。
2009/03/09(月) 13:06:42ID:Ge4atQjd0782名前は開発中のものです。
2009/03/09(月) 13:28:18ID:1MIteGprなんという屈辱を。
0783名前は開発中のものです。
2009/03/09(月) 14:58:21ID:Yq7DJGmBここで愚痴る前にちゃっちゃと完成させて
もう東方に先を越されないようにすればいいじゃない
0784名前は開発中のものです。
2009/03/09(月) 15:06:44ID:mr6tRDyA0785名前は開発中のものです。
2009/03/09(月) 15:12:00ID:anLE8kz6低速移動時に敵を貫通するとかボム使うとパワーが減るとかその辺りか?
0786名前は開発中のものです。
2009/03/09(月) 15:54:45ID:z4EGzSSUこうやって悩むのもゲーム制作の楽しさの一つなので……
気分を害されたのならすいません
>>785
点レートアイテムとか、特殊アイテムを取るとボーナス敵が出る点が……
0787名前は開発中のものです。
2009/03/09(月) 17:01:47ID:GzA1DnX10788名前は開発中のものです。
2009/03/09(月) 18:04:17ID:dWRPooR0A1.はい、参考にしました。
→盗作イクナイ! 俺の好きな○○を汚すな! ○○の公式サイトのBBSに通報(?)書き込み
A2.いいえ、オリジナルです。似ているのは偶然でしょう。
→嘘を言うな、正直に言えよ
A3.いいえ、○○ではなく△△のパクりです。
→そんなん知らねーよ! △△も○○のパクりだな!
実際にあるから困る。
0789名前は開発中のものです。
2009/03/09(月) 18:28:11ID:aHHsyNV0作ることにも価値がある
0790名前は開発中のものです。
2009/03/09(月) 18:40:02ID:6kYj4gTE何も答えないのがベスト。ただただ、事務的返しで流すべし。
あと、>>786みたいのは 東方以前からあるのばっかじゃねぇかよwww
それこそ、ファミコン全盛の時代(のアーケード)から・・・・
「今更それを先を越されたとかwww」
と言われるのが落ちじゃね?
0791名前は開発中のものです。
2009/03/09(月) 18:51:35ID:z4EGzSSU前作が東方をリスペクトしたものだったので、今回も素直に断り書きを入れてみます
0792名前は開発中のものです。
2009/03/09(月) 19:02:29ID:dWRPooR00793名前は開発中のものです。
2009/03/09(月) 21:33:00ID:Zw6a9bk0知ってるとは思うがこれにはずっと期待してる
0794名前は開発中のものです。
2009/03/09(月) 22:34:04ID:GzA1DnX1char a[256]
GetHitKeyStateAll(char *a)
つかうとうまくできねぇ。。
ポインタをctrcmpやるのはおかしいの?
それとも配列に入ってるのがおかしいの?
俺の頭がおかしいの?
0795名前は開発中のものです。
2009/03/09(月) 23:19:34ID:2qC8QqlY遅レスだがコンストラクタについて幾つか書きます。
さすがに長文書いてコメントが無いのは可哀想だったから。
昔の言語仕様ではコンストラクタではインスタンスの生成途中であるから複雑な処理を書かないようにしていた。これは慣習・慣例の部類の話。
コンパイラの亜種が多くて、C++の仕様外の範疇での動作はどのようになっているのか分からない時代だったからという背景もある。
自分はコンストラクタに初期化処理を噛ませる横着な書き方をしていたときに先輩に指摘された事は、1,2,3以外にも、、、
・クラス設計者とクラス利用者は同じでない
⇒利用者がstaticで外部変数なインスタンスを生成するかもしれないから、
mainよりも先に呼ばれる処理に複雑な記述を置くべきでない。
つまり、利用者の立場になって明示的に初期化処理を宣言するべき。(手を抜くな)
・戻り値を持たない件に関して、例外処理を使うのは怠惰な手段である。
⇒try-catchを用いるのは、デバッグの最終手段である。(例外処理はネストできない為)
例外処理は一般的にコンパイラの最適化の阻害となり遅くなる要因となる。(ジャンプテーブルを生成する為)
つまり、保持値チェックにはassert使えというお話。
⇒メモリ確保に失敗する危険性をもっと認識するべき
特定のハードウェアを対象にする場合、大概は独自のメモリアロケーター(dlmalloc等)を実装していることが多く、
new失敗の可能性(インスタンス生成失敗)は大いにある。
とのことでした。
>問題点は、
>「このような状態で他のクラスのインスタンスのメンバ関数を読んだりすると巡り巡ってまだ生成途中の自分自身のメンバ関数が呼ばれるかもしれないから」
>との事です。
これには同意です。
だから「コンストラクタに記述するのはせいぜいメンバ変数に対して初期値の代入ぐらい」に留めている人が大半で自分もそうしています。
いや〜、バグの無いプログラムって難しいですね。
0796名前は開発中のものです。
2009/03/09(月) 23:31:07ID:2qC8QqlY上手くできないってどういう意味?
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
前フレームとの差分で押された瞬間と話された瞬間を検出するべさ
0797名前は開発中のものです。
2009/03/09(月) 23:31:59ID:6kYj4gTE何をやって何ができないのかすら分らん。
とりあえず、×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.
}
な感じに書く。
0798名前は開発中のものです。
2009/03/09(月) 23:42:23ID:YtHLVg0Lint pushOK = 0;
とか用意しといて
if (a[チェックしたいキー] && pushOK) {押したときの処理}
if (!a[チェックしたいキー]) pushOK = 1;
とかやればいいじゃない
(※厳密な文法に突っ込むのなしね、あと変数名が良くないことにもね)
0799名前は開発中のものです。
2009/03/09(月) 23:49:28ID:GzA1DnX1でも、なんとか、動作はしたぜ。
0800名前は開発中のものです。
2009/03/10(火) 00:11:41ID:Y5ijcxK4パレットはBMPしか有効じゃないんか。
透過色設定とパレット変更を同時にしようと思うと、PNG-8がベストな選択だったんだけど、
さてどうするべか……。
0801名前は開発中のものです。
2009/03/10(火) 00:43:20ID:liOB0hImその時点じゃまだなんだろうかね。
てかそんな命令あったのか……。
0802名前は開発中のものです。
2009/03/10(火) 01:39:41ID:Y5ijcxK4パレット変えられないのは困ったぜ。
0803名前は開発中のものです。
2009/03/10(火) 02:42:45ID:f5O5uX620804名前は開発中のものです。
2009/03/10(火) 05:14:32ID: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)で近づくエフェクトを考えているんですが、
これと同じ機能をブレンドモードを変更することで代用可です?
上手い演算具合が見つからない。
0805名前は開発中のものです。
2009/03/10(火) 05:17:44ID:Y5ijcxK4でも、伝えたいことは伝わったはず。
0806名前は開発中のものです。
2009/03/10(火) 05:52:02ID:6T+yw6I/0807名前は開発中のものです。
2009/03/10(火) 06:29:38ID:Y5ijcxK4SetDrawBright()では黒フェードが出来ますが、それの多色化&抜き色対応版です。
0808名前は開発中のものです。
2009/03/10(火) 09:58:02ID:1/mzBUbU0809名前は開発中のものです。
2009/03/10(火) 11:39:59ID:xhsEfov4ゲームパッドがX-BOX専用コントローラーしか使えないとか論外すぎる。
0810名前は開発中のものです。
2009/03/10(火) 15:29:37ID:AMym+srgつ http://www.4gamer.net/games/027/G002741/20090227065/
0811名前は開発中のものです。
2009/03/10(火) 16:10:09ID:qoncgAvFまあ自分で対応のパッド追加できると思うけどな。
0812名前は開発中のものです。
2009/03/10(火) 16:12:21ID:xhsEfov4いや、そういう問題では・・
0813名前は開発中のものです。
2009/03/10(火) 21:25:09ID:LXtgug0hやっぱり白黒2値のパターンが別途居るようですよね……。
PNG使ってるのに、わざわざマスク画像が必要なのがめんどくさいと敬遠しているんですよ。
0814名前は開発中のものです。
2009/03/11(水) 00:49:09ID:SDHRypL0http://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:エラー発生
0815名前は開発中のものです。
2009/03/11(水) 12:48:22ID:4qWzS982対応してないとかじゃなくて、単に古くて多用されない技術だからじゃないかと無責任に予想
0816名前は開発中のものです。
2009/03/11(水) 23:25:34ID:tpGaQ5tp0817名前は開発中のものです。
2009/03/11(水) 23:28:32ID:jT1zwAC20818名前は開発中のものです。
2009/03/12(木) 00:06:32ID:5lgaab4lいいなぁそういうの使ってみたい。
0819名前は開発中のものです。
2009/03/12(木) 14:35:44ID:hH9qj7K70820名前は開発中のものです。
2009/03/12(木) 23:20:03ID:TV/Jr7F7ちょっと前に気になった事があるので質問させてください
LoadGraph系統以外で作成したグラフィックハンドルから
グラフィックデータのメモリを参照し、編集する事ってできないんしょうか?
SoftImage系の関数で同じような事はできるみたいだけど、
これは画像ファイルから取得したもののみですよね。。
0821名前は開発中のものです。
2009/03/13(金) 00:27:53ID:CMJVUsQ6MakeXXXColorSoftImageじゃあかんの?
0822名前は開発中のものです。
2009/03/13(金) 00:43:55ID:GbqqCgmR0823名前は開発中のものです。
2009/03/13(金) 01:09:59ID:H+Qfngp2ありがとう、今気付いたんだけど先に用途を書くべきでした。
例えば>>816の波紋を実現しようと考えた時、
「このエフェクトをかける前までに描画された画面から
エフェクトをかけたい矩形のグラフィックを取得して、
これを元にピクセルを書き換える」
という処理を考えてみたんですが、GetPixelは重いようなので、
なら直接メモリを参照できないかと思った次第です。
MakeXXXColorSoftImageで作成するのはソフトグラフィックハンドルなので、
ここを描画先にしたりはできませんよね。。?
0824名前は開発中のものです。
2009/03/13(金) 01:19:10ID:H+Qfngp2訂正:ソフトグラフィックハンドル->ソフトイメージハンドル
あと「描画先」と書いたのは、「DrawGraph等で描画できる描画先」という意味です。
直接グラフィックハンドルをソフトイメージハンドルに変換できる方法があればよいのですが。
そもそもこの考え方自体がアホなんでしょうか。。。
0825名前は開発中のものです。
2009/03/13(金) 03:43:56ID:CMJVUsQ6画面全体にエフェクトを掛けたりするのに有ると便利だが、ちょっと調べてみたが出来ないっぽいね。
そもそもLoadGraphやMakeGraphはVRAMに転送した時点でPC環境に依った画像フォーマットに変換されちゃうから、
そこからソフトイメージハンドルを生成するとなると、コンバーター(デコーダ相当)が必要になる。
DXライブラリの作者としては手間が掛かるから、要望が無い限り実装を見送っていると予想している。
優しい作者さんなんで、要望送ってみてはどうかな?
現状で対応するとなると、どうしても遅くなるが、
画面サイズと同じ大きさにMakeGraphした裏画面領域をSetDrawScreenして、
一連の画像を転送し、GetPixcelとDrawPixcelするのがベストな選択かねぇ。
SaveDrawScreenを使ってbmp保存して、そこからSoftImageを作るという最終手段もある。(とても遅い)
0826名前は開発中のものです。
2009/03/13(金) 03:50:25ID:CMJVUsQ6ああ。書いてておもったが、SaveDrawScreenがあるから、デコーダ処理は既に内部には出来てるのか。
作者に要望だすと、すぐに実装してくれると思うよ。
0827名前は開発中のものです。
2009/03/13(金) 04:00:17ID:HX55tf54細かい事は抜きにしてとにかくWindows 環境ではメモリの管理が厳重なので malloc関数 などで確保したメモリ 領域のように簡単にはアクセスは出来ないようになっています。だから 『ロック』という作業を行い直接アクセスできるようにします。
グフィック領域に直接アクセスする利点はDrawPixel や GetPixel 関数を使用するよりも処理が速い、等があります。
ロックの説明をはじめる前に注意なのですが、ロックを行った場合は 直接アクセスが終り次第直ちにロックを解除してください。
ロックを している最中にデバッグモードなどのブレークポイントを使ってプロ グラムを止めるとハングアップするので注意してください。
ロックを すると 『GraphUnLock』関数を使用してロックを解除しない限り DrawLineをはじめすべての描画関数が使用不可能になるので注意してください。
では話を元に戻します。
ロックをするにはまずロックをしたいグラフィックハンドル、または DX_SCREEN_FRONT , DX_SCREEN_BACK 識別子を使って画面をロックする 事も出来ます。
ロックが完了すると関数は PitchBuf に指定したポインタにロック したグラフィック領域の1ライン辺りのバイト数と、DataPointBuf で 指定したポインタにロックしたグラフィックへのアドレスが代入されます。
こうしてロックしたグラフィック領域にはめでたく直接アクセスが 出来るようになります。まず希望の座標(点)にアクセスするには 以下の式を用います
(グラフィック領域の先頭アドレス) +
(X座標値 × (グラフィックのカラービット数 ÷ 8)) +
(Y座標値 × 1ライン辺りのバイト数)
= 希望の座標のポインタ
0828名前は開発中のものです。
2009/03/13(金) 04:02:17ID:HX55tf54『グラフィックのカラービット数は』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 ) ;
0829名前は開発中のものです。
2009/03/13(金) 04:05:06ID: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 ; // ソフトの終了
}
0830名前は開発中のものです。
2009/03/13(金) 04:17:46ID:CMJVUsQ6ありがとう。
GraphLock/Unlockなかなか便利だねぇ
ちょっと使ってみます
作者から非公開関数になった理由が知りたいとこだね
0831名前は開発中のものです。
2009/03/13(金) 10:15:03ID:H+Qfngp2なるほど、そのためのGraphLock/UnLockだったのか。
あと非公開関数になっただけで使う事はできるんですね。
てっきり使用すらできなくなったものだとばかり思ってました。。。
とりあえずはこれで出来そうなので、デコード処理の要望の方は見送ろうかと思います。
お二方とも、ありがとうございました。
0832名前は開発中のものです。
2009/03/15(日) 09:43:05ID:uRILwR6eフルスクリーン<->ウィンドウ切り替え時にだけ発生するならいざ知らず、
フルスクリーン時にフォーカスロストでも発生するから絶対に対策が必要ですよね。
ファイルから復元できるものは別にいいのですが、
困難なのが、MakeGraphやCreateGraphFromMemで作成した画像の自前復元です。
これらハンドルが初期作成状態から書き換えがされている場合、
(GetDrawScreenGraphを使った時や描画可能な仮画面としている場合)には、
画像を元の状態に戻すのってとても困難ですよね?
SetRestoreGraphCallbackが呼ばれる時には既に失われている状態だし、
正直お手上げ状態です。
何か良い方法があったら教えてください。
0833名前は開発中のものです。
2009/03/15(日) 11:01:39ID:jppbXP7e「切り替えなどを行わないでください」
0834名前は開発中のものです。
2009/03/15(日) 11:45:37ID:FC5hsyk7SPY++してみたら、WM_DISPLAYCHANGEもしくはWM_ACTIVATEAPPがDirect3Dオブジェクト解放前に呼び出されてるみたいだから、
このタイミングで保存処理を書いてみようと思う。上手くいくかどうか分からんけど。
0835名前は開発中のものです。
2009/03/15(日) 12:40:49ID:Y2Hs7QZbグラフィック読み込む前に「これを読み込む」ってフラグを立てておき、
全てのグラフィックの中から、そのフラグが立ってるヤツだけを読み込むような処理を作っておき、
実際に読み込む時や、画面復帰した時にその処理を呼ぶようにしてる。
初期作成状態から書き換えをするような事はしてないけど、
するのならそれもフラグ管理する、くらいしか思いつかないな。
0836名前は開発中のものです。
2009/03/15(日) 13:24:25ID:vVFcLUyjやっぱりなかなか良い方法が思いつかないですね。
簡単な命令(DrawLineやDrawBox)だけなら描画コマンドをバッファに記憶しておいて、
復号時に一気にコマンドを流せばいけるんですけどね。
0837名前は開発中のものです。
2009/03/15(日) 21:04:33ID:ddL6tdMh0838名前は開発中のものです。
2009/03/16(月) 01:54:00ID:Ki5zFavX開発引き継ぐならあげるけど。。。
0839832
2009/03/16(月) 04:54:34ID:Ki5zFavX同じような問題で困っている人がいたら、試してみてくれ。
検証が必要な箇所はまだあるとおもうが、とりあえず叩き台のコードをアップししとく。
http://www.dotup.org/uploda/www.dotup.org0835.zip.html
passは1234
0840名前は開発中のものです。
2009/03/16(月) 10:24:23ID:asZSe60i引き継ぎって具体的に何すればいいのさ?
そんなに利用者いるようにも見えないが。
0841名前は開発中のものです。
2009/03/16(月) 12:40:25ID:g/x8PxLoライブラリを使う側じゃなくて作る側になってWebで公開するってこと。利用人数なんて関係ない。
現状、国内じゃまともに使える3Dライブラリが皆無だからね。
ただDXライブラリ3Dが使いたいだけならやめとけやめとけ。
変化の多い3D周りにおいて、開発終了したライブラリを今から使い始めるなんてのは得策じゃないよ。
素直にIrrlichtやORGEを使いなよ。
0842名前は開発中のものです。
2009/03/19(木) 16:51:59ID:AqnRYOAc画像ハンドルでもできるってことは知ってるんだけど、それだと遅くなりそうだしなんとかいい方法はないものか
0843名前は開発中のものです。
2009/03/19(木) 18:28:29ID:XdV/UiQK0844名前は開発中のものです。
2009/03/19(木) 18:36:46ID:JGYzz3L5俺も最近そのために物凄く無駄な苦労をした
DrawGraphとかの引数に描画先のバッファID(またはグラフィックハンドル)を指定するとか、
または予め描画先を指定する関数を呼び出しておくとか、
そういう方法で複数のバッファを使えたら楽でいいと思う
もしそれが俺の無知によるもので、本当は別に手段があるのならぜひ教えてほしい
0845名前は開発中のものです。
2009/03/19(木) 19:07:33ID:XdV/UiQKなぜスクロールさせる事にバッファが二つじゃ足りないのか理解できない。
0846名前は開発中のものです。
2009/03/19(木) 19:12:02ID:JGYzz3L5表バッファには、プレイヤーを中心にした長方形を、
さっきのバッファから指定矩形部分描画を使ってコピーする
実際はもうちょっとスマートな方法だけど、簡単に言うとこういう方法
0847名前は開発中のものです。
2009/03/19(木) 19:29:45ID:ypsj1u3J毎フレーム絶対同じ絵を表示するならそれでもいいけど
実際にはキャラ移動したりするしそれだと良くないんじゃない?
描画開始位置を変数で持っといて、
それを変化させながら表示すればスクロールできるんじゃ?
0848名前は開発中のものです。
2009/03/19(木) 19:42:32ID:y3/WLGqMあれみたほうがいんでね
もっと簡単にできるし
0849名前は開発中のものです。
2009/03/19(木) 19:48:14ID:XdV/UiQK例えば暗闇の中で自分の周りだけ見えてる、みたいなイメージかな。
てか、裏画面にステージ全体を描画っていうけど
裏画面でも表示できる範囲以上の部分は意味なさないんじゃないのかな。
それとも画面はみ出した部分もちゃんと描画されてるの?
0850名前は開発中のものです。
2009/03/19(木) 20:03:26ID:ppqGMfjY0851名前は開発中のものです。
2009/03/19(木) 21:53:29ID:JGYzz3L5そういうこと
0852名前は開発中のものです。
2009/03/19(木) 21:58:54ID:yHINfbtT0853名前は開発中のものです。
2009/03/19(木) 22:00:26ID:JGYzz3L50854名前は開発中のものです。
2009/03/19(木) 23:05:40ID:y3/WLGqM0855名前は開発中のものです。
2009/03/20(金) 00:14:40ID:QmpzOTjS全画面をバッファにおいておくっつーのなら結局メモリはそれだけ必要なんだから
そのまんま画像として持っていてもあまり変わらないと思うし
それを好きな位置に表示すればそれこそ楽だろうと思うし……。
それともあれか。
お絵かきツールみたいに、画面上でいろいろ書き換えたデータを
そのまんまメモリに重ね落として、それをまた画面上に呼び出すとか
するのだろうか。
でもステージって言ってるしなぁ……?
普通ならマップチップつかって必要なとこだけ表示するだけだから楽もクソもないと思うし……。
0856名前は開発中のものです。
2009/03/20(金) 00:57:55ID:Cl/zwFzS0857名前は開発中のものです。
2009/03/20(金) 01:19:57ID:Yr6iBMqgDXlibではマルチスレッドは使えないの?
0858名前は開発中のものです。
2009/03/20(金) 02:05:01ID:+9WRbXfHリアルタイムで背景が拡縮したり回転したり端がループする場合は
一度メモリに書き込んでおいたほうが楽なんじゃないかな
0859名前は開発中のものです。
2009/03/20(金) 02:35:45ID:isrQkVyaマップチップじゃなくてもSetDrawAreaで領域も最小限で済ませるし
0860名前は開発中のものです。
2009/03/20(金) 05:32:02ID:pPzyeiIl0861名前は開発中のものです。
2009/03/20(金) 05:40:13ID:pPzyeiIl>>842
SetDrawValidGraphCreateFlag使えば作れる。
注意点も有るが、それは自分で調べてくれ。
0862名前は開発中のものです。
2009/03/20(金) 05:49:13ID: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 )
が有る。
0863名前は開発中のものです。
2009/03/20(金) 07:38:27ID:Cl/zwFzS0864名前は開発中のものです。
2009/03/20(金) 07:43:26ID:pPzyeiIlZバッファ周りは一通りある
詳しくはDxLib.h見れ
0865名前は開発中のものです。
2009/03/20(金) 11:47:58ID:Nbh1dO4Lまじかー!
よーしパパobjファイル読み込んじゃうぞー
0866名前は開発中のものです。
2009/03/20(金) 17:30:45ID:3g2siCwF結局やり方が分からなくて諦めたことがあったなあ。
どうするのがスマートだったんだろう、と
コーヒー片手にリファレンスを読みなおす。
今は雑巾を片手に。
0867名前は開発中のものです。
2009/03/20(金) 17:42:15ID:s8vfHhBo0868名前は開発中のものです。
2009/03/20(金) 19:41:01ID:m12b5RoS0869名前は開発中のものです。
2009/03/20(金) 20:39:51ID:2ug+O/uj0870名前は開発中のものです。
2009/03/20(金) 23:14:17ID:NDbJHQ4w毎回マップ画面を生成する必要があるのか無いのかによっても分かれるし、
生成後に加工する必要の有無によっても手法が変わってくる。
0871名前は開発中のものです。
2009/03/21(土) 02:35:14ID:0o7dehg/0872名前は開発中のものです。
2009/03/21(土) 02:56:48ID:B0u9yEZ50873名前は開発中のものです。
2009/03/21(土) 04:12:19ID:0o7dehg/セルオートマトンの砂シム作ったときそれでやったよ、まあそんときは800*800だったけど
ところでみんな2Dゲーム作るとき座標関係の変数ってint使ってるの?
自分は三角関数使ったりするから基本floatかdoubleなんだけど、今時のPCなら問題ないよね?
プログラム板のスレとか見ると「浮動小数点なんて遅すぎて使えねー」なんて書き込みが2002年にあったりする
ゲームつくり初めの頃は固定小数点とか聞きかじりでやったりしてたけどやっぱメンドいわ
そろそろ2Dゲームならどんな風に作っても快適な時代になったよね
0874名前は開発中のものです。
2009/03/21(土) 05:15:05ID:r0h/Cj1qノートPCのことも考えると。
0875名前は開発中のものです。
2009/03/21(土) 06:08:05ID:niXBCPWwとにかくメモリーを節約したい場合以外は、floatよりdoubleの方が一般だと思う。
(今時のCPUなら早いし、精度も高いし)
あと、どのくらいその計算をさせてるかにもよると思う。
正直、2Dゲームならよほど大量のデータを演算しまくらなきゃ、
大抵は表画関連の処理時間に肉薄する事もないだろうし。
(パーティクルを超豪華に大放出です!!さらにパーティクル同士が当り判定します!
みたいな時は分らんが、それ以外は問題無いと思う。)
0876名前は開発中のものです。
2009/03/21(土) 09:43:50ID:pH6WTk/tそもそもDXライブラリは内部的にはサーフェスを3Dで扱ってるし、その上でいまさら固定小数点を使っても、
速度差はスズメの涙である。(ボトルネックになる部分はもっと他にある)
計算コストを見直すのであれば、当り判定を工夫したりする方がよっぽど建設的と考えるが。
0877名前は開発中のものです。
2009/03/21(土) 09:46:34ID:i6opoU57doubleはどうあがいても高速化できないが、floatは腕次第でフルチューン可能だった。
そんな時代もあったのさ。
0878名前は開発中のものです。
2009/03/23(月) 00:21:46ID:siDC6L3PDXライブラリをデフォルトの状態で使うと doubeを使っても精度が float並になるよ。
つまり余計にメモリを食うだけってことに。
0879名前は開発中のものです。
2009/03/23(月) 03:58:43ID:tZnRya7Qそれ、なんかプログラミングが間違ってるか、何かを誤解して理解してると思うが。
引数がfloatでも、それまでに計算したdoubleの精度は精度で有効に使い続けられるわけだし。
0880名前は開発中のものです。
2009/03/23(月) 04:14:27ID:nWy4AWIRdouble精度が必要な時が出たらdouble使うと思うが今のところ無いな。
0881名前は開発中のものです。
2009/03/23(月) 22:35:05ID:aaSedW4e0882名前は開発中のものです。
2009/03/24(火) 14:18:07ID:e+xXpqJO作者サイトも昨日までは普通にアクセスできたのに
0883名前は開発中のものです。
2009/03/24(火) 14:20:54ID:lCFkfKNF3Dは DarkGDKを使え
0884名前は開発中のものです。
2009/03/24(火) 17:18:13ID:7G9V2r5l3DがC言語初心者レベルで扱えるライブラリなんて設計上不可能だ。
DXライブラリ3Dが目指そうとしたのは砂上の楼閣だったのさ。
ORGEかIrrlicht使いなよ。
0885882
2009/03/24(火) 20:15:11ID:yDaxsp6Nヘルプが完全ではないから手探りだけど
0886名前は開発中のものです。
2009/03/24(火) 20:42:07ID:zZ6aOE8H0887名前は開発中のものです。
2009/03/25(水) 00:48:05ID:Wl5oquoo現状、DXライブラリ3Dが最強なんだが…
0888名前は開発中のものです。
2009/03/25(水) 03:39:15ID:vSTmLmbT作ってみるわ。もちろんWindowsネイティブな。少しまちなー。
0889名前は開発中のものです。
2009/03/25(水) 04:22:27ID:fq+TvrVPまずその名前はややこしいから変えて欲しい。
DirectX自体がライブラリだし、DXライブラリに名前が似てるし。
そして次、作ってみるって思ってから完成するまで膨大な時間が掛かるって事。
少し位じゃ完成しないからやるならもうちょっと長いスパンで考えた方が良いよ。
0890名前は開発中のものです。
2009/03/25(水) 06:56:03ID:YpvCJGXN音がズレてるような気がする。
int GetNowCount( void ) を使ってるんだけど
違うソフトとか触ったりしたら時間だけ経過されたりして描画されなくなる。
0891名前は開発中のものです。
2009/03/25(水) 07:26:34ID:kayJkkXd擬似ボタンとかならDXライブラリの関数で作れるが
スクロールバーとか高度なものだとちと無理臭いので気になったのだが。
0892名前は開発中のものです。
2009/03/25(水) 08:21:26ID:6OdRd8FO非アクティブ状態でもタイマーは進むから、その辺考慮して設計すべし。
0893名前は開発中のものです。
2009/03/25(水) 09:12:00ID:wLtHAO2Wint SetAlwaysRunFlag( int Flag ) ;
か
int LoadPauseGraph( char *FileName ) ;
の関数を使えば、やりたい事は解決すると思う。
>>891
できない事はない。と思うが・・・・
.NETとDirectXは基本別物(.NETからManaged DirectX は動かせるにしても)
結局深い知識が必要だから、まぁ、普通の人はやらん方が無難。
スクロールバーぐらいなら自前した方が何かといいかと思う。
0894名前は開発中のものです。
2009/03/25(水) 09:38:24ID:YpvCJGXN0895名前は開発中のものです。
2009/03/25(水) 09:51:13ID:6OdRd8FOちょっと調べたが、簡単には無理っぽいな
試したことが無いが、
SetUseGDIFlag(TRUE)すればコモンダイアログ等のGDIの画面上乗せ出来るようだ。
メインウィンドウのHWND取得して、CreateWindowEx等のAPIで自作したウィンドウハンドルを子ウィンドウとして登録。
メッセージプロシージャ等はAddMessageTakeOverWindowすればコールバックで戻ってくる模様。
.NETではないが、コモンコントロールを扱うのなら、こういう方法しかないとおもう。
ちなみに俺はスクロールバー・ボタン等については必要になった時に自作している。
0896名前は開発中のものです。
2009/03/25(水) 12:24:54ID:pfpspq1bC++でなく、C言語に対応していること
そして、コマンド数が多い事
単純であることだろう、よって複雑な事は出来なくても良い。
DarkGDKのコマンドリストをUPする。
コマンド名を見れば動作の予測ができるでしょう
http://www.csync.net/service/file/view.cgi?id=1237950965
0897名前は開発中のものです。
2009/03/25(水) 19:28:42ID:kayJkkXdレスTHX。ListViewとかボタン(WINAPIと同じ挙動のやつ)を
作るとなるとかなり大変だからManaged DirectXの方でやることにするわ。
0898名前は開発中のものです。
2009/03/25(水) 21:17:20ID:uIkqnwHFそもそも初心者が3Dに手を出すこと自体にかなり無理があると思うんだが。
0899名前は開発中のものです。
2009/03/25(水) 22:14:20ID:T2UmaOBxHSPで3Dってのが個人的にはありえなかった
0900名前は開発中のものです。
2009/03/26(木) 00:21:46ID:XQqCSMDQ0901名前は開発中のものです。
2009/03/26(木) 00:33:28ID:GwVmRN1C3Dものなんて夢のまた夢。
0902名前は開発中のものです。
2009/03/26(木) 02:33:02ID:ucYatCYF2Dと違って素材集めやモデリングが難しいんだよね。そして興味ない。
さらに3Dで作るゲームにアイデアがない。
最後に、3Dゲーって2Dゲーと違ってしょぼさが如実にあらわれるんだよね。
0903名前は開発中のものです。
2009/03/26(木) 02:55:38ID:1EzpJ+ry0904名前は開発中のものです。
2009/03/26(木) 03:28:44ID:mGxo+8so衝突した場合、3Dの場合は食い込んで表示されて不自然だし
回転とかしたときのモデルの先端の座標やらがイメージしにくい
0905名前は開発中のものです。
2009/03/26(木) 04:42:32ID:ZAixtAoM0906名前は開発中のものです。
2009/03/26(木) 06:38:45ID:jGahXsLt計算が複雑になったり、グラフィックに掛ける手間が増えるから
初心者は2Dでゲーム製作に慣れてからの方がいいとは思うけど
0907名前は開発中のものです。
2009/03/26(木) 06:44:13ID:Ts2wEbx3二次元のキャラが2マスのサイズあるので、
NPCの前に立つのと、後ろに立つので被さり表示順序を変えなきゃならん。
3Dならこんなのないだろうになぁ
0908名前は開発中のものです。
2009/03/26(木) 07:38:35ID:jGahXsLt3Dでも基本的に同じだよ
奥行きの値で表示順をソートする必要がある
0909名前は開発中のものです。
2009/03/26(木) 08:50:05ID:k7PFsR0n俺は描画オブジェクトにZ値を持たせ、描画順をstd::listで記憶して表示順序変えてるよ。
Z値が同じ値なら、Y値の設置底面(top+heihtした値)で比較し、ソートする。
たぶんこれが一番楽で一番確実。
毎フレームソートするのはバカらしいから、極力必要最低限の回数にするようにしてね。
0910名前は開発中のものです。
2009/03/26(木) 09:47:36ID:Ts2wEbx3thx.
std::listってc++か・・
0911名前は開発中のものです。
2009/03/26(木) 09:59:19ID:k7PFsR0nSTLも万能ではないが、知っておくに越したこと無いね。
ちなみに、こういう並び替えが頻繁に行われるものはvectorやmapでもなく、list使うのが良い
0912名前は開発中のものです。
2009/03/27(金) 07:03:04ID:2mW8DqO1何人いるかわからないNPCにとっては有効?
0913名前は開発中のものです。
2009/03/27(金) 08:48:18ID:a/ry8/LDスプライトを扱う基底クラスを継承してNPCクラス作ればいい。
厳密に言うと何人居るかわからないのはSTLのvectorが基本。(俺ならlist使うけどな)
NPC挙動はデザインパターンでいうところのStateかとStrategy
0914名前は開発中のものです。
2009/03/27(金) 22:11:00ID:cVa1f6L80915名前は開発中のものです。
2009/03/27(金) 23:21:19ID:8cy1rsqr0916名前は開発中のものです。
2009/03/28(土) 00:15:58ID:av4pjJwK今まで作ってきた2Dゲーでは画面表示の優先度が4段階くらいしかなくて
キャラの最大数も固定にして配列を利用して順番に表示していた。
次からはもうちっと一般的な組み方をするようにしようと、
listの使い方をいくつかのサイト巡って見てみたんだけど、どう使うんですか? これ。
要素を追加とか参照する方法はいいとして……。
例えばDXライブラリ使って表示するとしたら、最低限でも
「表示優先度」「グラフィックハンドル」「表示座標(X,Y)」
が必要なわけですが、このうち「表示優先度」をlistに追加していき、最終的にソート?
でも「表示優先度」だけソートされてもしょうがない。「グラフィックハンドル」とかと繋がってないと。
とするとlistの項目に「グラフィックハンドル」その他も組み込める?
それとも、表示優先度の段階ごとにlistを用意して、それぞれに追加していく?
でもこれだと3Dゲーみたいに優先度がどこまで段階わけされるかわからない場合に使えないし……。
0917名前は開発中のものです。
2009/03/28(土) 00:32:49ID:cy5L8nnk0918名前は開発中のものです。
2009/03/28(土) 02:01:13ID:z1vkTGRC0919名前は開発中のものです。
2009/03/28(土) 02:05:01ID:z1vkTGRC0920名前は開発中のものです。
2009/03/28(土) 09:35:01ID:8c8Vy+u+クラスないしは構造体で「表示優先度」「グラフィックハンドル」「表示座標(X,Y)」などの情報をカプセル化して梱包する。
クラスには仮想関数でdraw()を持たせる。
この"クラスのポインタ"をstd::listとしてとあるImageListクラス(Singletonオブジェクト)が一律に保持し、優先度が変更されたタイミングでsortをして常に正しい描画順位になっているようにする。
そして、描画タイミング時(毎フレームに1回)に、drawを優先順位順になめるように実行すれば良い。
これで、簡易な描画システムの完成。システムと呼べるほどの出来ではないけどな。
俺の場合、さらにScreenクラス(独自の座標系とクリッピング領域を持つ)とノード型の親子関係で持たせることで柔軟に対応している。
0921名前は開発中のものです。
2009/03/28(土) 09:41:07ID:ypn63o+Iワロタ
0922名前は開発中のものです。
2009/03/28(土) 12:58:40ID:V/znOr52ここで聞けって言われたもんで。
メニュー画面とゲーム画面を往復する度にメモリ使用量が上がってくんだけど、
読み込んだものはゲーム画面終了直前にInitSoundMemとInitGraphで全て削除するようにしても
上昇量よりはるかに小さい分しか変わらないし、
じゃあ今度は画像の読み込みを全部削除してみたら(画面は真っ暗になるけど)きれいさっぱり解決したから
やっぱ画像関係に原因があるのはわかったんだけど、
本題
DXライブラリって画像関係で、読み込んだの以外に変なのを生成したりしてるんですか?
あとどうやらそのゲーム画面で初めて登場する画像が描写される度にもメモリ使用量がちょっと上がるみたい。
これも画面真っ暗にしたらきれいさっぱりいった。
0923名前は開発中のものです。
2009/03/28(土) 13:40:42ID:miSl0Len代入なら精度は落ちないけど、計算すると精度は落ちるよ。
double同士の四則演算をすると DxLib_Init前と後で、精度が違うから
同じ計算をしても結果が異なることがある。
0924名前は開発中のものです。
2009/03/28(土) 13:50:45ID:8c8Vy+u+何度読んでも俺には何言ってるのか分からん。
精度が違うって何言ってる・・・。
0925名前は開発中のものです。
2009/03/28(土) 14:00:54ID:miSl0Lenわかりにくくてすまん。
例を書いてみた。
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の値を比べてみてくれ。
0926名前は開発中のものです。
2009/03/28(土) 14:04:24ID:miSl0Lenあ、return falseはまずかった。
return 0の間違いってことで。
0927名前は開発中のものです。
2009/03/28(土) 14:08:18ID:8c8Vy+u+DXライブラリでDirect3D使う場合だとFpuPreserveしてるからdouble型の演算レジスタ弄ってるわけね。
俺3D機能使わずにDirectDrawの方で書いてるから気づかなかったわ。
0928名前は開発中のものです。
2009/03/28(土) 14:48:40ID:8c8Vy+u+Direct3DのFPU関連の対処法についてDXライブラリのソース調べてみたら、
// FPUの精度を落とさない設定を使用するかどうかを設定する、DxLib_Init を呼び出す前のみ有効( TRUE:使用する(精度が落ちない) FALSE:使用しない(精度を落とす(デフォルト) )SetUseFPUPreserveFlag( int Flag );
を見つけたよ。
double型を使う場合はTRUEにしても良いかもね。(精度は上がるが速度が落ちるので好みに)
でも、俺はfloat派だから関係ないが〜。
0929名前は開発中のものです。
2009/03/28(土) 15:03:24ID:alJS1U5l0930名前は開発中のものです。
2009/03/28(土) 16:05:39ID:8c8Vy+u+メモリ使用量の上昇具合ってどんな感じ?
コードを晒してくれると原因が分かりやすいんだがな。
画面遷移時に使われなくなったハンドルについて
・イメージハンドルはDeleteGraphで個別に全て解放をしているか?
・フォントの再生成をしていないか?
を見直してみてくれ。
特にフォントは文字サーフェスをキャッシュしているから、DeleteFontToHandleしないとメモリが解放されない。
その上で、フォントの再生成をしてしまうとメモリ使用量がじょじょに増大する結果になるよ。
0931名前は開発中のものです。
2009/03/28(土) 16:48:52ID:ShTXh3pj・メモリの上昇具合
メ=メニュー画面、ゲ=ゲーム画面
メ59M
ゲ108M
メ107M
ゲ112M
メ118M
ゲ124M
メ129M
・イメージハンドルはDeleteGraphで個別に全て解放をしているか?
さっき言ったとおり、Init〜で全部まとめて消去してる。
・フォントの再生成をしていないか?
よこわからないがフォント関係はいじらずデフォルト?の文字で単純に出力してるが、それでもアレ?
ていうかさっき言ったとおり画像を読み込むところだけ切り取ったら全部解決したので画像関係のアレだと思うんだが……
0932名前は開発中のものです。
2009/03/28(土) 17:33:23ID:feWgJMZK0933名前は開発中のものです。
2009/03/28(土) 17:40:00ID:8c8Vy+u+>ていうかさっき言ったとおり画像を読み込むところだけ切り取ったら全部解決したので画像関係のアレだと思うんだが……
ちょっとこの文章の意味がわからんな。
画像を読み込むのを切り取っちゃったら画像が読み取れないんじゃないか?
それとも、状態変移での2度目に読み込みを飛ばすってこと?
でもその前にInitGraphしてるのなら、グラフィックハンドルは解放されて無効になってるはずだよ。(描画できないはず)
えっととりあえず言うと、画面遷移時にInitGraphで全部消しちゃうのはオススメできない。
使い終わったグラフィックハンドルについては面倒でも個別にDeleteGraphしてみるのが良い。(サウンドもDeleteSoundMemを使う)
俺の場合これで画面遷移時でもメモリ上昇は変わらないよ。
未だ問題あるようなら、同じグラフィックハンドルに画像を読み直す命令としてReloadGraphというのがあるので、これで上書き読み込みする手もある。
あと、DXライブラリでのメモリ使用量と数を確認する命令DxGetAllocSizeとDxGetAllocNumを使って、どのタイミングで発生するのかを確認するのも手。
フォントについてはCreateFontHandleしてないなら問題ないよ。
0934名前は開発中のものです。
2009/03/28(土) 18:38:40ID:feWgJMZK>やっぱ画像関係に原因があるのはわかったんだけど、
って事でしょう。
>えっととりあえず言うと、画面遷移時にInitGraphで全部消しちゃうのはオススメできない。
これ、気になるので、よければその理由を教えて欲しい。
0935名前は開発中のものです。
2009/03/28(土) 19:05:08ID:ShTXh3pj>>933 Deleteでそれぞれやってみたけどやっぱダメだった……
あと、WaitTimerとかでところどころ止めながその隙にタスクマネージャで見る方法でもいいよね?
上昇のタイミングはもちろん画像読み込みの時で、問題なのはデリートの時に少ししか下がらないで、
あと各画像がそのゲーム画面で初めて表示されるときも微量ずつ謎の上昇……
ていうか普通はデリートすればあっさり上がるんだな……なんでデリートがちょっとしか効かないんだ。
0936名前は開発中のものです。
2009/03/28(土) 19:43:04ID:8c8Vy+u+リソースの管理はなるべくプログラマが厳密にした方が良いって理由。
InitGraphだとMakeScreenやMakeGraphやCreateGraphFromSoftImageで作った画像も全部丸ごと削除されてしまうから。
DeleteGraphなら無効なハンドル渡したときに戻り値で-1返すし、どのハンドルが解放されたのかを明示的に指示した方が分かりやすい。
自分はグラフィックハンドル周りはクラスでカプセル化してデストラクタで必ずDeleteGraphして解放するようにしてる。
>>935
>あと各画像がそのゲーム画面で初めて表示されるときも微量ずつ謎の上昇……
これは正常な動作だよ。最初の表示1回目はメモリ確保される。
うーん。どっかでDXライブラリ以外の箇所でnew(malloc)したメモリをdelete(free)せずにメモリリークしてないかい?
MSVC環境なら_CrtSetDbgFlag()があるからチェックしてみて。
0937名前は開発中のものです。
2009/03/28(土) 20:01:35ID:ShTXh3pjあとメモリの動的確保ならやってない。画像関係の問題ってわかっててるし。
CrtSetDbgFlagって言うのをググってみたけどデバッグ環境が必要みたいだね。
そりゃ無理な話だ……
あまりしたくないんだけど、ゲーム画面のコードを晒せば原因判明するかな?
0938名前は開発中のものです。
2009/03/28(土) 20:15:33ID:8c8Vy+u+さすがに現状で、要因を探すのは難しいな。
0939名前は開発中のものです。
2009/03/28(土) 21:42:26ID:ShTXh3pj0940名前は開発中のものです。
2009/03/28(土) 21:46:24ID:8c8Vy+u+コード出してくれればもちろん見るよ。
0941名前は開発中のものです。
2009/03/28(土) 22:09:09ID:ShTXh3pjpass : dx
根っからの初心者ゆえ、稚拙かつわかりにくいけどお願いします。
0942名前は開発中のものです。
2009/03/28(土) 22:18:26ID:8c8Vy+u+DLしてみたよ。想像以上のソースだったw
えっと、原因はLoadSoftImageに対して、DeleteGraphを使ってるところ。
DeleteSoftImageを使いましょう。
0943名前は開発中のものです。
2009/03/28(土) 22:39:34ID:ShTXh3pj0944名前は開発中のものです。
2009/03/28(土) 22:50:21ID:JfTJy2mS0945名前は開発中のものです。
2009/03/28(土) 22:58:12ID:X3zs6AFo0946名前は開発中のものです。
2009/03/28(土) 23:17:44ID:ShTXh3pj>>945 晒したのは初めてだぜ。
あと、ソース長くてもミスが見つかりにくくなるぐらいなもんだよな、問題は……
0947名前は開発中のものです。
2009/03/28(土) 23:23:41ID:nBMPzKvQそれが一番困ると思うぜ
0948名前は開発中のものです。
2009/03/28(土) 23:27:14ID:JfTJy2mSれっつextern
0949名前は開発中のものです。
2009/03/28(土) 23:29:47ID:ShTXh3pjだけど大丈夫なのか。じゃあ関数使いまくれるぜ。
0950名前は開発中のものです。
2009/03/28(土) 23:30:56ID:8c8Vy+u+ういうい。どうもです。
コード晒すのは勇気いるけど、コードを隠すプログラマは例外なくダメプログラマに育つからね。
その点、コードを出したのはすばらしいと思うよ。3ヶ月悩んだものがコード出したら10分足らずで解決できたように早期解決できるし両得だ。
あと、デバッグ環境が無いみたいだけどVisual C++ 2008 Express Edition(無償)を使うと良いよ。
http://www.microsoft.com/japan/msdn/vstudio/Express/
デバッグが使えるのは大きいし、コンパイラの性能が良いから、Borland C++5.5よりも大体1.2倍ぐらいはプログラムが速くなるさ。
0951名前は開発中のものです。
2009/03/28(土) 23:46:31ID:ShTXh3pj0952名前は開発中のものです。
2009/03/29(日) 00:08:50ID:wJL07IJTそうそう。それでok
VS2008へのDXライブラリの組み込み方はDXライブラリ公式サイトに書いてあるよ。
http://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2008express.html
0953名前は開発中のものです。
2009/03/29(日) 00:20:45ID:IeRll+oUおそらくそれはしょぼんのアクションだ。
0954名前は開発中のものです。
2009/03/29(日) 00:33:04ID:6OZkFx/Cああ、それだわ
>>136-145 あたりでも話題になってるな
0955名前は開発中のものです。
2009/03/29(日) 00:39:32ID:wJL07IJTすごいなこれ。
リファクタリングの腕がつくから試してみようかと思ったが、
さすがにマジックナンバーが多すぎてちょっと無理っぽいわ。
//自由な値
int xx[91];
double xd[11];
string xs[31];
とか無茶すぎるだろw
0956名前は開発中のものです。
2009/03/29(日) 00:56:39ID:8NyFLpVN全部の関数で「〜で既に宣言されています」
って出る……何のためのヘッダだよ……
0957名前は開発中のものです。
2009/03/29(日) 00:57:59ID:8NyFLpVN0958名前は開発中のものです。
2009/03/29(日) 01:00:10ID:wJL07IJTヘッダの先頭に
#pragma once
と書く
0959名前は開発中のものです。
2009/03/29(日) 01:04:35ID:wJL07IJT正確にはインクルードガードをするのが良いんだけどね。(__HOGE_H__は自分のヘッダファイル名)
#ifndef __HOGE_H__
#define __HOGE_H__
(ヘッダ本文)
#endif // __HOGE_H__
ま、どうせVCしか使わないんだろうからどっちでも良いよ。
0960名前は開発中のものです。
2009/03/29(日) 01:19:07ID:4SqorqSCC++でメンバ関数ポインタって使ってもいいもんなんですかね。
goto思想のようなものでもお行儀のようなものでもいいんだけど、普通はどんなもんか教えてください。
ついさっきメンバ関数ポインタっぽいものがあったらスマートに書けるなーと思って検索したら発見しました。
もし具体例が必要なら提示しますので教えてください。
0961名前は開発中のものです。
2009/03/29(日) 01:22:41ID:8NyFLpVN今まで何を勘違いしたか知らないけどヘッダファイルに直接関数を書いてた。
BCCに帰りたくなったけど少しでも軽くするためにがんばります。
修行の旅に出ますありがとうございましたノシ
0962名前は開発中のものです。
2009/03/29(日) 01:39:41ID:wJL07IJTstaticなメンバ関数について関数ポインタをとるのなら文法的には合ってるが作法的にはよろしくないとは思う。
(クラスは設計者と利用者が異なる観点ではオーバーライドされる可能性があるという意味で。)
けれど仕様上、静的なコールバックを要求する場合(Windowsメッセージプロシージャ等)だと、
staticなメンバ関数を指定した方が読みやすいと俺は思う。
この場合、staticメンバ変数から、Singletonオブジェクトを参照してインスタンスを得る方法を自分は多用しています。
自分で設計するのであれば、C++なら関数ポインタを使わずに、インターフェースクラスから派生する手法だったり、
純仮想関数をオーバーライドする設計(いわゆるStrategyパターン)を使うかな。
ただ、タスクのようなごった煮の振る舞いをしたいのであれば関数ポインタを使うこともしばしばあります。
0963名前は開発中のものです。
2009/03/29(日) 01:41:04ID:wJL07IJT○この場合、staticメンバ関数内で、Singletonオブジェクトを参照してインスタンスを得る方法を自分は多用しています。
0964名前は開発中のものです。
2009/03/29(日) 02:00:32ID:4SqorqSCstaticではないメンバ関数ポインタでした。
個人製作だから、という言い訳の前提のもと、シングルトンデザパタとかも使わずアプリケーションの最初で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()内でメンバ関数ポインタで管理した方がいいかなと思いました。
乱文ごめんなさい。
0965名前は開発中のものです。
2009/03/29(日) 02:22:47ID:wJL07IJT言っていることをそのまま実装すると
staticでないメンバ変数の関数ポインタ(MyClass.B()〜C())を参照するとエラー出るよね。
「仮想関数のポインタが参照されました」というのが。
デザパタを使いたくないのであれば、方法は1つしかない。
メンバ関数のアドレスをthisポインタからのオフセットアドレス値から算出するという手段で、けっこう裏技。
かなりの裏技でC++に熟知してないと普通は使わない方法だね。
実装方法は
http://www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03057.html
このサイトの57章と58章に書いてあるよ。
0966名前は開発中のものです。
2009/03/29(日) 03:00:28ID:4SqorqSCまさにそのサイトも見て実装しました。
そしてまさにその使い方の事を聞きたかったのです。分かりにくい説明でごめんなさい。
ただ参考になりました。ありがとうございました。
デザインパターンも勉強してみて試行錯誤してみたいと思います。
蛇足ですが、C++でゲーム作ると(staticな?)アプリケーションクラスを一つ作って、
int main()の中のメインループの中でアプリケーションクラスを呼び出すことから始まりますよね。
で、オブジェクト指向っぽく設計とか考えてやっても結局アプリケーションクラスの中でCの構造化プログラミングをしてるだけっぽくなっちゃってました。
今回もメンバ関数ポインタを呼ぶのも関数ポインタを使った構造化プログラミングっぽいです。。
他の人のソースを眺めてみると頻繁にインスタンスを生成したり破棄したりしてますが、
自分の書いたものはあまりせず、結局全部グローバル関数でも同じじゃん!みたいななっちゃいます。
一応継承とかも使ってみるも、ちょっとしたコードの再利用程度でしかなく、ポリモーフィズムなんて実現できないです。
まあ経験が足りないんでしょうね。。精進します。
0967名前は開発中のものです。
2009/03/29(日) 03:09:57ID:wJL07IJTサンプルソース書いたよ
http://www.dotup.org/uploda/www.dotup.org13651.cpp.html
0968名前は開発中のものです。
2009/03/29(日) 03:21:31ID:4SqorqSCわざわざありがとうございます。
ソース見させていただきました。
ほぼ同じように実装しました。
実際にはポインタに入る関数はA()が決めるのですが同じですね。
0969名前は開発中のものです。
2009/03/29(日) 03:22:49ID:uaYHl2HP普通につかって全く問題ない。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
「メンバ関数ポインタ」について調べることをおすすめする
0970名前は開発中のものです。
2009/03/29(日) 03:25:13ID:uaYHl2HP裏技でもなんでもないよってことで。
0971名前は開発中のものです。
2009/03/29(日) 03:30:37ID:wJL07IJTおっと、書き込む前にリロードすればよかった。
デザパタは相当C++やJavaが相当手馴れた頃に初めて見てみると、目から鱗な考え方なんだ。
素人が下手に手を出しても意味が分からないまま終わっちゃう。
大規模アプリを作れるレベルになって設計と実装に悩みだした頃に読むと良いよ。
ゲーム製作に特に使うのはSingleton,Strategy,TemplateMethod,Facade辺り。次にAbstractFadtoryやObserver。後のはほとんど使わない。
オブジェクト指向がする必要の無い局面って結構あるから、
何が何でもオブジェクト指向にこだわって実装していくのも逆に生産性が下がるというのは966も体感していると思う。
クラスは拡張性と多様性を残しつつ、YAGNIの原則で最低限だけを実装していく。というのが一番の理想。これが中々難しいけどね。
自分は、時にベタのCで書くこともあって、C++じゃご法度なextern宣言も使ったりする。(理由はめんどくさいという一点で)
インスタンスの生成/破棄はなるべく少ない方がパフォーマンスはモチロン出るので、966の書くプログラムは良いコードだと思うけどね。
0972名前は開発中のものです。
2009/03/29(日) 03:33:52ID:uaYHl2HP同じようなオブジェクトの微妙な動作違い、なら、設計的には
インターフェースを継承してオーバライドしたほうがいい。
この手法は同一オブジェクト内でのステート処理にむいてる。
何度も呼ばれて判定のオーバーヘッドの影響が無視できないような場合には特に有効。
0973名前は開発中のものです。
2009/03/29(日) 03:40:51ID:wJL07IJTもちろん知ってるさ。C/C++は20年選手に逝きそうなんだ……。
裏技扱いしたのは、理由があって、
多重継承をした仮想関数(純ではない)のアドレスを取得しようとして、thisポインタのサイズ(4byte)が変わる為に上手くアドレスが取れないことが以前にあった。(オフセット値がなぜかずれるためにアラインメント調整が必要になる)
という理由でコンパイラによっては非推奨な書き方だったりするんだ。
これはコンパイラのバグで、TurboC++ではダメだった記憶がある。
MSVCではたぶん大丈夫だが、一応使わないでおこうとしてた。
0974名前は開発中のものです。
2009/03/29(日) 03:45:29ID:wJL07IJTどちらにしても15年前ほど前の事だったからたぶん今では問題ないと思う。
0975名前は開発中のものです。
2009/03/29(日) 03:45:43ID:4SqorqSCふむふむ、全く問題ないのですね!
提示してくれたソースもよくわかるのですが、た…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;
}
0976名前は開発中のものです。
2009/03/29(日) 03:53:35ID:uaYHl2HPあー、コンパイラのバグ……。そういうのは一度ふむと使わなくなりがちですな(苦笑)
状態遷移系の処理の他だと、半自動のバインド処理の類を書くときとかに、
テンプレートと組み合わせてばりばり使ってたりします。
0977名前は開発中のものです。
2009/03/29(日) 03:57:18ID:uaYHl2HPtypedefは、宣言した複雑な型をシンプルに表記できて、
書き方覚えるととてもすっきりするので、時間あったら勉強してみてください
表記はそれで特に問題はないですが、その条件判定なら
switch つかったほうがいいと思いますです。
0978名前は開発中のものです。
2009/03/29(日) 04:13:27ID:4SqorqSC起きててよかった。
勉強してきます=3
0979名前は開発中のものです。
2009/03/29(日) 07:10:28ID:wuoKvdm5初心者相手に技術自慢したいならc++関係のスレに行けばいいのに。
そこでは相手にもされない程度なのか?
DXライブラリ
0980名前は開発中のものです。
2009/03/29(日) 07:26:38ID:vMEVjIQX俺はCについてはド素人同然なので、いろいろ教えてもらえるのは助かる。
確かにスレ違いではあるんだが、DXライブラリを使ってること前提で
話をしたい場合もあるし。
0981名前は開発中のものです。
2009/03/29(日) 10:08:36ID:BGS9yVjy趣味でゲーム作ってるのが長い人には、Cの書き方でパパーッと書き上げる事もできるし、
(Windows95の頃から始めたような人なら短いものならOOじゃない方がある程度の大きさでも楽だったりするしね。)
3Dに手出す(主にデータ的な部分)のが面倒な人には、
余計なモンついてなくて2Dに特化してるのに、 変な癖が少ないから使いやすい。
あと、最初からゲームパッドとかに対応は何気に使えるし。
車輪の再開発をやってきた様な人には、
ソースもあるからちょっとだけ手を加えたい時とかも 其れが可能で、
わざわざRequestしないで良いのは、時間的にもモチベーション的にも良い選択肢。
初心者にも優しいライブラリだけど、其れだからといって
昔のHSPみたいに、他の言語知ったら使いたくなくなるような不自由さがあるわけでもない。
まぁ、DirectXバリバリつかうぜ!!って人とかには別だろうけど。
0982名前は開発中のものです。
2009/03/29(日) 12:18:31ID:eagJL9bRそれバグでもなんでもねえし、
ポインタのサイズは変わらないだろ
0983名前は開発中のものです。
2009/03/29(日) 13:11:06ID:Zf+/7kJf>>982
正確に書くと、継承した場合のメンバ関数ポインタのサイズが4バイトとは限らない(コンパイラ依存)
多重継承や仮想継承をしている場合、正しいポインタサイズを返すために8バイトや12バイトとなることがある。
しかし、昔のバグコンパイラではこの点が考慮されておらず必ず4バイト固定だった時代があり、派生や仮想関数を呼び出そうとするとアラインメントを調節する必要があった。
ということ。ポインタは必ず4バイトというのは早計だよ。
0984名前は開発中のものです。
2009/03/29(日) 18:18:24ID:eagJL9bR何故得意気なのか理解できんが、
それはサイズが変わるとは言わないだろ?
結局のところ、静的なサイズは確定している。
0985名前は開発中のものです。
2009/03/29(日) 21:00:34ID:aWInPsJ8RTTIしていると大問題。
なんか、微妙にスレ違いだし、
偉そうにしているといわれたようなので黙って老害は去りますね。
失礼しやした。
0986名前は開発中のものです。
2009/03/29(日) 22:56:36ID:8b86AGfHで、次スレはどうするんよ
0987名前は開発中のものです。
2009/03/30(月) 00:07:56ID:Ui9Ndm7F0988名前は開発中のものです。
2009/03/30(月) 01:19:18ID:Y8nEXzvT0989名前は開発中のものです。
2009/03/30(月) 01:54:36ID:1JQfO1aW> RTTIしていると大問題。
会話になってねぇww
0990名前は開発中のものです。
2009/03/30(月) 18:27:06ID:II/eiBAq{
{ //1フレーム間での処理
A ;
B ;
C ;
}
ScreenFlip();
}
すごく大まかに言って↑このようにゲーム作ってるのですが
CheckHitKeyの判定ってって「フレームの最初のみ」に行われるんでしょうか?
それとも「ifの処理があるごと」なんでしょうか?
もし後者ならif CheckHitKey(SPACE)==1 みたいな処理をA部とB部両方に入れた場合、
Aが行われてる瞬間にSPACE離しちゃったら
Aは行われてBは行われないっていうことも起きちゃうんでしょうか?
0991名前は開発中のものです。
2009/03/30(月) 18:39:19ID:x1tfO2A20992名前は開発中のものです。
2009/03/30(月) 18:42:02ID:b98OMwXUを使えば起きない
0994名前は開発中のものです。
2009/03/30(月) 18:46:45ID:x1tfO2A2適当な変数にそのフレームで一回押されたか押されてないかを記憶しておけばいいんでは?
main{
int space = 0;
while(うんたら){ //1フレーム間での処理
if (CheckHitKey(SPACE)==1)space=1;
A ;
B ;
C ;
space=0;
ScreenFlip();
}
}
0995名前は開発中のものです。
2009/03/30(月) 19:18:36ID:9Ep+SxhG「ifの処理があるごと」じゃなくて「ChecHitKey」が実行されるごとだけど、
ご想像の通り、1フレームに何回もチェックしてたら
Aでは行われてBでは行われないって事がおきるはずだね。
994さんが言われてるようにフレームの一箇所でだけチェックして記録しておくってのも手だけど、
やっぱり992さんの言われてるGetHitKeyStateAllが俺としてはお勧めかな。
これはこの命令だけで全てのキーの入力情報を記録するから、
フレームの最初に一回やっておけば、あとはそれを参照するだけでいい。
0996名前は開発中のものです。
2009/03/30(月) 20:06:33ID:II/eiBAq>>994
説明サンクス
上手くいきました!
>>995
なるほど、やはりでしたか。
それが原因のバグがでてましたがなんとか除けました。
0997名前は開発中のものです。
2009/03/30(月) 21:58:12ID:9rT9QBj30998名前は開発中のものです。
2009/03/30(月) 21:59:19ID:9rT9QBj30999名前は開発中のものです。
2009/03/30(月) 22:00:03ID:9rT9QBj31000名前は開発中のものです。
2009/03/30(月) 22:00:48ID:9rT9QBj310011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。