0

私は糸脱毛を学び始めており、問題に遭遇しました。

一時的なaddedPoints変数にポイントを追加して、最近獲得したポイント数をプレーヤーに示すように設計されたスコアリングシステムがあります。次に、約1秒後に、追加されたポイントがプレーヤーのスコアに追加されます。

私の試みは次のようになります:

public static void AddPoints(int points)
{
    for (int i = 0; i < points; i++)
    {
        Thread addThread = new Thread(new ThreadStart(ThreadedPoint));
    }
}

private static void ThreadedPoint()
{
    addedPoints += 1;
    Thread.Sleep(1000);
    score += 1;
    addedPoints -= 1;
}

これには2つの問題があります。まず、スレッドごとに1ポイントしか追加できませんが、これは理想からはほど遠いものです。第二に、それは実際には機能しません。addPointsもスコアも更新されません。どうすればこれを修正できますか?

4

3 に答える 3

8

実際にスレッドを開始していないため、何も起こりません。

public static void AddPoints(int points)
{
    for (int i = 0; i < points; i++)
    {
        Thread addThread = new Thread(new ThreadStart(ThreadedPoint));
        addThread.Start();
    }
}

一度に1つではなく、一度に複数のポイントを追加するという点では、代わりにParameterizedThreadStartを使用できます。

public static void AddPoints(int points)
{
   Thread addThread = new Thread(new ParameterizedThreadStart(ThreadedPoint));
   addThread.Start(points); //You may need a cast of points to Object here
}

private static void ThreadedPoint(Object data)
{
    int points = (int)data;
    addedPoints += points;
    Thread.Sleep(1000);
    score += points;
    addedPoints -= points;
}
于 2012-04-24T20:00:34.257 に答える
2

スレッド化を学びたいのでなければ、遅延更新を必要としないように、ストアが「最近稼いだ」方法を再設計したほうがよいでしょう。

つまり、スコアをすぐに更新し、最新のポイントがいつ獲得されたかを示す別のファイルを用意しているので、いつでもスコアを取得でき、コードを使用して「最近獲得した」情報を把握できます。必要に応じて、スコアの表示値を「最近獲得した」で調整できます。

于 2012-04-24T20:21:42.637 に答える
0

ポイントをゆっくりと消費したい場合は、ポイントをスレッドに渡し(Javaスレッドにパラメーターを渡す方法を参照)、whileループを使用してすべてのポイントを消費します(渡されたパラメーターをポイントとして格納すると仮定します)。 。

while(points > 0) {
  points -=1;
  addedPoints += 1;
  Thread.Sleep(1000);
  score += 1;
  addedPoints -= 1;
}
于 2012-04-24T20:05:34.523 に答える