Delphi のキャンバスに基づいて小さなゲームを作ろうとしています。基本的にはかなり大きなビットマップ(例えば3000x3000)を作ってキャンバスに読み込んで、普通の画像ビューアと同じように上下左右にスクロールできるようにしたいのですが、できません。私が探しているものを見つけるようです。何か案は?
1 に答える
オフスクリーンTBitmap
オブジェクトにイメージを読み込みます。次に、OnPaint
または が特定のアプリケーションに適している場合はいつでも、 または を使用BitBlt
しCanvas.Draw
て、 の長方形のサブイメージをTBitmap
キャンバスに描画します。サブパートは で開始し(X, Y)
、TBitmap
幅と高さはそれぞれフォームClientWidth
と同じである必要があります。ClientHeight
次に、キーボード イベントに応答します。FormKeyDown
イベント ハンドラを作成しKey = VK_LEFT
、Key = VK_RIGHT
、 、Key = VK_UP
、およびKey = VK_DOWN
(case
ステートメントを使用) をリッスンします。X
このようなキーが押されたことを検出したら、必要に応じてまたはを増減しY
、この開始点を使用してシーンを再度ペイントします。
MouseDown
、MouseMove
、およびイベントに応答してMouseUp
、マウスを使用してスクロールすることもできます。中央のみを使用することもできます ( MouseMove
): カーソルがフォームの端に近いかどうかを確認し、そうであれば、この方向にスムーズにスクロールします (TTimer
たとえば、を使用)。または、FMouseDown
フラグをtrue
inに設定し、 inMouseDown
にリセットすることもできます。次に、 で、 が の場合はx 方向に 1 デルタ、y 方向に 1 デルタだけビットマップをスクロールします。(ここで、とはイベント ハンドラーのパラメーターです。はカーソルの現在の位置です。)手順は次で終了する必要があります。false
MouseUp
MouseMove
X-XOld
FMouseDown
true
Y-YOld
X
Y
MouseMove
(X, Y)
MouseMove
XOld := X;
YOld := Y;
FMouseDown
オンでもオフでも構いません。