10

私はC#でのプログラミングの初心者で、ピンポンゲームをやっています。私はスレッドを使用しています.1つは衝突用、もう1つは移動用、もう1つはペイント用です。

私の質問は、私がスチームを開くと、なぜプログラムがより速く実行されるのかということです:D私にはナンセンスのように思えます。プロセッサが作業を怠っているように見えます。それはリアルタイムで起こっています - 私はゲームを開きます、それは遅いです、私はスチームを開きます、それは速くなります、そして私はスチームを閉じます、そしてそれは再び遅くなります.

私が最初に考えたのは、それはデュアル グラフィックス カードであるが、nvidia カードを使用するようにしても効果がないためであるということでした。

別の状況: ゲームを開く - 遅い、スカイプを開く - ゲームが速い、スカイプが読み込まれている - ゲームが遅い、スカイプを閉じる - ゲームが速い、スカイプを閉じる - ゲームが遅い..

ゲームが常に同じプロセッサを使用するようにする方法は?

私のコード私はメソッドを移動します

    public void move()
    {
        DelegateSetScore d = new DelegateSetScore(SetScore);

        while (!isDisposing)
        {
            pad1.Y = pad1.Y + 4 * pad1Down + 4 * pad1Up;
            if (pad1.Y < 0) { pad1.Y = 0; }
            if (pad1.Y + pad1.Height > HEIGHT) { pad1.Y = HEIGHT - pad1.Height; }

            pad2.Y = pad2.Y + 4 * pad2Down + 4 * pad2Up;
            if (pad2.Y < 0) { pad2.Y = 0; }
            if (pad2.Y + pad2.Height > HEIGHT) { pad2.Y = HEIGHT - pad2.Height; }

            ball.X = ball.X + 6 * ballXDirection;
            ball.Y = ball.Y + 2 * ballYDirection;

これは、境界線とスコアのカウントとの衝突に関するコードです...そしてそれとwaiteventとのコードです。

            waitevent.WaitOne(5);

プロセッサの自動オーバークロックが原因だと思いますが、私は初心者です.. :D

これが1つのスレッドのすべてです

    public void bigthread()
    {

        DelegateSetScore d = new DelegateSetScore(SetScore);

        while (!isDisposing)
        {
            //move

            pad1.Y = pad1.Y + 4 * pad1Down + 4 * pad1Up;
            if (pad1.Y < 0) { pad1.Y = 0; }
            if (pad1.Y + pad1.Height > HEIGHT) { pad1.Y = HEIGHT - pad1.Height; }

            pad2.Y = pad2.Y + 4 * pad2Down + 4 * pad2Up;
            if (pad2.Y < 0) { pad2.Y = 0; }
            if (pad2.Y + pad2.Height > HEIGHT) { pad2.Y = HEIGHT - pad2.Height; }

            ball.X = ball.X + 6 * ballXDirection;
            ball.Y = ball.Y + 2 * ballYDirection;

            if (ball.X < 0)
            {
                ballXDirection = 1;
                intScorePlayer2++;
                this.BeginInvoke(d, intScorePlayer2, 2);
            }

            if (ball.X + ball.Width > WIDTH)
            {
                ballXDirection = -1;
                intScorePlayer1++;
                this.BeginInvoke(d, intScorePlayer1, 1);
            }

            if (ball.Y < 0)
            {
                ballYDirection = 1;
            }

            if (ball.Y + ball.Height > HEIGHT)
            {
                ballYDirection = -1;
            }

            //collision

            if ((pad1.X + pad1.Width > ball.X) && (ball.X + ball.Width > pad1.X))
                if ((pad1.Y + pad1.Height > ball.Y) && (ball.Y + ball.Height > pad1.Y))
                {
                    ballXDirection = 1;
                    if (pad1Down == 1) { ballYDirection = 1; }
                    if (pad1Up == -1) { ballYDirection = -1; }
                }

            if ((pad2.X + pad2.Width > ball.X) && (ball.X + ball.Width > pad2.X))
                if ((pad2.Y + pad2.Height > ball.Y) && (ball.Y + ball.Height > pad2.Y))
                {
                    ballXDirection = -1;
                    if (pad2Down == 1) { ballYDirection = 1; }
                    if (pad2Up == -1) { ballYDirection = -1; }
                }

            //paint - platno is graphics from picturebox
            Platno.Clear(Color.Black);
            Platno.FillRectangle(Brushes.Orange, pad1);
            Platno.FillRectangle(Brushes.Orange, pad2);
            Platno.FillRectangle(Brushes.Green, ball);

            waitevent.WaitOne(10);
        }
    }
4

3 に答える 3

2

これは、プロセッサが電源状態を切り替えることが原因である可能性があります。アプリと Skype/Steam を開いたり閉じたりしている間、 CPU-Zを開いたままにして、プロセッサに何が起こるかを観察してください。

于 2013-05-10T19:33:26.827 に答える