0

私は、ボールが放物線をたどる非常に基本的なプログラムに取り組んでいます。私の考えは、タイマーを特定の間隔で刻むように設定し、時間を変数として設定することです。これを方程式で使用します。これは x 値にもなります。

イベント timer_Tick を作成しました。タイマーが刻むたびに X の値を増やすにはどうすればよいですか?

4

4 に答える 4

3

elapsedTimeイベント ハンドラの呼び出し間で値を格納するには、クラス フィールド (例: ) を作成する必要があります。

private int elapsedTime; // initialized with zero
private Timer timer = new System.Windows.Forms.Timer();

public static int Main() 
{
    timer.Interval = 1000; // interval is 1 second
    timer.Tick += timer_Tick;
    timer.Start();
}

private void timer_Tick(Object source, EventArgs e) {
    elapsedTime++; // increase elapsed time 
    DrawBall();
}
于 2013-05-29T12:49:42.947 に答える
3

これはあなたの質問に対する直接的な回答ではありませんが、参考になるかもしれません。

Reactive Extensions を使用する (コンソール アプリを作成し、Nuget パッケージ "Rx-Testing" を追加する) とはまったく異なる方法であり、テスト目的に役立つ時間を仮想化する方法も示します。時間を自由にコントロールできます!

using System;
using System.Reactive.Concurrency;
using System.Reactive.Linq;

namespace BallFlight
{
    class Program
    {
        static void Main()
        {
            var scheduler = new HistoricalScheduler();
            // use this line instead if you need real time
            // var scheduler = Scheduler.Default;

            var interval = TimeSpan.FromSeconds(0.75);

            var subscription =
                Observable.Interval(interval, scheduler)
                          .TimeInterval(scheduler)
                          .Scan(TimeSpan.Zero, (acc, cur) => acc + cur.Interval)
                          .Subscribe(DrawBall);

            // comment out the next line of code if you are using real time
            // - you can't manipulate real time!
            scheduler.AdvanceBy(TimeSpan.FromSeconds(5));

            Console.WriteLine("Press any key...");
            Console.ReadKey(true);

            subscription.Dispose();
        }

        private static void DrawBall(TimeSpan t)
        {
            Console.WriteLine("Drawing ball at T=" + t.TotalSeconds);
        }
    }
}

出力は次のとおりです。

Drawing ball at T=0.75
Drawing ball at T=1.5
Drawing ball at T=2.25
Drawing ball at T=3
Drawing ball at T=3.75
Drawing ball at T=4.5
Press any key...
于 2013-05-29T20:06:13.857 に答える
1
private int myVar= 0;//private field which will be incremented

void timer_Tick(object sender, EventArgs e)//event on timer.Tick
{
            myVar += 1;//1 or anything you want to increment on each tick.
}
于 2013-05-29T12:47:41.420 に答える
0

最初に、変数は「クラススコープ」であるメソッドの外で宣言する必要があります

tick イベント メソッドでは、x = x + 値または x += 値のみを使用できます。tick イベントはティックの数を示していないことに注意してください。そのため、これも追跡するために 2 番目の変数が必要になる可能性があります。

于 2013-05-29T12:49:00.907 に答える