• 締切済み

ゲームプログラミングで

VC++ 2008でwin32apiを使ってゲームをつくっているのですが キャラクタのキー入力に対する描画が上手くいきません。 キー入力の際にX座標に移動ピクセル量を加算しているのですが WM_PAINTメッセージ内のInvalidateRectが実行された際に 現座標から加算後のX座標にキャラクタが飛んでしまいます。 加算後のX座標までの過程も描画したいんです。 いろいろ試したのですがいい案が浮かびませんでした。 できれば歩行中のように足踏みしながら移動させたいので どこかにアクションゲームのソースコードがあるサイトなど ありましたら教えてください。

みんなの回答

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

ついでに… [技術者向] コンピューター > プログラミング > C&C++ のカテの方がよいかと思われます。 # アドベンチャー向けのスクリプトシステムで疑似シューティングなんか作ってみたことも。かなり無理があった…。

flicker
質問者

お礼

すみません、カテのアドバイスまで有り難うございます。 WM_PAINT内にInvalidateRectは記述しませんね(笑)。 書き間違えてしまいました。すみません。 書籍の紹介有り難うございます。 「アクションゲームプログラミング」は売ってなかったので、 評判がよくゲームプログラミングの基本となるシューティングゲーム について書かれた同シリーズ「シューティングゲームプログラミング」を 早速購入してきました。 これでビットマップの描画や当たり判定など勉強していこうと思います。 ご丁寧に有り難うございました。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>キー入力の際にX座標に移動ピクセル量を加算しているのですが >WM_PAINTメッセージ内のInvalidateRectが実行された際に >現座標から加算後のX座標にキャラクタが飛んでしまいます。 WM_PAINTでInvalidateRectするのは間違っていませんか? >加算後のX座標までの過程も描画したいんです。 >いろいろ試したのですがいい案が浮かびませんでした。 メッセージの遅延や、描画に掛かる時間を無視するとして… 秒間60フレームとして、1秒間の移動距離を60で割って、 SetTimer()で33msのタイマーを設定。(分解能は適宜設定を) WM_TIMERで算出した移動距離を座標に加減算、InvalidateRect()で無効領域を設定して、次のタイマーに備える。 WM_PAINTで描画。 とか…… # かなり大ざっぱなのでコレでは使えないと思いますが。メッセージ遅延するし。 >どこかにアクションゲームのソースコードがあるサイトなど >ありましたら教えてください。 サイトではなく、本ですが… http://www.google.co.jp/search?hl=ja&source=hp&q=%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%B2%E3%83%BC%E3%83%A0+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=&aq=f&oq= 他にもゲームプログラミング系の書籍はあるでしょう。 ダブルバッファリング使ったり、マルチスレッドにしたりしないと使い物にならないでしょう。

関連するQ&A