已答覆 有關temp變數的作用的問題

  • 2012年1月28日 上午 03:28
     
     

    各位前輩大家好,小弟在研習MSDN邊做邊學的XNA部分的範例(桌球遊戲那個)時遇到了一個問題,先將程式碼片段摘錄如下:

    if (ball.Position.X < 0 || ball.Position.X > width - ball.Texture.Width)
                {
                    Vector2 temp = ball.Position;
                    // 如果球是碰到左邊的邊界,則玩家二的比數增加
                    if (ball.Position.X < 0)
                    {
                        temp.X = 0;
                        ball.Position = temp;
                        m.Player2++;
                    }
                    // 如果球是碰到右邊的邊界,則玩家一的比數增加
                    if (temp.X > width - ball.Texture.Width)
                    {
                        temp.X = width - ball.Texture.Width;
                        m.Player1++;
                    }

                    // 重新發球
                    ball.Position = new Vector2(width / 2, height / 2);
                    ball.V = Vector2.Zero;
                    gameStart();
                    // 播放音效
                    sound.play_Sound();
                }

    小弟有以下幾點不太明白:

    (1) 變數temp是否必要, 主要起什麼作用?

    (2) 為甚麼"if (ball.Position.X < 0)"中:

    temp.X = 0;
    ball.Position = temp;
    而在"if (temp.X > width - ball.Texture.Width)"中:

    temp.X = width - ball.Texture.Width;
    並沒有寫ball.Position = temp;希望各位前輩們不吝賜教,小弟在此感激不盡.

所有回覆

  • 2012年1月28日 上午 05:42
     
     
    沒有看到原文的網址?
  • 2012年1月28日 上午 07:36
     
     

    原文的網址是http://msdn.microsoft.com/zh-tw/xna/ee348580.aspx

    上面有提供程式碼的下載.

    麻煩前輩了.

  • 2012年1月29日 上午 06:22
     
     已答覆

    1) temp好像只是用來記錄Ball的位置的變數, 因為記錄Ball位置的變數的內容值會改變

    2) 以下的程式碼中的ball.Position = temp好像可以省略, 因為重新發球時就會重設ball.Position

     if (ball.Position.X < 0)
                    {
                        temp.X = 0;
                        ball.Position = temp;
                        m.Player2++;
                    }

    所以temp變數好像可以不用, 直接判斷ball.Position是否小於0, 或是大於width - ball.Texture.Width即可, 不過我沒有將程式拿來編譯看看, 所以僅止於臆測而已

    • 已標示為解答 卓君文 2012年1月31日 下午 01:30
    •  
  • 2012年1月31日 下午 01:34
     
     

    感謝您抽出時間來為小弟解惑, 小弟會按照前輩關於省略temp的做法進行實驗並即時在此帖回報具體編譯情況.

    再次感謝this前輩的熱心解答, 祝您新年愉快, 萬事如意.