1

Delphi のキャンバスに基づいて小さなゲームを作ろうとしています。基本的にはかなり大きなビットマップ(例えば3000x3000)を作ってキャンバスに読み込んで、普通の画像ビューアと同じように上下左右にスクロールできるようにしたいのですが、できません。私が探しているものを見つけるようです。何か案は?

4

1 に答える 1

4

オフスクリーンTBitmapオブジェクトにイメージを読み込みます。次に、OnPaintまたは が特定のアプリケーションに適している場合はいつでも、 または を使用BitBltCanvas.Drawて、 の長方形のサブイメージをTBitmapキャンバスに描画します。サブパートは で開始し(X, Y)TBitmap幅と高さはそれぞれフォームClientWidthと同じである必要があります。ClientHeight

次に、キーボード イベントに応答します。FormKeyDownイベント ハンドラを作成しKey = VK_LEFTKey = VK_RIGHT、 、Key = VK_UP、およびKey = VK_DOWN(caseステートメントを使用) をリッスンします。Xこのようなキーが押されたことを検出したら、必要に応じてまたはを増減しY、この開始点を使用してシーンを再度ペイントします。

MouseDownMouseMove、およびイベントに応答してMouseUp、マウスを使用してスクロールすることもできます。中央のみを使用することもできます ( MouseMove): カーソルがフォームの端に近いかどうかを確認し、そうであれば、この方向にスムーズにスクロールします (TTimerたとえば、を使用)。または、FMouseDownフラグをtrueinに設定し、 inMouseDownにリセットすることもできます。次に、 で、 が の場合はx 方向に 1 デルタ、y 方向に 1 デルタだけビットマップをスクロールします。(ここで、とはイベント ハンドラーのパラメーターです。はカーソルの現在の位置です。)手順は次で終了する必要があります。falseMouseUpMouseMoveX-XOldFMouseDowntrueY-YOldXYMouseMove(X, Y)MouseMove

XOld := X;
YOld := Y;

FMouseDownオンでもオフでも構いません。

于 2010-09-14T19:27:51.940 に答える