0

Visual Studio 2010でC#を使用してバウンスするロゴスクリーンセーバーを作成しています。私は今日までC#で書いたことがないので、高度な知識がないことをお詫びします。PictureBoxを使用して画像をフォームにインポートしています。PictureBoxの境界を見つけて、画面の境界と比較できるようにする方法はありますか(screen.Bounds for screen bordersを使用)?私が言ったように、私はこれまでC#でプログラミングしたことがないので、他にどのような詳細が必要になるかわかりません。私に知らせてください、そして私は私ができることは何でも我慢します。ありがとうございました。

編集:私のbounceメソッドはパブリック部分クラスScreensaverFormで書かれています。フレームは静的クラスProgramにあります。bounceメソッドでの境界チェックはif(picturebox.Bounds.Bottom == this.Bounds.Bottom)です。これは境界をチェックしているように見えますが、境界はフレームの境界ではありません。フレーム属性を呼び出すにはどうすればよいですか?

4

3 に答える 3

1

私が何かを逃していない限り。

Screenboundsをとして取得しRectangleます。

screenrectangle.Contains(new Rectangle(MyPictureBox.Location, MyPictureBox.Size))

すべてが画面に表示されている場合は、trueになります。

于 2012-03-02T17:57:50.513 に答える
0

ピクチャーボックスはフォームに表示されます。ピクチャーボックスには、それが含まれているフォームに関連する上、左、右、および下の値を提供する境界があります。そこから、左上隅が0,0であると仮定して、フォームの幅と高さのプロパティを使用して、画像ボックスが完全にフォーム内にあるかどうかを簡単に計算できます。ピクチャーボックスを移動するときは、これから行う移動によってピクチャーボックスがフォーム内に保持されることを確認します。

于 2012-03-02T17:49:47.180 に答える
0

トニーの優れた提案に加えて、衝突の処理方法について説明したいと思います。

境界は4つあるので、確認すべき状況は4つあります。

水平方向と垂直方向のバウンスを同時に行うことができます!したがって、水平方向と垂直方向の速度を個別に追跡します。水平方向のバウンスは水平方向の動きにのみ影響します。

さらに、オブジェクトが一度に複数のピクセルを移動する場合、正確なヒットが表示されない場合があります。(ボックスのx座標が0ではなく1から-1に直接移動するように。したがって、onをテストするだけでなく、境界が境界上にあるか境界を超えているかをテストする必要があります。

また、特定の境界に向かって移動するときにのみ衝突をチェックすることをお勧めします。そうしないと、移動するたびに同じエッジに衝突するため、ウィンドウが動かなくなる可能性があります。

于 2012-03-02T19:55:43.023 に答える