2012-04-08 8 views
0

私はこの小さなアプリケーションを見つけました。円でイメージを単純に回転させたいのですが、私は疑問に思っていましたか?または全体の画像をちょうど上下に跳ね返させる、このプログラムを変更するにはどうすればいいですか?私が試したことはすべて、イメージを伸ばすだけです - たとえそれが左または右に動くようになっても。私は何をすることができますか?コードは、だから私はあなたが達成しようとしているのか分からないけど、邪魔にfundiesを得るために、リサイズはGDI +ライブラリであり、そのGUIのもののためのより多くのもの動いているイメージが跳ね返るか、円で回転する

public partial class Form1 : Form 
    { 
      private int width = 15; 
      private int height = 15; 

      Image pic = Image.FromFile("402.png"); 
      private Button abort = new Button(); 
      Thread t; 

      public Form1() 
      { 
      abort.Text = "Abort"; 
      abort.Location = new Point(190, 230); 
      abort.Click += new EventHandler(Abort_Click); 
      Controls.Add(abort); 

      SetStyle(ControlStyles.DoubleBuffer| ControlStyles.AllPaintingInWmPaint| ControlStyles.UserPaint, true); 

      t = new Thread(new ThreadStart(Run)); 
      t.Start(); 
      } 
      protected void Abort_Click(object sender, EventArgs e) 
      { 
      t.Abort(); 
      } 

      protected override void OnPaint(PaintEventArgs e) 
      { 
      Graphics g = e.Graphics; 
      g.DrawImage(pic, 10, 10, width, height); 
      base.OnPaint(e); 
      } 

      public void Run() 
      { 

       while (true) 
       { 
       for(int i = 0; i < 200; i++) 
       { 
        width += 5; 

        Invalidate(); 
        Thread.Sleep(30); 
       } 

       } 
      } 
    } 
+0

もう少しわかりやすいようにする必要があります。 あなたはコードダンプして、誰かがあなたのものを理由に推測することはできません。あなたは何のために行くのですか?あなたは何をしていませんでしたか?等 –

+1

どのような意味で具体的ですか?私はちょうど画像をロードしています..そして、私はちょうどサークル内の画像全体を移動したいです...または、全体の画像を上下に移動させてください。むしろ現在はズームするズームインです。 – BigBug

+0

イメージを円運動で瞬時に翻訳し、回転させ、時間の経過とともに円の中を徐々に動かしたいと思っていますか? 「円で動く」と「バウンス」は少し曖昧です。また、何をしようとしているのが間違っているのですか?あなたはアニメーションをやろうとしていますよね?徐々に –

答えて

1

を下回っているので、のようなものアニメーションはおそらくSFMLのようなグラフィックスライブラリによって良く処理されます。

とにかく、あなたが望むものを達成するために何百万もの方法があります。円で何かを動かすという点では、ちょっとしたトリグが必要です。バウンス運動の場合、私はサインカーブに従うのが最も簡単な方法だと言います。

ここではいくつかの擬似コードは、バウンスのために(これは構文完璧であるかどうかわからない)です。

フィールド定義:

private double frame = 0; 

のOnPaint:

Graphics g = e.Graphics; 
g.DrawImage(pic, 10, 10 + Math.sin(frame)*10, width, height); 
frame+=.01; 
base.OnPaint(e); 

この方法では、毎回ペイントイベントがトリガされ、tは0.01ラジアン増加します。罪には-1と1の間で振動する領域があり、その跳ね返りの効果を得るには10倍に掛けることができます。

フレームは「キーフレーム」を表します。速度を上げたい場合は、frame+=__を高い値に増やしてください。範囲を広げたい場合は、オフセットを変更してください。Math.sin(frame)*__

+0

ありがとう、それはかなりクールです。それは働くようになった。 :) – BigBug

関連する問題