時乃工房-Windowsとアマグラマーな関係-

アクセスアップにオートリンクネット リンクが自動で増殖オートリンクの登録はこちら 節約内職情報検索局
ページランク向上リンク集
役立つリンク集 Web Links
SEO対策ディレクトリ型検索エンジン Su-Jine
メニュー
トップ
アマグラミング
C++編 目次
第17章
第19章
ソフトウェア開発製品
相互リンク

<勘違いだらけのアマグラミングな日々(C++編)>

第18章 タコと豆腐の交代

2006年11月29日

さて先日、ソニ○からP○3なるコンシューマー向けゲーム機が発売され、世間ではちょっとした盛り上がりをみせているようだ。
来月には、ニンテンド○からW○iなるマシンも発売され、クリスマス商戦、年始お年玉争奪戦に向け、各社しのぎを削っている様子が、さまざまなメディアから報じられている。
私はと云えば、○ガ製ドリ○ムキャストを導入していらいまったく購買意欲を失ってしまって、P○2すら持っていない現状なわけだが、しかし、コンシューマ機に対する興味が無くなってしまった訳ではない。
それぞれのハードウェアに対する情報を(素人なりに)集め、ふむふむと(素人なりに)分析し、知的欲求をみたして満足しているのである。
しかし、Ce○lは素晴らしいねぇ。
いやぁ、能力が、と云うより、その構成の発想が。
○BMの面目約如ってところか、懐が深くてプログラミングの面白みに溢れているみたい(プロのプログラマーの方はご苦労様です)。
その上、今後のCPU開発コスト製造コストも抑えることが出来そうな構成だ。
P○3本体の構成にしても、メモリ容量きつめでプログラマーの腕の見せ所と云うか、ぬるいPCアマグラマーには想像を絶するテクニックが駆使されていくに違いない。
なにせPCでは、遅いマシンは置いてけぼり、ってはっきり宣言できてしまうのだから。
ただ、P○2に比べて(外観はともかく)ソニ○色が薄くなってしまった感が否めず、少し残念な気がする。
対するW○iも負けてはいない。
絶対的な処理能力はさておき、(プログラマーに限らず)開発者の発想力を刺激する様々な工夫が光る、素晴らしいマシンだと思った。
どちらにしても、○BMにとっておいしい商戦になっている事実は、さすが、と評するべきなのだろう。

しかし、ああ、この連載もどんどんゲーム色が濃くなってしまったなぁ。
ま、担当者の嗜好なのだから仕方ないにしても・・・
さて、前回までの内容を踏まえた上で、キャラクター表示について研究してみよう。
ただ、今回は前哨戦
次回からの展開に向けての下準備ということで、特に新しいことはしないので、さくさくっと進めてみようと思う。

List.002-017
main_window.h
main_window.cpp
main_callback.h
main_callback.cpp
main_process.h
main_process.cpp
graphics_control.h
graphics_control.cpp
bitmap.rc
main_menu.h
main_menu.cpp
main_menu.rc
<ソースのダウンロード>

これはただ単にマージするBMPデータを置き換えただけだ。
特に説明することもないのだが、判りやすいように変数名を少し変更した。
以下が、実行結果と、差し替えたBMPファイルの拡大図である。

さぁ、次は背景を描画してみよう。
こちらもさくさくっと・・・

List.002-018
main_window.h
main_window.cpp
main_callback.h
main_callback.cpp
main_process.h
main_process.cpp
graphics_control.h
graphics_control.cpp
bitmap.rc
main_menu.h
main_menu.cpp
main_menu.rc
<ソースのダウンロード>

ここではまず、関数SetBackGround()関数BildBackGround()を用意し、関数SetupProcess()背景用のBMPファイル読み込んで関数SetupGraphics()描画している

ああ、ちょっとさくっと行き過ぎた
背景の描画方法は、画面いっぱいに関数SetCharacter()実行しているだけ。
これを関数SetupGraphics()最後で呼び出すことにより、仮想デバイスコンテキスト背景画像で埋めているわけだ。
ここで気をつけなければならないのは、関数SetBackGround()関数BildBackGround()呼び出し順序
関数MainCallBack()WM_CREATEメッセージ処理において、関数SetupProcess()の後で関数SetupGraphics()を呼び出しているが、この順番を入れ替えると背景の描画に失敗してしまう。

はい、次っ!!
今度は背景を描画するタイミングを変更してみよう。

List.002-019
main_window.h
main_window.cpp
main_callback.h
main_callback.cpp
main_process.h
main_process.cpp
graphics_control.h
graphics_control.cpp
bitmap.rc
main_menu.h
main_menu.cpp
main_menu.rc
<ソースのダウンロード>

さて、何をどうしたのかと云うと、List002−018関数SetupGraphics()の最後で呼び出していた関数BildBackGround()を、関数BildClientarea()の最後で呼び出すように変更した点だ。
こうすることで、クライアントエリアを描き換えるたびに仮想デバイスコンテキストは背景画像で埋め尽くされる。
結果は以下のとおり。
タコ君(?)は線を引きずることなく、クライアント領域内を移動してくれる。
少し尾っぽ(?)が付いているのは、ご愛嬌(?)。

理屈は、タコ君の描画した後を背景画像で毎回塗りつぶしているからなのだが、移動の為だけに背景を全て描き換えるのは、ホントはあまり褒められたやり方ではない
本来ならば、タコ君の移動前の領域だけ背景を重ねてやればその分処理が軽くなるわけだが、以降の展開であることを企んでいるため、また、現代の高速なPCの処理能力をもってして、今はあえてこの方法をとることにしよう。









さて、ここまで準備を進めたうえで、次回はキャラクターと背景の重ね合わせ処理を研究してみよう。
なお、描画に使用しているBMPファイルのセンスの悪さは、コーディングのセンスの悪さとあわせて、広い心を持って勘弁していただきたい。

<前章> <目次>





<時乃工房>
Net Office Nakai
メビウスリング投稿掲示板には小説日記ゲームアニメコミック小学生中学生などの掲示板過去ログがあります。相互リンクも募集中。