- 1 名前:名前は開発中のものです。 [2009/03/31(火) 01:14:36 ID:IgyJcgap]
- Cを習得した程度のスキルでも、
GUIのゲームを比較的容易に作成する事を可能にする、 「DXライブラリ」に関するスレッドです。 DXライブラリの詳細ついては homepage2.nifty.com/natupaji/DxLib/ を参照して頂きたい。 DXライブラリに関するテクニックなどの情報交換などを行う事で、 多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。 過去スレ:DXライブラリ 総合スレッド pc11.2ch.net/test/read.cgi/gamedev/1197468399/ DXライブラリ 総合スレッド 2008 pc11.2ch.net/test/read.cgi/gamedev/1224923873/
- 670 名前:名前は開発中のものです。 mailto:sage [2009/07/10(金) 12:51:04 ID:xhZ5jDJO]
- 座標ってxyで行うから構造体でセットにして扱うのってなんか不都合ある?
- 671 名前:名前は開発中のものです。 mailto:sage [2009/07/10(金) 13:23:29 ID:Pbfo1cNY]
- 無いよ。
bullet[i].locate.x = 320; とか多重に扱うと見た目が重く感じるぐらい。
- 672 名前:名前は開発中のものです。 mailto:sage [2009/07/10(金) 13:23:43 ID:GMEf2Yqs]
- 全然ないから、POINT を使うと良いよ。
- 673 名前:名前は開発中のものです。 mailto:sage [2009/07/10(金) 15:09:18 ID:xhZ5jDJO]
- >>671-672
thx 多重に気をつけて、メンバ変数は極力そのクラス内で処理するようにしますわ
- 674 名前:名前は開発中のものです。 mailto:sage [2009/07/10(金) 23:17:50 ID:kvfVpi7w]
- EnemyManager.Small.Flying.Bullet[i].Location.x = GameCanvas.TopLayer.ViewObject.Set(320);
とかなら、ちょっとは考えろよwwとか思うけど。 普通に組んでる限りじゃ、そんな気にする必要はないかと。 どうしても気になるなら、POINTなりをpublicで継承すりゃ、 bullet[i].x=320にできるし、どうせゲームだからこれで問題無いでしょ。
- 675 名前:名前は開発中のものです。 mailto:sage [2009/07/11(土) 01:55:20 ID:UeAE0WWV]
- アクセス権が気になるなら参照を返すアクセサ作ればいいしな
bullet[i].x()=320; これくらいなら見た目もタイプ量も許容範囲だろ
- 676 名前:名前は開発中のものです。 mailto:sage [2009/07/11(土) 01:56:20 ID:UeAE0WWV]
- あ、もちろんインライン展開される書き方前提でな
- 677 名前:名前は開発中のものです。 mailto:sage [2009/07/11(土) 07:49:08 ID:wBBMdddU]
- そういったセットになり易いものって他にどんなのがあるかな?
- 678 名前:名前は開発中のものです。 mailto:sage [2009/07/11(土) 18:21:58 ID:SvZlB+M+]
- セットって?
- 679 名前:名前は開発中のものです。 mailto:sage [2009/07/14(火) 04:20:59 ID:wRlAP6qv]
- たまにタスクが応答なしになるという原因不明のバグに悩まされ
再起動してみると普通に実行されるのは何だろう
- 680 名前:名前は開発中のものです。 mailto:sage [2009/07/14(火) 04:40:19 ID:mFQZCpWd]
- >>679
何を言いたいのか分らんが・・・ (エスパー希望の相談なのか、只の雑談なのか、愚痴なのか?) とりあえず、タスク がタスクマネージャーとかのタスク(application)の事なら、 単純にどっかが無限ループに嵌ったか、画面書き換えの部分を通らなくなったか(orキー入力の部分を・・・) だろう。 とりあえず、printfを色んな所に仕込んでおいて、デバックを掛けるとかするのが基本。 怪しい所がどうみてもライブラリ側だったら、公式に書き込めばいいし、 そうでないなら、再現性を高めて、その変な挙動をここででも、公式ででも聞いてみればいい。 大概は、配列でindexが超えて・・・・とか、switchでbreak;が抜けてて・・・とか if文の後に変なモノがあって、ifでの抜けだしが効かなくなってたりとか、 {}の対応が微妙にずれてて・・・とか、初期化してないのを使っていて、タイミング次第で・・・とか (後は、WindowsUpdateしてなさ過ぎて、リターンが遅れてるのを応答なしに解釈されてるとかもあるか、)
- 681 名前:名前は開発中のものです。 mailto:sage [2009/07/14(火) 04:49:20 ID:wRlAP6qv]
- >とりあえず、タスク がタスクマネージャーとかのタスク(application)の事なら、
その通り >単純にどっかが無限ループに嵌ったか、画面書き換えの部分を通らなくなったか(orキー入力の部分を・・・) >だろう。 そういった部分は見当たらなかった 何せOSを再起動させてそのプログラムを再び実行させたら何の問題もなく動いたのですからプログラムに原因があるとは思えないのですが
- 682 名前:名前は開発中のものです。 mailto:sage [2009/07/14(火) 05:07:49 ID:pOq3rm7P]
- そういう現象が出てるのが君だけなんだから君のプログラムに問題があるか、
あるいは君だけが体験できるくらいレアな現象って事になるだろう? 調べる事ができるのは君だけなんだから 素直に>>680の忠告に従って、きちんと調べていけばいい。 「これで合ってるはず」なんて余計な「思い込み」はデバッグ作業の邪魔にしかならないぞ。
- 683 名前:名前は開発中のものです。 mailto:sage [2009/07/14(火) 05:36:27 ID:mFQZCpWd]
- >>681
それだけの事で、プログラムに問題があるとは思えないって・・・・ とりあえず、 初期化なしでつかってる場合にはOS再起動とかで簡単に変わるし、 時間取得なんかをちゃんと処理してないと、 日にち跨ぎや時間跨ぎで、発生したりしなかったりする。 >>682も言うとおり、思い込みよりも手を動かしてデバックしなぁ。 プログラムは書いた通りに動いても、思った通りには動くとは限らないんだからさぁ。
- 684 名前:名前は開発中のものです。 mailto:sage [2009/07/14(火) 06:46:29 ID:wRlAP6qv]
- だってデバッグしたけど分んないんだもん
まあ動くようになった訳だからそのまま何事もなかったかのように過ぎていくのだろう
- 685 名前:名前は開発中のものです。 mailto:sage [2009/07/14(火) 07:14:55 ID:MgrfsfEm]
- forやwhileで使ってる変数の初期化忘れあたりが怪しいけどどうなんだろうな
- 686 名前:名前は開発中のものです。 mailto:sage [2009/07/14(火) 07:53:46 ID:wRlAP6qv]
- それはないと思うがなあ
その可能性のあるコードって、(実行時に処理を通ってるコードの中で) while( (!ProcessMessage()) && (!keybuf[KEY_INPUT_ESCAPE]) ) しかなかったんだが(変な書き方でスマソ) 確かに keybuf はグローバル変数にしてしまってるし char keybuf[256] = {0}; で初期化したつもりになってるけどどうなんか分らん まあ動くようになったし確認しようにももうできないからな、動くから まあ良しとして続けるしかないな
- 687 名前:名前は開発中のものです。 mailto:sage [2009/07/14(火) 08:07:50 ID:1FTDe9TM]
- こうしてバグが量産され、ついにはうんともすんとも動かなくなりねあげる姿が
- 688 名前:名前は開発中のものです。 mailto:sage [2009/07/14(火) 09:43:25 ID:MgrfsfEm]
- 裏画面の内容をテクスチャにコピーする関数ってあったっけ?
- 689 名前:名前は開発中のものです。 mailto:sage [2009/07/14(火) 20:58:42 ID:2Fk/wASW]
- 「無いと思う」とかじゃなくて確かめないと。
プログラムに思い込みは絶対あかん。
- 690 名前:名前は開発中のものです。 mailto:sage [2009/07/14(火) 23:37:46 ID:wRlAP6qv]
- だって動くようになったから確かめようがないじゃん
この先動かなくなる可能性ないわけではないが そうなったところでこれ以上バグは見つからんだろうな、俺の力では
- 691 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 00:00:28 ID:MHxGaYOY]
- だからprintfとかで一つ一つ処理の中身を吐き出して見るんじゃん。
外見上動いてても、バグがあれば意図してないデータが含まれてる。
- 692 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 01:08:24 ID:ouOmT7td]
- うーん、やっぱりバグがあるとはどうしても思えないし
多分printfとかで一つ一つ処理の中身を吐き出して見てもどの道今の俺の能力では バグを発見できるとは思えないから忠告はありがたいがこのままいくことにするわ 以前も同じようなこと何回かあったしそんときもちゃんと完成まで漕ぎ付けているし
- 693 名前:名前は開発中のものです。 [2009/07/15(水) 01:17:22 ID:Pli3pE87]
- ID:wRlAP6qv
ID:ouOmT7td お前さ、そんなスタンスなら、なんでわざわざここに書き込んだわけ?はじめから書き込むなよ。 なに、構って欲しかった?わざわざお前の書き込みに一生懸命考えてレスしてくれた 人達に失礼だと思わないの?
- 694 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 01:49:11 ID:9zT2ADv7]
- 実際問題、再現性のないバグを修正するのは難しいよ。
プログラムを書いた本人に見当がつかないなら、他人の経験に頼るのも良いと思うよ。 自分がそんなバグにぶち当たったとしても根気だけで調べようとは思わないな。 時間が余ってるなら別だけど。 で、他人の立場から言うと、あれだけの情報で問題のありそうな点を指摘するのは無理だ。 アドバイスとしてはバグ発見を諦めるのではなく自分用バグリストを作ってそこに追加しろ。
- 695 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 02:09:56 ID:ouOmT7td]
- 何かヒント得られると思って…
でアドバイス通りに考えてみたけど駄目だった
- 696 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 02:15:50 ID:oAaV9htY]
- >>695
そうか、お疲れ。 コード晒す勇気があれば、案外デバックしてくれる人が居るとおもうけど… (自分一人だと考えがなかなか間違いに気付きにくいからコードレビューは有効だと思う) 「アドバイス通りに考えてみた」ってのは、 もちろん、printfとかでデバック情報をポコポコ吐き出させたけど、バグらしき場所が見あたらなかった って意味だよね。念のため。
- 697 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 02:28:23 ID:HAQqwNAf]
- ソースうpしろ
無理なら帰れ
- 698 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 06:33:25 ID:jzF+qqts]
- 最小のコードを切り出してる最中に問題が解決することって結構あるよね?
俺だけ?
- 699 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 07:55:06 ID:OJRObvUW]
- あるある
意外とバグって見当つけてたとこ以外にあったりするもんなんだよなぁ
- 700 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 08:38:43 ID:MHxGaYOY]
- >>696
>>692でデバッグしてないと言ってるじゃん。
- 701 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 10:08:04 ID:kzUIqF8J]
- バグを直接見つけようとしないで、確実にそのバグを再現できるようにするのが第一歩
- 702 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 10:45:30 ID:jzF+qqts]
- >>701
分かる分かるw そしてバグを再現させるのは非プログラマに丸投げする俺
- 703 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 11:25:55 ID:aCtz8rQi]
- で少しずつ条件を変えてあたりをつけていく。
- 704 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 20:48:39 ID:vgHuQMIa]
- おまえら仕様書切らないから
テストも作れないし そもそもバグなのか想定なのかも混乱するんだろ?
- 705 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 21:06:50 ID:SOTm+sdF]
- 分け入っても分け入ってもバグの山
- 706 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 21:09:53 ID:MHxGaYOY]
- 仕様書、製造終了してから書いた記憶しかないなぁ…
- 707 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 23:03:43 ID:MZkEPg1i]
- >>704
最終的にうまく動作するものが仕様です。 どだい、仕様書でバグが防げると思ってる法が異常。 仕様書の想定だろうが、結果駄目ならバグだろ!
- 708 名前:名前は開発中のものです。 mailto:sage [2009/07/15(水) 23:17:51 ID:OJRObvUW]
- 個人製作だし仕様書なんて全部脳内の香港式です
仕様の段階でバグ出すレベルの人はちょっとヤバイ。
- 709 名前:名前は開発中のものです。 mailto:sage [2009/07/16(木) 00:10:27 ID:ZK0MxNzH]
- 脳内でまとめようとして、てこずるものを
紙に書いてみたらあっさり解決ってのはよくあることだけどな。
- 710 名前:名前は開発中のものです。 mailto:sage [2009/07/16(木) 03:15:22 ID:1/ar+JW7]
- そういえば話はずれるけど、「仕様を全てきっちり書いて、それを紙に印刷しておく
のが重要なんです!」と力説する新人が入った時を思い出した
- 711 名前:名前は開発中のものです。 [2009/07/16(木) 10:03:06 ID:qgWixxR7]
- 人それぞれで、
仕様書がなければダメになる人とそうでない人がいる。 始めた時は正しい方向に向かっていたが、 出来上がった時には違った方向を向いている、 世の中にはそんな人も多くいる。 チームで進めるとき、意思の統一が重要で 依頼しても、出来上がりが違うものになるのは困り者。 人それぞれなので、きちんとできるひともいるので、そのような人は不要と言われる
- 712 名前:名前は開発中のものです。 mailto:sage [2009/07/16(木) 10:53:13 ID:glHWB671]
- もし、違うものが出来上がってきたら、
「言った、言わない」の問題になってしまうから あらかじめ、ちゃんと紙にして保存しておくって事だろう。 できるできないの問題じゃないよ。 自分のため、相手のための保険みたいなもんだ。
- 713 名前:名前は開発中のものです。 [2009/07/16(木) 11:11:34 ID:qgWixxR7]
- 掛け捨て保険ではない。
チームで行う時の基盤になる、開発ドキュメントとして 取り扱い説明書として、保守業務の基準として必須のものである。
- 714 名前:名前は開発中のものです。 mailto:sage [2009/07/16(木) 11:30:46 ID:Frg8+T60]
- チームでやるなら仕様書必須
作り方が違うだろ ttp://marupeke296.com/DXCLS_BottumUpStructingOfClass.html
- 715 名前:名前は開発中のものです。 mailto:sage [2009/07/16(木) 13:48:32 ID:JxCE3uCo]
- コメント見ただけで仕様が把握できるようなソースが書けるようになりたい
いつかは。
- 716 名前:名前は開発中のものです。 mailto:sage [2009/07/16(木) 16:20:01 ID:MA5d2Bm1]
- コメント書かなくても把握できるソースが理想かな。
- 717 名前:名前は開発中のものです。 mailto:sage [2009/07/16(木) 16:29:44 ID:K0RdyJ0x]
- どうも英語のコメントは読むのも書くのも苦手で……
- 718 名前:名前は開発中のものです。 mailto:sage [2009/07/16(木) 17:36:09 ID:sfuED1R6]
- 悪ノリではっちゃけたコメント書いてるのは俺だけではないはず
- 719 名前:名前は開発中のものです。 mailto:sage [2009/07/16(木) 21:20:58 ID:0qzmxnba]
- >>715
ダウト 仕様はソースと答え合わせする為のもの ソースみて内容がわかるのと、本来どうあるべきなのかは別問題
- 720 名前:名前は開発中のものです。 mailto:sage [2009/07/16(木) 22:04:34 ID:sfuED1R6]
- そうか個人製作の場合ととチーム製作の場合と仕様書と仕様と仕様バグとバグを
はっきり切り分けないで話してるからこんなにカオスなのか
- 721 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 09:45:51 ID:iPNwCeP8]
- みんな自分の話してるだけだからな
- 722 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 09:47:37 ID:ZC/cxW1d]
- メンバ関数でモジュール化するだけだよ、基本的には
それにコメントは確かに大事だが 関数名をgetScreenFrameParSecondみたいにきちんと書けば、仕様が明らかにわかる クラス・変数名も同じ 例えばiteratorをitとか省略して書くのはダメ タイプ速度は速くなるが、後のコーディングで詰まるから、作業は全く速くなってない。むしろ遅くなる 省略しなければiteratorという言葉を知らない他人が見ても、ググれば意味がわかる あとは、日本語で名前つける人がいるけど ネットに和英辞書あるんだから使ってほしい 英語の勉強になるし国際化にも対応できる
- 723 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 10:08:40 ID:fic4arti]
- そこまで欧米コンプレックス持ってないし…。
国外にソース晒すほど立派なもん作れるなんてうぬぼれてない。
- 724 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 10:48:52 ID:XzHK2st6]
- 自分で分かりやすいのが一番
- 725 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 11:36:53 ID:71PbqEZA]
- 趣味の範囲内だし態々・・・
- 726 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 14:37:53 ID:AtGtaSaV]
- 熊々翻訳しなきゃわからないレベルの英単語は使わないかな
- 727 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 14:42:09 ID:vX9OmGXP]
- FileHandle ofh ( FileName, ">" );
とかは問題ないと思うけどな。宣言のクラス名で大体分かるし。 宣言が遠すぎて分からんような関数ならその時点で問題だし。
- 728 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 15:20:17 ID:vX9OmGXP]
- というか、「ローカルスコープの」識別名は短いのが主流な気がするんだけど。
定番の良書とかでも普通みんなそうだし、Linuxカーネルみたいな大物ソースでも そうだし。 結局、識別名だけで理解できる情報は限られるのも現実。そうでなければ、それこそ アプリケーションハンガリアンなんかを全識別名に徹底すれば最高なのかもしれない けど、実際は関数エントリにはしっかりした出入り仕様のコメントが欲しい訳で。 まぁ、スレ違いなんだけどね。 正直、D3DXのせいで、「扱いやすくする」という使命のラッパーライブラリの系統 は居場所を失ってるから、このスレの居場所も同様によく分からないんだよなぁ。
- 729 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 15:37:38 ID:/TZL4Vnl]
- ∩___∩
| ノ ヽ / ● ● | クマ知ってるか。 | ( _●_) ミ 出雲地方では、木と岩と水の在る場所を「熊々しい谷」と呼ぶ。 彡、 |∪| 、`\ 「熊々しい」とは、神々しいの意味だ。 / __ ヽノ /´> ) (___) / (_/ | / | /\ \ | / ) ) ∪ ( \ \_)
- 730 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 22:02:14 ID:Z3s3jxcY]
- >>722レベルの長文関数名を記述すると
引数がある場合とかに 複数行にわたってしまって なんだか見づらくならない? 今まで見たソースだとgetScrFPS程度には略してるけど おまえらどうなの?
- 731 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 22:12:33 ID:3aIuRMAB]
- 略すと判んなくなる時以外は略してる。
- 732 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 22:12:54 ID:a1yK0hIN]
- 目的や用途によって使い分けてる。
- 733 名前:名前は開発中のものです。 [2009/07/17(金) 22:29:41 ID:PpX+kDe1]
- クラスの中に座標XとYをまとめてクラスか構造体にしておいて、他の関数などに渡すときに
ひとつのGetPos()って関数で渡すにはどうしたらいいかな? 考えてみたんだけど、どうしても一つでいろいろなところで使える方法がみつからないんだよ。 まだプログラム経験が短いもんで。
- 734 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 22:47:07 ID:a1yK0hIN]
- 構造体を返せばいいと思うけど、そういうことではない?
- 735 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 23:03:35 ID:TRJ/ynqn]
- まあ状況によるけど。
基本Getは単一変数を返す方がいい。 内部の構造体のデータを返すのは間違っている。 その場合はとるのではなく、チェックしてもらう。 bool chk_XXXX (pos *dat); が正しい。 で、この関数はインラインであれば、スピード的には何の問題も無い。 考え方が逆。
- 736 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 23:06:22 ID:TRJ/ynqn]
- 補足、クラス内のデータの処理はそのクラスの関数で行う!
これ基本中の基本
- 737 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 23:31:36 ID:cB4HhxMP]
- 皆が何言ってるかさっぱりわかんないぜ!
でもゲームは作れてるぜ!
- 738 名前:名前は開発中のものです。 mailto:sage [2009/07/17(金) 23:36:29 ID:iPNwCeP8]
- FPSはそれ自体で意味がわかるから使うけどScrは無いわ
- 739 名前:名前は開発中のものです。 mailto:sage [2009/07/18(土) 00:03:32 ID:pCmtYAM2]
- class A があって xが public なメンバの場合 A.xでアクセスするのと
private の場合 getx(){return x;} でアクセスするのと速度変わらんのか
- 740 名前:名前は開発中のものです。 mailto:sage [2009/07/18(土) 08:04:35 ID:QevxnE5g]
- >>739
詳しい事はしらんが、常識的な範囲でコンパイルを考えれば、 最適化が普通だったら遅くなる理由は無いと思う。 最適化をしないなら、クラスから関数のアドレスに飛んで、 そこで値:xを取得して、それをどっかに格納な分 遅くなるんだろうけど・・・。
- 741 名前:名前は開発中のものです。 mailto:sage [2009/07/18(土) 08:54:43 ID:UXbVEGUE]
- >>740
ちょっと違う getx(){return x;} がクラスの中に書かれ、そのクラスがヘッダーファイルなら。 インライン展開されるので aa = getx(){return x;} || aa = A.x と同じ 最適化は関係ない
- 742 名前:名前は開発中のものです。 mailto:sage [2009/07/18(土) 08:56:36 ID:UXbVEGUE]
- あ、ちょっとまて、C++のみの話な、他の言語は知らん
- 743 名前:名前は開発中のものです。 mailto:sage [2009/07/18(土) 10:41:55 ID:PwgwIsF1]
- それはヘッダに直接定義書いてるからinline付いてるだけじゃね
ソース側で定義でもinlineつけて展開できるなら同じじゃないっけか 後、クラス内での処理はインラインしてくれるのが普通だったきがする メンバ関数内で別のメンバ関数呼び出して処理とか まー、>>736か
- 744 名前:名前は開発中のものです。 mailto:sage [2009/07/18(土) 14:09:33 ID:xlxZEQtn]
- インスタンスが確保されてる状態なら、参照を返せばいい。
class Foo { Pos pos_; public: Pos& GetPos() { return pos_; } const Pos& GetPos() const { return pos_; } }; スコープの外側にインスタンスを返すなら、参照渡しじゃ無理なので、コンパイラの NRVOに期待して、例えば以下のように書くことになる。 inline Pos GetPos() { Pos result; /* code */ return result; } NRVO非対応でRVOだけ対応のコンパイラだと、 inline Pos GetPos() { /* code */ return Pos( /* code */ ); } こういうコードじゃないと>>741の言うような最適化は掛からない。 コンパイラーメーカーもC++標準化委員会もNRVOが掛かるように頑張ってるはずだが、 実装状況はコンパイラによってまちまちなんで調べてくれ。多分検索すればすぐ分かる。 VC++なら2005からNRVO行けるっぽい。/O1くらいでもNRVOは掛かる模様。 プロファイラで後から最適化ってのも常道だけど、I/F設計段階の話はそうもいかないし なぁ。 まぁ、俺なら基本的には参照渡し、リターンで解体される自動変数なら値渡しで返して、 後者がボトルネックになるならインライン化でたぶんNRVO発動でおk、って書く。で、 「この設計だと遅そうだしポインタ渡そう」って言われたら、実際どうなるか興味ある んでベンチでも書いたり、ついでに↓みたいなのも一緒に見たりしながら相談する。 msdn.microsoft.com/en-us/library/ms364057(VS.80).aspx
- 745 名前:名前は開発中のものです。 mailto:sage [2009/07/18(土) 14:20:17 ID:xlxZEQtn]
- >>744補足
スコープの外に「自動」インスタンスを返すなら、だな。 つーか、二つめと三つめは最初の質問のシチュエーションから逸脱してるな。すまん。 まぁでも、メンバ関数でもNRVOは重要なんで、仕組みは知っておいた方が。
- 746 名前:名前は開発中のものです。 [2009/07/19(日) 05:29:35 ID:TXlg+NUw]
- //●ジャンぷ
if(key & PAD_INPUT_B){ for(double t=0; t<10; t=t+0.1){ int vo = -60; int ay=10; jikidata.y = vo * t + 1/2 * ay * t*t + jikidata.y; WaitTimer( 1000 ); jikidata.ghandle = LoadGraph("media\\imgbb4792ea7ec6f3d_frame_0009.bmp"); } } DXライブラリを使ってアクションゲームのジャンプをプログラムしたいんですが これで実行すると、キャラが止まったり、動かなくなってしまうんですが、どこを改変すればいいんでしょうか?
- 747 名前:名前は開発中のものです。 mailto:sage [2009/07/19(日) 05:51:18 ID:EpiDWLJN]
- >>746
正直どこにつっこめばいいかわからないので 公式のサンプルを参考にすればいいとだけ言っておく homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N2
- 748 名前:名前は開発中のものです。 mailto:sage [2009/07/19(日) 11:01:02 ID:7iXtFi1U]
- WaitTimerは使っちゃだめれす><
- 749 名前:名前は開発中のものです。 [2009/07/19(日) 21:11:12 ID:mJh1WCZZ]
- フラッシュマン
- 750 名前:名前は開発中のものです。 mailto:sage [2009/07/20(月) 01:05:51 ID:pleKhZHB]
- >>748
リアルタイム処理で使うのは駄目に決まってるな フェードアウト後の待ち時間とかに使うのが正しい でも個人的にはウェイト系の関数やら処理体系作って、それを使えばいいと思う while(……){ //ここにwaitから切り放したい処理を書く //例えば、ゲームは止まっても風景は動かしたい //処理ごとにwaitを分ければさらに色々なことができる if(waitFlag==FALSE){ //ここにwait前にやりたい処理を書く //waitTime、waitFlagは本来条件式で設定するのが望ましい waitTime=1500;//1500ミリ秒=1.5秒 waitFlag=TRUE; }else{ if(1ミリ秒経過したら){ waitTime--; } if(waitTime==0){//1.5秒経った waitFlag==FALSE; }else{ //waitTime=0未満;を描いたな?と怒る //エラーフラグを大量に埋めるのは開発の最適化とアンチートに役立つ } } } こんな
- 751 名前:名前は開発中のものです。 mailto:sage [2009/07/20(月) 01:09:47 ID:pleKhZHB]
- 最後のとこはelse if(waitTime<0)だた
- 752 名前:名前は開発中のものです。 mailto:sage [2009/07/20(月) 18:56:48 ID:u2THICPq]
- ジャンプするたびに画像をロードしまくってどうする
- 753 名前:名前は開発中のものです。 mailto:sage [2009/07/20(月) 23:05:51 ID:hrqPLvNB]
- >>750
これならどの環境でもキッチリ結果が出るね カウンタ回すしかやったことないから参考になるわ だけどアクションとかだと遅延おきてカクカクにならないかな
- 754 名前:名前は開発中のものです。 mailto:sage [2009/07/22(水) 14:20:11 ID:23EfZ5Te]
- 同じフォルダ内にあるTTFフォントを使って文字列描画したいんですけどそれはDXライブラリでできますか?
フォントのファイル名を指定して読み込みするような関数が見つからなくてどうすればいいか困ってるんですが
- 755 名前:名前は開発中のものです。 mailto:sage [2009/07/23(木) 01:22:02 ID:w7s2/iav]
- なんかソレっぽいサンプルどっかで見かけたような気が……
- 756 名前:名前は開発中のものです。 mailto:sage [2009/07/23(木) 01:49:57 ID:w7s2/iav]
- ごめん適当なこと言った
DXライブラリでは出来ないような気がする でもフォントファイルを一時的に開くプログラムがあれば通常のフォントと同じように 名前の指定だけで使えるはず……
- 757 名前:754 mailto:sage [2009/07/23(木) 02:35:05 ID:M1f3xhTA]
- ありがとう!!探してみて解決したよ!!
結果はWin32APIのAddFontResourceEx関数を使えば一時的にTTFファイルからフォントリストに登録できるみたい 第二引数に0x10(FR_PRIVATE)を渡せばそのプロセスだけで使えるようになるぽ 使い終えたらRemoveFontResourceExで開放する必要もあるみたい。登録時とまったく同じ引数で呼び出す必要あり AddFontResourceEx("hoge.ttf", 0x10, 0); // これでhogeフォントを登録。DxLibのEnumFontNameでも表示されるはず。 RemoveFontResourceEx("hoge.ttf", 0x10, 0); // 削除。引数を↑と同じにしないといけないらしい いくらDxLib関係でググっても見つからなかったので少々冗長気味に解説してみたよ 正直この機能はDxLibにラップされてても違和感無いと思うんだけど
- 758 名前:名前は開発中のものです。 mailto:sage [2009/07/23(木) 03:39:18 ID:8ujD6dNo]
- 確かに自動対応してもいいレベルではある
- 759 名前:名前は開発中のものです。 mailto:sage [2009/07/23(木) 21:34:58 ID:PImKyCUU]
- 暗転ってどうやってやってる?
- 760 名前:名前は開発中のものです。 mailto:sage [2009/07/23(木) 21:51:01 ID:tLjhSV6z]
- 普通に画像を表示して、その上にかぶせるように真っ黒な画像を少しずつ濃くしながら表示。
完全に濃くなったら、表示する画像を切り替える。 真っ黒な画像を少しずつ薄くしながら表示する。完全に薄くなったら、以後、真っ黒な画像は表示しない。 これでいいと思う。
- 761 名前:名前は開発中のものです。 mailto:sage [2009/07/23(木) 23:37:10 ID:JVsH2uDi]
- SetDrawBlendModeとDrawBoxでやってるな。
- 762 名前:名前は開発中のものです。 mailto:sage [2009/07/24(金) 02:52:41 ID:sonMl0Vt]
- これ一旦止めた音楽止めた場所から再開させることできないのか
- 763 名前:名前は開発中のものです。 mailto:sage [2009/07/24(金) 03:42:20 ID:nwWosEk7]
- できるけど
Dxlib.h内を、サウンドハンドルの再生位置で検索
- 764 名前:名前は開発中のものです。 mailto:sage [2009/07/24(金) 04:08:03 ID:sonMl0Vt]
- ありがとうございます
やってみました PlaySoundMem でやってるときは GetSoundCurrentPosition で取得すればいいのかな でやってみましたが GetSoundCurrentPosition がいくら再生してるときでも0しか返ってこないのですが ちゃんと引数に正しい SoundHandle 入れてますよ
- 765 名前:名前は開発中のものです。 mailto:sage [2009/07/24(金) 04:20:10 ID:nwWosEk7]
- ごめん、検証してなかった
PlaySoundMemのTopPositionFlagを0にすれば 取りあえずは途中から再生できるはず
- 766 名前:名前は開発中のものです。 mailto:sage [2009/07/24(金) 06:13:08 ID:sonMl0Vt]
- ありがとうございました、できました
- 767 名前:名前は開発中のものです。 mailto:sage [2009/07/24(金) 08:59:47 ID:5C3gkZxn]
- DXライブラリ卒でD3D9使ってるけど、久々にDXライブラリ時代のソース引っ張り出して
ちょっと懐かしかった。pchも使ってなかったんだなぁとか。 つーかpch使ってない奴も多そうだから勝手に手順説明するぜ。 1. プロジェクト→新しい項目の追加→ヘッダーファイルでstdafx.hをプロジェクトに追加 2. プロジェクト→新しい項目の追加→C++ファイルでstdafx.cppをプロジェクトに追加 3. DxLib.hや標準ライブラリなど、自作でない巨大ヘッダのinclude文を*.cppから全部削除して、 代わりにstdafx.hの中に全部突っ込む(自作ヘッダは普通に*.cppで各自includeする方がいい) /* stdafx.hの例 */ #pragma once #include <DxLib.h> #include <string> using std::string; /* ここまで */ 4. 全ての*.cppの最初に#include "stdafx.h"を書く(コメントは前に入れてもおk) ちなみにstdafx.cppは、#include "stdafx.h"の一行だけでおk 5. ソリューションエクスプローラでプロジェクト名を右クリックしてプロパティを開き、左上の 構成を「すべての構成」にして、構成プロパティ→C/C++→プリコンパイル済みヘッダー→ プリコンパイル済みヘッダーの作成/使用を「プリコンパイル済みヘッダーファイルを使用する (/Yu)」に変更する 6. ソリューションエクスプローラで「stdafx.cpp」を右クリックしてプロパティを開き、左上の 構成を「すべての構成」にして、構成プロパティ→C/C++→プリコンパイル済みヘッダー→ プリコンパイル済みヘッダーの作成/使用を「プリコンパイル済みヘッダーファイルを作成する (/Yc)」に変更する これで、stdafx.hを変更する時以外は、ビルド速度がかなり劇的に上がるはず。 大した作業にはならないはずだから一度試すといい。
- 768 名前:名前は開発中のものです。 mailto:sage [2009/07/24(金) 09:09:49 ID:5C3gkZxn]
- ああ、気付きにくいかもしれないことを補足。
自作ヘッダから<string>とか<math.h>とか使いたい場合も、「必ず全ての*.cppの最初で stdafx.hがインクルードされる」という規則だから、結局は自作ヘッダがインクルードされる 時点ではstdafx.hが既に読み込み済みになってる。 なので、自作ヘッダに#include <string>とか書く必要も無し。自作ヘッダで使いたい標準の ライブラリなんかのincludeも、全部stdafx.hに逃がせばおk。
- 769 名前:名前は開発中のものです。 mailto:sage [2009/07/24(金) 17:40:08 ID:JWiEj2kH]
- これは便利そうですね
デメリットとかはありますか?
- 770 名前:名前は開発中のものです。 mailto:sage [2009/07/24(金) 18:12:52 ID:HmqJ54co]
- 今の俺には何のことだかさっぱりだがメモっておく
|

|