- 1 名前:名前は開発中のものです。 mailto:sage [2010/10/04(月) 17:24:47 ID:zBoueRHu]
- Cを習得した程度のスキルでも、
GUIのゲームを比較的容易に作成する事を可能にする、 「DXライブラリ」に関するスレッドです。 DXライブラリに関するテクニックなどの情報交換などを行う事で、 多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。 【公式】 homepage2.nifty.com/natupaji/DxLib/ 【過去スレ】 DXライブラリ 総合スレッド pc11.2ch.net/test/read.cgi/gamedev/1197468399/ DXライブラリ 総合スレッド 2008 pc11.2ch.net/test/read.cgi/gamedev/1224923873/ DXライブラリ 総合スレッド その3 pc11.2ch.net/test/read.cgi/gamedev/1238429676/ DXライブラリ 総合スレッド その4 pc11.2ch.net/test/read.cgi/gamedev/1249822550/ DXライブラリ 総合スレッド その5 pc11.2ch.net/test/read.cgi/gamedev/1259912953/ DXライブラリ 総合スレッド その6 hibari.2ch.net/test/read.cgi/gamedev/1267108154/
- 859 名前:名前は開発中のものです。 mailto:sage [2011/03/04(金) 00:05:04.17 ID:ZZu9fnGE]
- >>858
何処を見て判断しているか説明しないと、色々出るだけだろ。何処見てるんだよ!
- 860 名前:名前は開発中のものです。 mailto:sage [2011/03/04(金) 00:08:06.20 ID:Gm+qWo11]
- いや、タスクマネージャ……
- 861 名前:名前は開発中のものです。 mailto:sage [2011/03/04(金) 00:25:23.10 ID:phAV7U6c]
- とりあえずゲームループに入って100秒くらい経ってもまだメモリ増えるならアウト
- 862 名前:名前は開発中のものです。 mailto:sage [2011/03/04(金) 01:01:17.80 ID:Gm+qWo11]
- や、やっぱり法則がわからない。
何事も、初めのうちは増えるんだよね。 例えば効果音で、初めのうちは鳴る度にメモリ増えるんだけど、 何度も鳴ってると増えなくなる。 画像の読み込み+表示でもそうみたい。
- 863 名前:名前は開発中のものです。 mailto:sage [2011/03/04(金) 01:06:04.38 ID:Gm+qWo11]
- また肝心な事言い忘れた。
そういうことだから、やっぱループし初めは初めて尽くしだからポンポン増えてくけど、 落ち着けば変わったことが起こらない限り増えない。
- 864 名前:名前は開発中のものです。 mailto:sage [2011/03/04(金) 01:07:59.19 ID:Gm+qWo11]
- 重ね重ねごめんね。誤字
ループし初めは初めて尽くし→ループし始めは初めて尽くし
- 865 名前:名前は開発中のものです。 mailto:sage [2011/03/04(金) 01:30:31.12 ID:+Ujkj93Y]
- ずっと動かし続けてみたら?
数時間プレイし続けただけで落ちたらメモリリークだろうし
- 866 名前:名前は開発中のものです。 mailto:sage [2011/03/04(金) 23:09:56.12 ID:3Qrvh8YP]
- プログラマ諸兄方に教えて頂きたい。
正直、俺のヘボいプログラムを人に見せるのは恥ずかしいけど、 訊くは一時の恥、とサンプルを晒します。 ttp://www.dotup.org/uploda/www.dotup.org1396225.zip.html あくまでサンプルで、適当にやってるところもあるけど、大体において俺はこんな形でゲーム作ってます。 ご覧の通り一応動きはするけど、プログラムの組み方は拙いです。 これをいわゆる普通なやり方に直すとするとどうなりますでしょうか。 特にキャラクターデータやグラフィックハンドルの管理をどうしてるのか、とかが知りたいです。 よろしくお願いします。
- 867 名前:名前は開発中のものです。 mailto:sage [2011/03/04(金) 23:26:51.42 ID:kgJhX4cx]
- で、ダウンロードパスは?
- 868 名前:名前は開発中のものです。 mailto:sage [2011/03/05(土) 00:21:59.55 ID:wFok8gdI]
- あ、すみません。書くの忘れてました。
DXlib です。
- 869 名前:名前は開発中のものです。 mailto:sage [2011/03/05(土) 00:32:14.95 ID:Yfm7rI7q]
- やり方に直すって、全部コード書けってことかい?
流石に面倒だぞ ぱっと見たところ、クラスちゃんと使えよと思ったな C++の言語仕様くらいはちゃんと勉強しな あとキャラクタ管理にはリスト構造とか使えばいいと思うよ
- 870 名前:名前は開発中のものです。 mailto:sage [2011/03/05(土) 01:28:05.42 ID:1UObIsvi]
- 拙いという割にはちゃんと細かい処理も関数に分けてて分かりやすいと思う
コメント多めなのも良い クラスなんて構造体扱いでも全く構わないよ 全体的にわかりやすいベターCコードって印象
- 871 名前:名前は開発中のものです。 mailto:sage [2011/03/05(土) 01:31:08.83 ID:Yfm7rI7q]
- 構造体扱いなら
class Hoge{ public: }; なんてせずに struct{ }; でいいだろ。 そもそも、C++的に書きたいのか、C言語的に書きたいのかってのを言わんと目指すコードが分からんよな。
- 872 名前:名前は開発中のものです。 mailto:sage [2011/03/05(土) 01:31:35.11 ID:Yfm7rI7q]
- struct Hoge{}; だったすまん
- 873 名前:名前は開発中のものです。 mailto:sage [2011/03/05(土) 04:19:43.37 ID:/y9kIpiy]
- >>866
コメントも多いし処理ごとにブロック化されているので 読みやすくて(保守しやすいので)良いと思う。 敢えて言えば、サンプルだからかもしれないけれど 敵のタイプや数はマジックナンバーを使わないほうがいいと思う。 ENEMY_DATA[100]も、#define ENEMY_NUMBERS 100 とかにして まとめてヘッダに定義しておけば可読性もあがるし、敵の数を 変える必要があっても、他の部分(たとえば敵初期化時の forループの所とか)も直さなくていいから、楽になると思う。
- 874 名前:名前は開発中のものです。 mailto:sage [2011/03/05(土) 04:21:30.33 ID:/y9kIpiy]
- >キャラクターデータやグラフィックハンドルの管理
C++で書くつもりなら、ゲーム内のオブジェクトについては まず基底クラス作って、そこから各キャラを派生させて 敵や弾ごとにリストや、マネージャーとなるクラスで 管理しておけば処理や修正も楽だよ。 そうしておけば、サンプルのように描画時に敵のタイプで switchしなくても、たとえば敵リスト->Draw(); みたいに 書くだけでOKだし、もし新キャラを後で追加したくなっても Draw_rtn関数内は何も修正しなくてすむ。 同様に移動処理も、基底クラスのメンバに仮想関数として Move()とか持たして、派生先の各キャラごとに実際の処理を 書いておけば、Move_rtn関数内では 敵リスト->Move(); とかしておくだけですむ。 でも最初にカッチリと複雑なものを作ろうとして、 いつまでたってもゲーム完成できない…というのは最悪なので 当面はこういう感じで書いていくのもいいと思う。 不便や必要を感じたら、その都度勉強したらいいし。 こういった話はDxLibの話とは関係ないし、 C++で書かれているゲーム開発用の入門書のサンプルにたいてい 載ってると思うので何冊か買ってみるといいかも。
- 875 名前:名前は開発中のものです。 mailto:sage [2011/03/05(土) 13:47:42.01 ID:lRq0e7jV]
- しかし管理人様はマジですげーぜ
- 876 名前:名前は開発中のものです。 mailto:sage [2011/03/05(土) 16:58:19.71 ID:4fF2MP2u]
- 同意
- 877 名前:名前は開発中のものです。 mailto:sage [2011/03/05(土) 21:00:41.90 ID:+x8oBxgp]
- 画像のハンドル=ポインタですか?
- 878 名前:名前は開発中のものです。 mailto:sage [2011/03/05(土) 21:06:11.54 ID:QynImjUh]
- 違います
- 879 名前:はじめまして。 [2011/03/06(日) 22:54:57.95 ID:QYrw4Tbt]
- 確認なのですが、DXLibの描画順序って、コードの順序ですよね?
しかし、まずフィールドモデル(mqo)を描画した後、 メタセコイアで透過PNGを貼りつけた板モデル(mqo)を描画すると 板が先に描画されたかのように表示されます。 具体的には、以下のように表示されます。 cdn-ak.f.st-hatena.com/images/fotolife/p/peroon/20110306/20110306223051.jpg?1299418311 どうすればよいのでしょうか?
- 880 名前:はじめまして。 [2011/03/06(日) 23:00:32.76 ID:QYrw4Tbt]
- すみません、ちょっと怪しい部分がありますので、
もう少し自分で調べてみます。
- 881 名前:はじめまして。 [2011/03/06(日) 23:12:39.74 ID:QYrw4Tbt]
- ミスでした。思い通りに描画できました。
(update()でも描画していたというオチでした。。w)
- 882 名前:名前は開発中のものです。 mailto:sage [2011/03/07(月) 00:49:57.69 ID:CZyikCNH]
- 透過処理のポリゴンは大変なんですよ。
Zバッファーへの書込みをしなかったり、Zソートして描画しないといけなかったり。 >>879は、単にZバッファーに書込みしてるのでそれをOFFすれば、そのシーンだけは 正しく表示されるかな。
- 883 名前:名前は開発中のものです。 mailto:sage [2011/03/07(月) 19:08:00.52 ID:b7x4k2Cf]
- Zソートってみんなどうやってるの?
俺とりあえず表示する予定の全モデルの全メッシュを片っ端からキューに入れて メッシュ座標の最大値と最小値の中点求めて それのワールド座標求めてそれのスクリーン座標求めてそれのZでソートかけて描画してる 糞重たそうwwww 最近のPCスペック高いからぜんぜんわかんないけど
- 884 名前:名前は開発中のものです。 mailto:sage [2011/03/07(月) 19:16:35.82 ID:qzzE/e1x]
- PlayMovieでGIFアニメの再生が可能、と聞いたのですが
- 885 名前:名前は開発中のものです。 mailto:sage [2011/03/07(月) 22:14:07.46 ID:xxQTGPDS]
- なんかFPSが安定しないな〜って思って
vsync待ちする時間を1分測ってみたら 60fps目標でで20ミリ秒以上待つフレームが 0.3〜0.6%ほどあるんだけど そういうもんなんかな? BGMとゲーム内容を同期させたいから0.2秒くらいずれると 違和感感じるようになって困っちゃうんだよね
- 886 名前:名前は開発中のものです。 mailto:sage [2011/03/07(月) 23:05:01.44 ID:SO4RWHi7]
- >>885
どういうコード書いてるか知らんけど 自分は龍神録のコードのfps制御のとこだけコピペしたらすごい安定したよ
- 887 名前:名前は開発中のものです。 mailto:sage [2011/03/08(火) 00:37:13.97 ID:3MPvLyMj]
- >>886
簡単なテストコードなんだけどね〜 前回ScreenFlipした直後と 今回ScreenFlipした直後の間の時間を求めるだけの 自分の環境だけなのかどうか判断したいんで ちょっと試してみてくれんかな? ウィンドウモード時とフルスクリーンモード時の二つ ソースも一応いれといた www1.axfc.net/uploader/Sc/so/212454 パスはvsync フルスクリーンの時のほうがタイムオーバーする回数がだいたい2倍多くなるんだよな〜
- 888 名前:名前は開発中のものです。 mailto:sage [2011/03/08(火) 00:51:45.04 ID:bFxplNfr]
- タイムオーバーカウントとやらは
ウィンドウ:0〜3回 フルスク:6〜12回 程度。 フルスクは立ち上がりの1秒くらいが不安定っぽいな
- 889 名前:名前は開発中のものです。 mailto:sage [2011/03/08(火) 00:57:56.84 ID:KY1+fYB9]
- 関係ないかもしらんが俺の環境ではフルスクリーンだとなぜかVsync待ちすらしてないようでvsync_time: 0.005くらいが出まくってた。カウントは16。
- 890 名前:名前は開発中のものです。 mailto:sage [2011/03/08(火) 22:22:52.93 ID:3MPvLyMj]
- >>888
>>889 テストありがとう ん〜、環境によってわりかし違うなぁ どうすべ〜
- 891 名前:名前は開発中のものです。 mailto:sage [2011/03/08(火) 22:26:55.30 ID:8AuwhuEL]
- 環境設定で垂直同期オフのタイマー待ちモードを選べるようにしたらいいんじゃないか
- 892 名前:名前は開発中のものです。 mailto:sage [2011/03/08(火) 22:38:03.07 ID:6A/P0SlX]
- 似たような話で申し訳ないが、俺もちょっと気になる事が。
俺は垂直同期信号待ちを切ったプログラムを組んでる。 それとは別に、ウィンドウモードかフルスクリーンモードかを記録して、 プルグラム起動時にはその記録を読み込んで、どちらのモードで始めるか決まるようにしてる。 で、ここからが気になる事なんだけど。 フルスクリーンで起動した時は、まったくティアリングが出ないんだけど、 ウィンドウモードからフルスクリーンに切り替えた時は酷いティアリングが発生してしまう。 (フルスクリーンで起動して、一度ウィンドウモードにしてからまたフルスクリーンに戻しても同じ) 普通に考えたら垂直(略)待ちしてなければティアリングは発生して当たり前なんだから フルスクリーン起動時の方が特殊なんだろうか?? 他の人でこういう現象を経験した人っていますかね。
- 893 名前:名前は開発中のものです。 mailto:sage [2011/03/08(火) 23:27:50.64 ID:hpvVdE5K]
- >>886に同じ
- 894 名前:名前は開発中のものです。 mailto:sage [2011/03/09(水) 00:22:43.32 ID:rJmaFgi1]
- >>892
フルスクリーン → ウィンドウモード → フルスクリーン の時の動作が良くわからんなあ。
- 895 名前:名前は開発中のものです。 mailto:sage [2011/03/09(水) 00:50:26.09 ID:OL3/YmmT]
- >>892
その様な話を聞いた気がする。新しいので治っていたような…と曖昧な記憶があった。
- 896 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 05:50:27.58 ID:6m0CA7fb]
- グラフィックの白い部分は濃度100%で、灰色の部分は濃度50%で描画したいんだけど、いい方法ないかな?
そうしたいグラフィックをhoge_a.bmpにして真っ白いhoge.bmpも用意してhoge.bmpのほうを描画するようにすればいいんだろうけど あんまスマートじゃないよね。
- 897 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 06:16:14.89 ID:FAQ2zmRE]
- それ加算合成じゃね?
- 898 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 07:04:03.90 ID:6m0CA7fb]
- 違うのよね。例えば描画しようとした場所が元々、色(255,128,0)だったら
白い所は色(255,255,255)になって灰色(128,128,128)の所は色(255,192,128)になって、黒いところは色(255,128,0)のままって感じ。 ようはアルファブレンドの濃度を画像から読み込みたいの。 DrawGraph系はそれがデフォで実現できるんだけど。
- 899 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 07:18:31.39 ID:vOLR/zA1]
- 素直に>>896に描いた通りに画像を用意するか、そういう透過度のPNG画像を用意するかだね
PictBearとかあればぐその通りのPNG生成できるし
- 900 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 07:24:22.95 ID:6m0CA7fb]
- ああーPNGかぁ……そういえばそんなのもあったねぇ。
16色BMPしか使った事無かったからその発想は無かった。
- 901 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 07:25:05.24 ID:6m0CA7fb]
- 言い忘れた。
回答ありがとうございました。
- 902 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 07:26:03.94 ID:vOLR/zA1]
- 16色BMPっていつの時代だよw
- 903 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 07:37:10.25 ID:6m0CA7fb]
- いやなんかこう、描いたまんまなのが保障されて信用できるっていうか。
(0,0,0)だけが透過されるってわかりやすいし。元々俺ドット絵しか描けないし。 でもPNGって色情報とその色が何ビット連続で続くかっていうデータ構造なんだっけか? それなら見た目は変わらないだろうしそのほうがサイズ的にもいいんだよね。 いや前から気付いてたんだけどね、めんどくさいからずっとそのままでやっての、ごめん。
- 904 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 09:38:01.41 ID:jQ8f/olW]
- PNGは基本的にはピクセルのデータをzip圧縮してるだけ
可逆圧縮だから絶対に全てのピクセルが描いたままの色になる
- 905 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 12:34:25.51 ID:+yprSrry]
- 俺も最初bmpでやってたけどpngにしたら
かなり表現したいものが楽で簡単に作れるようになった おすすめ
- 906 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 12:35:03.98 ID:+yprSrry]
- 楽で簡単ってなんだよ…orz
- 907 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 19:59:55.15 ID:6m0CA7fb]
- やったぁPNGでできたヨーありがと
- 908 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 20:13:25.51 ID:FAQ2zmRE]
- PNGでドット絵というなら、pngoutっていうフリーのコンソールアプリケーションでPNGの最適化とかおすすめよ
別にしなくてもいいけど
- 909 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 20:33:30.41 ID:6m0CA7fb]
- ということはデフォルトでは最適じゃないってこと?
まぁ情報ありがとう。
- 910 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 21:43:01.44 ID:2JxcKgYY]
- 圧縮の最適なパラメータ値を探し出すのは
わりと時間がかかるからね。
- 911 名前:名前は開発中のものです。 mailto:sage [2011/03/10(木) 23:01:54.80 ID:eX9JRndm]
- 男は黙って32bitBMP
- 912 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 07:33:52.45 ID:gK4E7Ao2]
- データーがでかすぎじゃん。
最近のゲームはDVD埋めるためにBMP使ってるとしか思えん
- 913 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 07:45:02.94 ID:fDILOKgF]
- 最近のゲームってBMPなのか?
違法コピー対策にデータ量水増ししてるという話は聞いたことあるけど
- 914 名前: [―{}@{}@{}-] 名前は開発中のものです。 mailto:sage [2011/03/11(金) 07:46:39.43 ID:jcxEZYMy]
- でも結局実行するときには展開するわけじゃん。圧縮したまま表示できるわけじゃないし。メモリ使用量は変わらんのでしょ?展開処理が省かれる方がいいじゃん
- 915 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 08:26:21.44 ID:3h44Ixvy]
- メモリやCPUの少ないPSとかの中期コンシューマ機はわからないけど、
そういった処理能力が十分にある最近のPCは「展開速度<読み込み速度」だと思うのよね 大きいファイルをHDDガリガリ言わせて読み込むよりは、小さい圧縮ファイルをちょいと読み込んで、 高速なメモリやCPUで展開した方が速度的には早いんじゃないかな
- 916 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 10:50:48.71 ID:plaIhemI]
- そもそもそんなbmpとかpんg違うだけで変わってくるもんなんか
- 917 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 10:50:54.67 ID:OccSvVJ3]
- SDカードからデータを読み込む時マップ移動でめっちゃ遅かったけど
圧縮してみたら物凄い早くなってびっくりした
- 918 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 10:56:30.82 ID:LEs/Jeuf]
- そりゃHDDに比べて転送速度がかなり遅いのが多いからな
- 919 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 11:36:41.06 ID:KcMscP0h]
- >>884
過去スレにそういう話が出てた。 14ヶ月ぐらい前のレスだったけど、多分 今も再生できると思う。 645:名前は開発中のものです。[sage]2010/01/18(月) 19:34:01 ID:YzUndEty gifアニメ、 PlayMovie()で出来たはず。
- 920 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 21:37:47.82 ID:plaIhemI]
- つい2か月前じゃんw
- 921 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 21:58:57.74 ID:XN7O6btB]
- ∩___∩ |
| ノ\ ヽ | / ●゛ ● | | | ∪ ( _●_) ミ j 彡、 |∪| | J / ∩ノ ⊃ ヽ ( \ / _ノ | | .\ “ /__| | \ /___ /
- 922 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 22:06:30.00 ID:7H8Pgyin]
- >>890だけど
結局vsync待ちするのやめて ティアリング発生覚悟で 高精度パフォーマンスカウンタでFPS制御することにしたわ すげー安定した ティアリングも思ったより気にならない
- 923 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 22:41:51.60 ID:TNQZ9jw4]
- そういえばVistaか7かでOS側がティアリング防止してるなんて話も聞いたような気がする
垂直同期信号待ちとかもうする必要なさそうだね
- 924 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 22:44:33.33 ID:7H8Pgyin]
- >>923
らしいね、オレはXPだから関係ないけどな〜 どういう仕組みでティアリング防止してるんだろ
- 925 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 22:50:03.08 ID:TNQZ9jw4]
- ちょっと調べた感じだと、単純に1フレーム遅らせてるだけみたい
Vistaでマウスの位置に画像を表示するだけのプログラム動かすとちょっと遅れて付いて来てるような感じを覚えてるなそういえば
- 926 名前:名前は開発中のものです。 mailto:sage [2011/03/11(金) 22:54:16.60 ID:2Fw05PYB]
- DWMは画面全体をゲームの画面と同じように描画するんだよ
DXライブラリの言葉で説明すると、まず各ウィンドウをそれぞれ別々のグラフィック(テクスチャ)に描いて それをDrawGraphで裏画面に描画した後、垂直同期待ちを行ってから表示する
- 927 名前:名前は開発中のものです。 mailto:sage [2011/03/12(土) 11:21:42.70 ID:9O79jOON]
- 管理人さん無事みたいだな
- 928 名前:名前は開発中のものです。 mailto:sage [2011/03/12(土) 11:26:31.82 ID:f65tMTTN]
- おお、よかった
- 929 名前:名前は開発中のものです。 mailto:sage [2011/03/12(土) 11:37:26.12 ID:o3j8l5hp]
- よかたよかた
- 930 名前:名前は開発中のものです。 mailto:sage [2011/03/12(土) 11:59:56.06 ID:yD3YkCG3]
- ふう
- 931 名前:名前は開発中のものです。 [2011/03/14(月) 22:40:22.44 ID:gNx4XTy2]
- 流れぶったぎったうえに初心者で申し訳ないんですが、質問させてください。
アクションゲームを作ろうと思っているんですが、 CheckHitKey関数でキー情報を取得→ベクトルで座標計算 という風にすると左キーと右キーを同時押しした時に 右と左に同時に座標が計算されて、キャラが静止してしまいます。 これを回避するにはどうすればいいでしょうか? まだポインタも理解していない程なので理解力が低いかもしれませんが、 よろしくお願いします。
- 932 名前:名前は開発中のものです。 mailto:sage [2011/03/14(月) 22:45:54.96 ID:UnZDECUY]
- 静止しちゃまずいのか?
どう動いて欲しいのかを書かない限り「どのコードも正しい」
- 933 名前:名前は開発中のものです。 [2011/03/14(月) 22:55:43.30 ID:gNx4XTy2]
- >>932
すいません、言葉足らずでした。 反対方向のキーを押した場合、 後から押した方のみを計算したいんです。 (右を押しながら左を押すと左に行くみたいな) GetNowCount関数を使って時間差で比べようと思いましたが、 どうにも上手く書けなくて… 出来れば教えて頂くのは考え方だけで、 ソースは自分で頑張りたいと思います。
- 934 名前:名前は開発中のものです。 mailto:sage [2011/03/14(月) 23:06:54.10 ID:TbizatYE]
- 前のフレームの状態を覚えておくんだよ
それを現在の状態と比較すれば、押されたキーや離されたキーがわかる
- 935 名前:名前は開発中のものです。 [2011/03/14(月) 23:13:39.89 ID:gNx4XTy2]
- >>934
アドバイスありがとうございます。 秒じゃなくてフレームじゃないと駄目だったんですね。 …そりゃそうか。 完成できるよう頑張ります!
- 936 名前: [―{}@{}@{}-] 名前は開発中のものです。 mailto:sage [2011/03/14(月) 23:21:23.20 ID:E5S/TLVJ]
- while(1)
{ old_left_key_state = left_key_state; old_right_key_state = right_key_state; if(CheckHitKey(LEFT_KEY)){ left_key_state = PUSH; } else{ left_key_state = RELEASE; } if(CheckHitKey(RIGHT_KEY)){ right_key_state = PUSH; } else{ right_key_state = RELEASE; } if(left_key_state == PUSH && right_key_state == RELEASE){ press_key = LEFT_KEY; } if(left_key_state == RELEASE && right_key_state == PUSH) { press_key = RIGHT_KEY; } if(left_key_state == RELEASE && right_key_state == RELEASE){ press_key = NONE; } if(left_key_state == PUSH && right_key_state == PUSH){ if(left_key_state == PUSH && old_left_key_state == RELEASE){ press_key = LEFT_KEY; } if(right_key_state == PUSH && old_right_key_state == RELEASE){ press_key = RIGHT_KEY; } } }
- 937 名前:名前は開発中のものです。 [2011/03/14(月) 23:54:12.21 ID:gNx4XTy2]
- >>936
コードありがとうございます。 自分で作るとか言っときながら、あっさり見てしまいました。 でも参考になりました!やっと悔いなく先に進めそうです。
- 938 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 00:03:07.27 ID:X3tKRN+k]
- ttp://dixq.net/rp/2.html
これの値でかいほうにすりゃいんじゃね
- 939 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 03:26:20.84 ID:DqTTW319]
- これ関係ないキーまで256回もチェックするのが気になるのだが
256回程度じゃ問題ないという考えなのか あとその上の奴は4塊目 普通 else if(left_key_state == RELEASE && right_key_state == PUSH) { press_key = RIGHT_KEY; } else if(left_key_state == RELEASE && right_key_state == RELEASE){ press_key = NONE; } 入れるもんじゃないのか もしそうするとその次の if(left_key_state == PUSH && right_key_state == PUSH) も else だけで済むでしょう それとその後の if(left_key_state == PUSH && old_left_key_state == RELEASE){ press_key = LEFT_KEY; } if(right_key_state == PUSH && old_right_key_state == RELEASE){ press_key = RIGHT_KEY; } だが left_key_state == PUSH && 、right_key_state == PUSH && いるかね こまけえこたあいいんだよ?
- 940 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 06:05:58.86 ID:xbXr2Nkf]
- >>939
「これ」とか「その」とかってなんだよ、ちゃんとどこか安価でもしろよ 答える方に探せってか? 幸いレスが近いから>>936のことだろうって分かるけどよ あと4塊目ってなんだよ、そんな言葉初めて聞いたよ 簡単な例示のプログラムなんだから こまけぇこたあいいんだよでおkだろ おまえの言ってることはあってるけど、動作的には同じだろ? 条件を明示的にわざと条件を冗長に書いて コードの可読性を上げるという意味はある nに1〜4までしか入らないswitch文でも switch(n){ case 1: break; case 2: break; case 3: break; default: break; } とは書かんだろ? >これ関係ないキーまで256回もチェックするのが気になるのだが 全部のキーを調べないと汎用性がないだろ もし、使いたいキーが増えたらその都度増やすのか? べつにそれでもいいけどさ あと、普通はGetHitKeyStateAll使うだろ
- 941 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 09:09:53.01 ID:DqTTW319]
- 普通はGetHitKeyStateAll使うってのは言おうとしたけどやめたんだ
あと安価付けるの照れ臭いんだ 察してくれよw 4塊目ってのは言い方が思い付かなかったんだから分かるだろと思って俺が勝手に作ったんだよ 分かるだろ?w まあ何か言い方はあるんだろうけどすぐに思いつかなかった まあそれだけのことだw 明示的にわざと書いてとは言うがこの場合は書かなくても分かると思ったんだよ まあ人それぞれだろうが 全部のキーを使わないと汎用性ないだろとは言うがだからといって256個も使うわけねえだろって思ってw 大体方向キーとボタン数個だけだろ、使うとは言っても いくら汎用性がないとはいえ調べる必要ない奴の方が圧倒的に多いのに256個もチェックする必要があるかねって思っただけw
- 942 名前:名前は開発中のものです。 [2011/03/15(火) 09:12:40.30 ID:gnI9eXa6]
- 芝
- 943 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 09:14:29.72 ID:DqTTW319]
- だから
> if(left_key_state == PUSH && right_key_state == PUSH) も else だけで済むでしょう は置いといてもだ > if(left_key_state == PUSH && old_left_key_state == RELEASE){ press_key = LEFT_KEY; } > if(right_key_state == PUSH && old_right_key_state == RELEASE){ press_key = RIGHT_KEY; } の > left_key_state == PUSH && 、right_key_state == PUSH && はすぐ上に同じ条件があるんだからいるかね?って思っただけ まあ別に大した問題ではないんだけどねw それでも細かい俺は気になったの 細かいこと気にし過ぎ?w
- 944 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 09:23:09.01 ID:7Ujss6hx]
- まぁ情報が少なくて困るよりは、
教科書どおりの良い情報と、流し見でいい発展情報とがあるほうが、いいんでないかい 教科書と発展とが混ざってわからなくなると困るけど、そこはみんな 鋭くツッコミ入れてくれるところだしな
- 945 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 09:34:29.08 ID:xbXr2Nkf]
- >>943
気にしすぎ あとイチイチ語尾に芝はやすのうざい 真面目にレスする気なくす >普通はGetHitKeyStateAll使うってのは言おうとしたけどやめたんだ 言えよ >あと安価付けるの照れ臭いんだ >察してくれよw ムリ あとはコーディング規約をどうするかって話だけだ そこは人と場合それぞれで明確な解答はない 以上、もうお前にはレスしない
- 946 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 09:47:22.67 ID:LRL3QteV]
- bool Input::KeyDown(BYTE key)
{ return (m_keyInput[key] & ~m_keyInputPrev[key]) == 1? true:false; } 俺は上みたいにしてるよ 前フレームのをmemcpyで配列毎コピーすれば良いと思う
- 947 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 10:12:36.70 ID:DqTTW319]
- >>945
今回は敢えて言う必要ないかなと思っただけだよ レスしねえなら最初っからすんじゃねえカス
- 948 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 10:35:06.21 ID:sVXS+gQF]
- 相手からの反論がないならと安心して罵倒か
カスはお前だろw
- 949 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 10:47:54.36 ID:xUaeA1H3]
- >あと安価付けるの照れ臭いんだ
>察してくれよw 無茶言うなw
- 950 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 16:58:39.83 ID:18Xm69u5]
- プリコンパイル済みヘッダって、DxLibくらいじゃ効果薄いよね?
- 951 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 17:11:32.96 ID:KXScCzgE]
- とある人の受け売りだけど、VCにてビルドを超高速化する方法
自作のヘッダファイルにはインクルードガードを施す ↓ cppファイルを1つを除いて全部「ビルドから除外」する ↓ そして、その1つのcppファイルにそれら「ビルドから除外」したcppファイルを全部インクルードする ↓ ビルドする ↓ サラマンダーよりはやーい プリコンパイル済みヘッダはシラネ
- 952 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 17:14:05.00 ID:fAuDpb2f]
- >>951
最後なんなんだよ。 俺とやる気か?あ?
- 953 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 18:01:11.55 ID:nteT3Zz7]
- >>950
めっちゃ早くなってるよ アホだから設定苦戦したけど。
- 954 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 19:05:01.55 ID:QQAoE1bu]
- >>951
それって1ファイル書き換えただけで全部の.h/.cppをコンパイルし直すことにならないか?
- 955 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 19:44:40.83 ID:KXScCzgE]
- >>954
よっぽどの量でない限り、一つのファイルのコンパイル速度はコード量に左右されないよ ビルドで時間使ってるのはプリプロセスやobjのリンクで、それをすっ飛ばせるとかなり早くなる cppが多いプロジェクトを書き換えると感動すると思うよホント 正直今まで人に教えるのを勿体無いと思ってたレベル
- 956 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 20:12:52.73 ID:Q7+nM0HN]
- つうか、普通にそういうのオフに出来るオプションあるんじゃないの?
いや、詳しくは知らんけど。
- 957 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 20:32:14.80 ID:xbXr2Nkf]
- >>951
includeの順番間違えて ビルド出来るようにするまでちょっと戸惑ったけど むっちゃくちゃ速くなった、ありがとう
- 958 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 20:38:02.64 ID:hTtiuP+j]
- #includeでcppか……違和感はあるな
- 959 名前:名前は開発中のものです。 mailto:sage [2011/03/15(火) 21:01:01.48 ID:44jcDk3e]
- LL系言語のloadfileみたいだなw
- 960 名前:名前は開発中のものです。 mailto:sage [2011/03/16(水) 15:22:41.05 ID:ywftU18L]
- 理に適ってるかどうかは置いといて、非合理的ではある
- 961 名前:名前は開発中のものです。 [2011/03/16(水) 16:22:15.68 ID:zS54Nj1q]
- なぜ非合理的なのでしょうか?
- 962 名前:名前は開発中のものです。 [2011/03/16(水) 16:25:58.79 ID:zS54Nj1q]
- つか、理にかなってないかわからないけど
非合理的って矛盾してね?
- 963 名前:名前は開発中のものです。 mailto:sage [2011/03/16(水) 16:26:24.95 ID:do/XMJJp]
- 合理的かどうかは知らんが、スピードを優先するために何かを犠牲にするって話だよね
何かってのは例えば>>957がたどったような手間とか
- 964 名前:名前は開発中のものです。 mailto:sage [2011/03/16(水) 18:52:54.43 ID:UW09KiLI]
- >>963
オレがその>>957だが、ビルド出来るようにする手間より ビルドにかかる時間の短縮のほうがでかかったよ すげ〜得した >>955の言うとおりcppファイルが沢山あるプロジェクトほど効果はデカイ >>960のレスこそ非合理的って話だな
- 965 名前:名前は開発中のものです。 mailto:sage [2011/03/16(水) 18:53:19.02 ID:gTLtkOfi]
- まぁぶっ飛んだ裏技的やり方だからね
C++の仕様を理解できてコードの依存関係を頭の中でちゃんとイメージ出来る人だけ 楽する手段としてつかって欲しい感じ
- 966 名前:名前は開発中のものです。 mailto:sage [2011/03/16(水) 19:07:37.43 ID:BjnjOb1q]
- このやり方を支援するプラグインがあればいいのにな
- 967 名前:名前は開発中のものです。 mailto:sage [2011/03/16(水) 19:17:41.84 ID:i6gMh4cT]
- てか、俺からしたらそんなにビルドに時間がかかるほどのゲームを作ってる人がいるのに驚きだ。
しかもDXライブラリを使って? いったいどんな規模のゲームなんだ。
- 968 名前:名前は開発中のものです。 [2011/03/16(水) 19:17:48.09 ID:BC+pXFRw]
- デフォでオフだけど並列でビルドするオプションがある
すごく早くなる
- 969 名前: [―{}@{}@{}-] 名前は開発中のものです。 mailto:sage [2011/03/16(水) 19:31:14.46 ID:wm2Br6SF]
- // main.cpp
#include <stdio.h> #include "sub_1.cpp" #include "sub_2.cpp" extern int get_sub_1_val(void); extern int get_sub_2_val(void); int main(void) { printf("sub_1_val: %d\n", get_sub_1_val()); printf("sub_2_val: %d\n", get_sub_2_val()); return 0; } // sub_1.cpp static int val = 10; int get_sub_1_val(void){ return val; } // sub_2.cpp static int val = 20; int get_sub_2_val(void){ return val; } sub_2.cpp(1) : error C2370: 'val' : 再定義 ; 異なるストレージ クラスです。 sub_1.cpp(1) : 'val' の宣言を確認してください。
- 970 名前:名前は開発中のものです。 mailto:sage [2011/03/16(水) 19:47:41.09 ID:zS54Nj1q]
- なるほどね
Cだと駄目だね 無名空間とかもそうなるのかな?
- 971 名前:名前は開発中のものです。 mailto:sage [2011/03/16(水) 19:50:17.06 ID:gTLtkOfi]
- >>967
そんな大規模じゃなくてもcppファイルが多くて…… STGなんだけど、 自作計算関数、自作システム関数、保存データ管理関数、敵クラス、弾クラス、その他オブジェクトクラス、 ゲームシーンクラス、メニューシーンクラス、リソース定義……とか 全体の行数はたった6000行ちょい(空改行除く) >>969 extern宣言してないグローバル変数の衝突は仕方ない…… てか考えると思ったよりも問題の出るケース多そうね……
- 972 名前:名前は開発中のものです。 mailto:sage [2011/03/16(水) 20:02:03.60 ID:1Ae82QgD]
- >>968
教えてくれてサンクス 一瞬で終わって驚いた
- 973 名前:名前は開発中のものです。 mailto:sage [2011/03/16(水) 21:19:17.62 ID:tAHP0ur9]
- 全体の行数ってどうやったら数えられるんだっけ?
- 974 名前:名前は開発中のものです。 mailto:sage [2011/03/16(水) 21:19:47.26 ID:tAHP0ur9]
- 書き忘れた、もちろんVCの話で…
- 975 名前:名前は開発中のものです。 mailto:sage [2011/03/16(水) 23:33:53.97 ID:do/XMJJp]
- 行数カウントツールが、フリーソフトページにあるよね
並列ビルドはぐぐったけど見つからなかった 複数プロジェクトを同時ビルドってのは初期値が2で最大値が32みたいだけど、これは違うよねきっと
- 976 名前:名前は開発中のものです。 [2011/03/17(木) 01:14:09.79 ID:jlNSzrqd]
- VCに「複数プロセッサによるコンパイル」という項目がある
- 977 名前:名前は開発中のものです。 mailto:sage [2011/03/17(木) 04:33:38.84 ID:FsTg2Syb]
- プロジェクトのプロパティ>構成プロパティ>C/C++>全般>複数プロセッサによるコンパイル
だな VC++2010にはあるけど、VC++2008には無いみたいだな
- 978 名前:名前は開発中のものです。 mailto:sage [2011/03/17(木) 21:28:02.94 ID:USLN5jlJ]
- 2008なら/MPオプションを直接与えればいい
|

|