2009-04-19 15 views
0

WinFormで画面上のオブジェクトをどのように動かすことができますか?画面上でオブジェクトを移動する方法

私は右を押す - 私は<を左に押したときに、私は他の矢印にキー

を押しますまで>オブジェクトが右に移動します - 私は、他の矢印キーを押しますまで、オブジェクトは左に移動します

オブジェクトは、すべての時間が

感謝の事前

+0

あなたの質問をよりよく反映するように件名を変更してください。 winformsタグを追加してください。私はあなたのためにそれをすることができましたが、今は本当によく分かるはずです。 –

答えて

0

にあなたが元々の単一プレスで開始運動の方向を継続するためにゲームループを必要とする(スネークゲームのように)の動きになりますaボタン。

1

Formから継承し、OnPaintメソッドをオーバーライドします。再塗りを強制するたびに、毎回Invalidate()にする必要があります。これにより、簡単なゲームループが設定され、画面をすばやく更新できます。

OnPaintメソッドでは、最後にOnPaintメソッドが呼び出されてから最後に押された時間からどれくらいの時間が経過したかに基づいてオブジェクトの位置を更新します。あなたは、おそらく次のように速度を使用して行います:

newPosition = oldPosition + (elapsedTime * velocity) 

速度の値は、あなたが(すなわち、左用負右用正)を押したキーに基づいて変更されます。また、変数が水平か垂直かを追跡するために変数とコードが必要になります。

これは、これを達成するのに非常に低いパフォーマンスの方法です(つまり、ハックです)。あなたがWindowsに固執したいが、あまり働かなくてもより良いパフォーマンスを得るには、XNAを調べるかもしれない。パフォーマンスがさらに向上し、より多くの作業を行う場合は、DirectXとWin32 APIを使用してInteropを調べるか、すべてを切り替えてください。

0

キャプチャキーは、オブジェクトの座標を調整します。

0

2Dでこれを行うと仮定すると、それぞれの矢印キーを押しながら適切に設定するxとyの変更係数を設定できます。次に、希望のレートで位置を更新するタイマーを設定します。タイマーが刻々と変化すると、x/y変化要因でオブジェクトの位置を調整します。

0
enum position 
    { 
     Left,Right,up,down 
    } 
    private int _x; 
    private int _y; 
    private position _objposition; 
    public Form1() 
    { 
     InitializeComponent(); 
     _x = 50; 
     _y = 50; 
     _objposition = position.down; 
    } 

    private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.FillRectangle(Brushes.DarkSlateBlue,_x,_y,100,100); 
    } 

    private void timertick_Tick(object sender, EventArgs e) 
    { 
     if (_objposition == position.Right) 
     { 
      _x += 10; 
     } 
     else if (_objposition == position.Left) 
     { 
      _x -= 10; 
     } 
     else if (_objposition == position.up) 
     { 
      _y -= 10; 
     } 
     else if (_objposition == position.down) 
     { 
      _y += 10; 
     } 
     Invalidate(); 
    } 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Left) 
     { 
      _objposition =position.Left; 
     } 
     else if (e.KeyCode == Keys.Right) 
     { 
      _objposition = position.Right; 
     } 
     else if (e.KeyCode == Keys.Up) 
     { 
      _objposition = position.up; 
     } 
     else if (e.KeyCode == Keys.Down) 
     { 
      _objposition = position.down; 
     } 
    } 
} 

これにより、50X50サイズの矩形が作成されます。デフォルトでは、私はそのボックスの位置を下向きに設定します。しかし、あなたが何かキーを押すと、例えば: - 左の矢印キーを押すと、キーイベントが発生し、ボックスの位置が左に向かい、ボックスが動き始めます別のキーが押されるまで左に移動

+0

この回答が現在の問題を修正する際にOPを助ける方法について、いくつかの説明を追加してください –

関連する問題