2011-02-01 18 views
2

PictureBoxの形式で画像を移動するアプリケーションを作成しました。しかし、私のコードは水平方向に移動するだけです...私は1つのタイマーを使いました。Cで画像を移動する際の問題#

最初の点(たとえばX0、Y0)から正確な位置(たとえば(Xc、Y0))に画像を水平に移動し、上下に移動して(Xc、Ym)それを水平に戻して(Xf、Ym)に達する。私は(Xcを、Y0)を達するために水平に画像を移動するが、私は他の人の書き方を知らない一部...

ここでは、(へ(X0、Y0)から移動私のコードであることを書かれている

XC、Y0):

public partial class Form1 : Form 
{ 
    void timer_Tick(object sender, EventArgs e) 
    { 
     int x = pictureBox1.Location.X; 
     int y = pictureBox1.Location.Y; 

     pictureBox1.Location = new Point(x + 2, y); 

     if (x > 500) 
      timer1.Stop(); 
    } 

    public Form1() 
    { 
     InitializeComponent(); 

     pictureBox1.ImageLocation = "1.png"; 
     pictureBox1.Size = new Size(36, 35); 

     timer1.Interval = 15; 

     timer1.Start(); 
     timer1.Tick += new EventHandler(timer_Tick); 

    } 
} 

はほかに、私はいくつかの試みをしましたしましたが、どんな結果を取得できませんでした...ここで

は私の試み(メソッドtimer_Tickを変更しようとする)である。

void timer_Tick2(object sender, EventArgs e) 
    { 
     int x = pictureBox1.Location.X; 
     int y = pictureBox1.Location.Y; 

     if (x <= 500) 
      pictureBox1.Location = new Point(x + 2, y); 

     if (x > 500) 
     { 
      if (y <= 250) 
      pictureBox1.Location = new Point(x, y + 1); 

      if (y == 250) 
      { 
       pictureBox1.Location = new Point(x - 2, y); 
       if (x < 50) 
        timer1.Stop(); 
      } 

     } 
    } 

してください人が

+0

時間ごとに新しい変数* t *を作成することをお勧めします。あなたはそれからxとyを計算し、それはおそらくもっと明確になります。 – Justin

+0

@ジャスティン - もっと説明できますか? –

答えて

1

キーではなく、あなたのキーとしてXよりも時間を使用することです...私はこれを完了するのに役立ちます。

int t = 0; 

void timer_Tick1(object sender, EventArgs e) 
{ 
    t++; 

    int x = pictureBox1.Location.X; 
    int y = pictureBox1.Location.Y; 

    if (t <= 250)//go right 500 in 250 ticks 
     pictureBox1.Location = new Point(x + 2, y); 
    else if (t <= 500)//...then go down 250 in 250 ticks 
     pictureBox1.Location = new Point(x, y + 1); 
    else if (t <= 750)//...then go left 500 in 250 ticks 
     pictureBox1.Location = new Point(x - 2, y); 
    else 
     timer1.Stop(); 
} 

ので、あなたが戻っX0への道上のxをデクリメントしようとすると最初のifブロックに戻ります。

+0

@ Eric Mickelsen-助けてくれてありがとう...私は最初に「ブロックしたら」と思った。しかし、私はあなたのアドバイスを完全に理解していない、あなたのコードを完了してくださいできますか? –

+0

@thehero:もっとコードを編集しました。私はあなたの思考と一直線になるように、新しい点を前の点で定義することに決めました。純粋にtの点でポイントを定義することも可能です(これはおそらくよりよいアプローチです)。あなたのモーションが同じポイントを2度越えることはないので、tを導入することなくコードを修正することも可能ですが、この方法が優れています。 –

+0

@ Eric Mickelsen-ありがとう、私は今あなたのコードをテストしましたが、画像はちょうど右に移動してそこに止まります...どこに問題がありますか? –

関連する問題