トップページ > 過去ログ > 記事閲覧
GetDrawScreenGraphを使用してのズーム
名前:B/B 日時: 2011/02/09 01:40

現在スーパーマリオのような横スクロールジャンプアクションを作っています。 キャラクターがウィンドウサイズに比べて小さいので、マップを広く見渡せるようになっているのですが、 ズーム機能を付けて、プレイヤーの任意の視界の広さでプレイできるようにしたいと思っています。 そこで、GetDrawScreenGraph関数を使用して、簡単ではありますが以下のような実現方法を思いつきました。この方法だと640x480のウィンドウ内の中央320x240を二倍に拡大して画面に表示します。 //以下はゲームループ外で static int Screen = MakeGraph( 320 , 240 ) ; //以下はゲームループ内で /* キャラクターやマップの描画などがここに書いてある */ GetDrawScreenGraph( 160 , 120 , 640-160 , 480-120 , Screen ) ; DrawRotaGraph( 320 , 240 , 2.0f , 0.0 , Screen , FALSE ) ; しかし、案の定というか、GetDrawScreenGraphは毎フレーム呼び出していると、さすがに処理落ちが発生しました。 キャラクター毎、マップ内のブロック毎に拡大するという方法も試したのですが、ズームすると微妙に1pixelずつずれたり他にも色々問題があってうまくできませんでした。 GetDrawScreenGraph関数を使って、こういったズーム処理をするのは無謀なのでしょうか?何か使い方が間違っているのでしょうか? あるいは、他の方法を用いて、今映っている(映す予定の)画面を拡大縮小することはできるでしょうか?

Page: 1 |

Re: GetDrawScreenGraphを使用してのズーム ( No.1 )
名前:いっち 日時:2011/02/09 21:34

GetDrawScreenGraph は使用しないほうが良いです。 以下のような手順で実現可能だと思います。 1)MakeGraph でオリジナルサイズ(640x480?)のバックバッファを作成する 2)バックバッファに拡大縮小前の描画をすべて行う 3)描画後のバックバッファをソースにして DrawRectExtendGraph で画面に描画する
Re: GetDrawScreenGraphを使用してのズーム ( No.2 )
名前:B/B(解決) 日時:2011/02/10 21:34

いっちさんありがとうございます。 いっちさんのおっしゃるようにMakeGraphで作ったグラフィックハンドルに描画をしようとしたのですが、調べた結果、 デフォルトのままでは自分で作ったグラフィックハンドルは描画先には指定できないようでしたので SetDrawValidGraphCreateFlag( TRUE ); Screen = MakeGraph(WIN_X , WIN_Y); SetDrawValidGraphCreateFlag( FALSE ); あるいはこの3つをまとめたMakeScreen関数を使って Screen = MakeScreen(WIN_X , WIN_Y); をゲームループ外で行い、またゲームループ内の最後に、 SetDrawScreen( DX_SCREEN_BACK ) ; DrawRotaGraph( WIN_X/2 , WIN_Y/2 , 2.0f , 0 , Screen , FALSE ) ; ScreenFlip() ; SetDrawScreen( Screen ) ; とすることで、処理落ちせずに画面を2倍に拡大した画像が表示されました。 ありがとうございました。

Page: 1 |