我有一個問題,我不知道如何解釋,但我會嘗試......例如,在一些遊戲中,文本輸出是「慢」,一個接一個地寫char,而不是所有的短語在一次...所以,我怎麼能複製這種行爲?「減速」輸出
我想這樣...我可以做一個循環,並在那裏我寫一個字符,並休眠1毫秒,寫一個字符和睡着,等等......有另一種方式,或者這是唯一/最佳/簡單的方式我可以實現這個訣竅?我試圖用C++來做到這一點,但也歡迎其他建議。
我有一個問題,我不知道如何解釋,但我會嘗試......例如,在一些遊戲中,文本輸出是「慢」,一個接一個地寫char,而不是所有的短語在一次...所以,我怎麼能複製這種行爲?「減速」輸出
我想這樣...我可以做一個循環,並在那裏我寫一個字符,並休眠1毫秒,寫一個字符和睡着,等等......有另一種方式,或者這是唯一/最佳/簡單的方式我可以實現這個訣竅?我試圖用C++來做到這一點,但也歡迎其他建議。
嗯,是的,usleep是一個解決方案,但你應該線程它,否則它會減慢你的遊戲。雖然1ms可能在視覺上不夠。我建議你做一些測試才能看到。
輸出?是在終端上製作的?如果是這樣,也許你可以使用一些術語容量。
編輯:你可以使用一個時鐘!
輸出將在文本區域...你是什麼意思使用時鐘? – user1466609
承認你處於循環狀態,並且你想要一個精確的暫停(不是像sleep()調用那樣依賴性能),讓我們說1sec,在打印的第一個字母處獲得clock()或ctime(),然後比較使用if語句的過去時間,當它已經達到1秒時,你打印另一封信並重新初始化時鐘,等等......我希望我已經清楚了。 – Maresh
如果你問我,使用一個單獨的線程來更新一段文本會有點浪費資源。 我建議這樣做的方法是定義一些字符,這些字符應該在一秒內顯示在屏幕上,然後計算自上次更新文本以來的毫秒數。然後你乘以該值
例子:
float charsPerSecond = 60/1000;
float lastUpdated;
...
int nrChars = (int) (charsPerSecond * (currentTime - lastUpdated));
//output nrChars characters
lastUpdated = currentTime;
謝謝,我會試試這種方式 – user1466609
你可以做一個類,它可以幫助你描述的內容。然後你可以輕鬆地重用它。 – chris
你有遊戲的主循環嗎?如果是這種情況,你通常可以有一個時間參考,無論是你的還是基於一個真正的時鐘 – Salepate