前回までのあらすじ:主人公や敵や背景に至るまで画像として形が与えられた。しかし、彼らには何か虚像のような奇妙なノイズが付き纏っていた。
10.ちらつきをなくすために
め、目の錯覚でしょうか。心なしか画像がちらついて見えます。
いったいどうなっているのか、いつぞやの動さんに聞いてみましょう。
なんだなんだ!描いている途中の様子が丸見えじゃないか!
料理の実演販売じゃあるまいし、こういうのは全部描きあげてから人様に見せるのが筋じゃないのか。
これじゃまるでシロウトが作ったみたいじゃないか!そういえばシロウトで丸見えといえば(検問により削除)
いや、実際私はシロウトなんですが…。削除された部分が気にならないわけでもありませんが、ともかく、描画処理に問題があったようです。生意気なAc(ry
とりあえず、描いている途中経過が丸見えな状況を超スローで再現したGIFアニメでも見せようかと思ったのですが、GIFアニメ作成ツールがなくなっていたので適当に想像しといてください。
・・・みえないところでこそこそ描いてさ、全部描き終わったところで出来上がった絵を画面に写すとか。いいと思いません?
ここだけの話、くりえーとこんぱちぶるでーしーというのがいいらしいですよ。
はい、これも実は本家にあったりします。「みえないところ」を作るんです。
'画面表示用の画像
Dim hMemDC As DWord
Dim hMemBmp As DWord
上のをグローバルに書いて、くりえーととですとろいに、
Sub MainWnd_Destroy()
(省略)
DeleteDC(hMemDC)
DeleteObject(hMemBmp)
(省略)
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
(省略)
'デバイスコンテキストを作るぞ!うえーい!
hBackDC=CreateCompatibleDC(hDC)
hCharaDC=CreateCompatibleDC(hDC)
hMemDC=CreateCompatibleDC(hDC)
'DCにBMPを選択。うぐぅ…
SelectObject(hBackDC,hBackBmp)
SelectObject(hCharaDC,hCharaBmp)
hMemBmp=CreateCompatibleBitmap(hDC,GAMEWIDTH,GAMEWIDTH)
SelectObject(hMemDC,hMemBmp)
(省略)
End Sub
あとは、Paintなんたら系で使っていたhDCをhMemDCに摩り替えておけば・・・・
何も表示されないの!?
「みえないところでこそこそ描いてさ、全部描き終わったところで出来上がった絵を画面に写すとか。」
「出来上がった絵を画面に写すとか」
忘れてましたよ。
Function PaintScene()
'画面描画
'アニメの1コマだと思えばわかりやすいとよく言われる
PaintBackground() '背景描画
PaintMyChara() 'マイキャラ描画
PaintEnemy() '敵キャラ描画
'出来上がった絵を画面に写す
Dim hDC As DWord
hDC = GetDC(hMainWnd)
BitBlt(hDC,0,0,GAMEWIDTH,GAMEHEIGHT,hMemDC,0,0,SRCCOPY)
ReleaseDC(hMainWnd, hDC)
End Function
ホレホレ。これで文句あっか。
ちらつかないサンプル(39.8kilobyte)