2015-07-01 32 views
0

我想打個比分反超,但是當我使用計時器,它的方式太慢獲得高價值和它的最大間隔爲1。參考代碼:請在vb.net一個比分反超

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
    y = y + 2 
    ShowScore() 
    If y = Game2048.ScoreLabel.Text Then 
     Label18.Hide() 
     Label19.Show() 
     Timer1.Stop() 
     Timer2.Start() 
    End If 
End Sub 

正如你所看到的,如果Game2048.ScoreLabel.Text的值是60,000,並且Timer1間隔是1,則需要10分鐘以上才能達到60,000。所以我想知道是否有一種方法可以在計數分數時減少達到60,000的時間,這與在幾場比賽中能夠在僅僅10秒內計數得分的能力相同,當得分更高時,它增加的數量會更大。任何人都可以幫助我?謝謝!

* 60,000的值可能會改變!

+0

您可以增加每個Tick事件添加到樂譜的點數或減少每個tick事件之間的時間間隔。 –

+0

假設你不想加速定時器,最快和最簡單的解決方案只是將'y'值增加一個「ScoreLabel」值的百分比:'y = y + Integer.Parse(Game2048.ScoreLabel .Text)* 0.10' –

+0

您不會得到1毫秒的時間間隔。最小的實際值是15,實際的蜱發生在15.625毫秒。使用時鐘測量實際使用時間,在啓動計時器時存儲DateTime.UtcNow。實際的定時器時間間隔並不重要,只需使其足夠小以使更新看起來平滑即可。 45就夠了。 –

回答

0

你的速度已經快於用戶界面可以更新的速度了,這已經比人眼可以追蹤的速度快了。你最終還會以這個速度把大量的cpu循環投入到無意義的udpates。

你想要做的就是將tick值設置爲從觀看櫃檯的人的角度合理快速的事情。 250ms(每秒4次)的跳動速度應該足夠快,任何超過100ms(每秒10次)的速度都是浪費。

現在您可以調整代碼來計算您想要更新的位置。如果你想在10秒內計數到60,000,每秒更新4次,那麼你有40次更新,所以只需將你的y值設置爲1500而不是2。或者,甚至更好,計算飛行中的速率:

'Set tick rate to 250 
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
    y += CInt(Game2048.ScoreLabel.Text)/timer1.Interval/6 
    ShowScore() 
    If y >= Game2048.ScoreLabel.Text Then 
     Label18.Hide() 
     Label19.Show() 
     Timer1.Stop() 
     Timer2.Start() 
    End If 
End Sub