2017-01-12 10 views
1

現在書いているコードでは、フォームの端にボタンを表示するタイマーがあります。私はボタンが画面の中央に向かって動くようにしたいと思います - 小惑星を考えてください。しかし、それをどうやって作るのか分かりません。助けをあらかじめありがとう!これまでのところ 私のコード:タイマでコード中に作成されたボタンを移動する方法

private void timer1_Tick(object sender, EventArgs e) 
    { 
     Timer newtimer = new Timer(); 
     newtimer.Interval = 100; 
     newtimer.Start(); 





     Button enemybutton = new Button(); 
     int sidepick = rnd.Next(1, 5); 
     if(sidepick == 1) 
     { 
      enemybutton.Left = rnd.Next(1, 15); 
      enemybutton.Top = rnd.Next(1, 700); 
     } 

     else if (sidepick == 2) 
     { 
      enemybutton.Left = rnd.Next(1, 1000); 
      enemybutton.Top = rnd.Next(1, 15); 
     } 

     else if (sidepick == 3) 
     { 
      enemybutton.Left = rnd.Next(1,1315); 
      enemybutton.Top = rnd.Next(650,665); 
     } 
     if (sidepick == 4) 
     { 
      enemybutton.Left = rnd.Next(1300,1315); 
      enemybutton.Top = rnd.Next(1,650); 
     } 
     enemiesSpawned++; 
     if(enemiesSpawned == levelsBeat) 
     { 
      levelsBeat++; 
      enemiesSpawned = 0; 
      timer1.Stop(); 
     } 


     enemybutton.Height = 64; 
     enemybutton.Width = 64; 
     Controls.Add(enemybutton); 

    } 
+0

タイマーは、ダニイベントハンドラ内で決して作成/開始しないでください。どんなイベントでコントロールを動かしたいですか?どのくらい速くコントロールを移動したいですか? – tinstaafl

答えて

0

私は、今後の参考のためにList内のすべての生成されたボタンを収集することをお勧め。

Random rnd = new Random(); 
List<Button> ButtonList = new List<Button>(); 
private void timer_spawn_Tick(object sender, EventArgs e) 
{ 

    Button enemybutton = new Button(); 
    enemybutton.Click += Enemybutton_Click; 

    int sidepick = rnd.Next(1, 5); 

    switch (sidepick) 
    { 
     case 1: 
      enemybutton.Left = rnd.Next(1, 15); 
      enemybutton.Top = rnd.Next(1, 700); 
      break; 
     case 2: 
      enemybutton.Left = rnd.Next(1, 1000); 
      enemybutton.Top = rnd.Next(1, 15); 
      break; 
     case 3: 
      enemybutton.Left = rnd.Next(1, 1315); 
      enemybutton.Top = rnd.Next(650, 665); 
      break; 
     case 4: 
      enemybutton.Left = rnd.Next(1300,1315); 
      enemybutton.Top = rnd.Next(1, 650); 
      break; 
     default: 
      break; 
    } 

    enemybutton.Height = 64; 
    enemybutton.Width = 64; 
    Controls.Add(enemybutton); 

    ButtonList.Add(enemybutton); 

    enemiesSpawned++; 
    if(enemiesSpawned == levelsBeat) 
    { 
     levelsBeat++; 
     enemiesSpawned = 0; 
     timer1.Stop(); 
    } 

} 

次にあなたが可動部のための第二のタイマを使用し、それらを移動するListのボタンにアクセスすることができます。

private void timer_move_Tick(object sender, EventArgs e) 
{    
    foreach (var button in ButtonList) 
    { 
     button.Location = CalculateMove(button.Location); 
    } 
} 

private Point CalculateMove(Point currentLocation) 
{ 
    Point center = new Point(this.Width/2, this.Height/2); 
    Point moveDestination = new Point(); 
    int stepsize = 20; 

    moveDestination.X = currentLocation.X < center.X ? currentLocation.X + stepsize : currentLocation.X - stepsize; 
    moveDestination.Y = currentLocation.Y < center.Y ? currentLocation.Y + stepsize : currentLocation.Y - stepsize; 

    return moveDestination; 
} 

これは非常に簡単な移動計算です。しかし、単純に動かすために、それは動作します。あなたは私が推測するより良いものを試すことができます。

関連する問題