我正在寫一箇舊學校的ASCII DOS提示遊戲。老實說,我試圖模仿ZZT來了解更多關於這個品牌的遊戲設計(即使它已經過時)ASCII DOS遊戲 - 渲染方法
我做得很好,讓我的全屏文本模式工作,我可以創建世界和移動周圍沒有問題,但我無法找到一個像樣的時間方法爲我的呈現。
我知道我的渲染和預渲染代碼是快速的,因爲如果我不添加任何延遲()s或(時鐘() - renderBegin)/ CLK_TCK檢查time.h渲染速度非常快。
我不想使用延遲(),因爲它是我的知識平臺特定的和最重要的是雖然延遲(如用戶輸入和處理),我不能運行任何代碼。所以我決定做這樣的事情:
do {
if(kbhit()) {
input = getch();
processInput(input);
}
if(clock()/CLOCKS_PER_SEC-renderTimer/CLOCKS_PER_SEC > RenderInterval) {
renderTimer = clock();
render();
ballLogic();
}
}while(input != 'p');
這應該在「理論」中工作得很好。問題是,當我運行此代碼(將RenderInterval設置爲0.0333或30fps)時,我無法在任何地方接近30fps,我在最大時得到的最多爲18。
我想也許我會嘗試RenderInterval設置爲0.0,看看性能踢了......它沒有。我是(RenderInterval爲0.0)的最大速度達到18-20fps。
我雖然也許因爲我不斷調用所有這些時鐘()和「除以這個」的方法,我放慢了一些可怕的CPU,但是當我把render和ballLogic調用從if語句的括號並將RenderInterval設置爲0.0我再次獲得快速渲染。
這並不讓SENCE給我,因爲如果我離開了,如果檢查中,不應該就跑得也一樣慢?我的意思是它仍然必須做所有的計算
順便說一句,我用Borland的Turbo C的編譯++ V1.01
ZZT!我喜歡那個遊戲。 – caf 2010-07-22 13:24:46
你和我都是,咖啡。 ('#throwstar seek')。 @ Parad0x13:如果您不介意遠離DOS,我寫了一個庫來模擬SDL支持的任何平臺上的這種圖形樣式:http://libfake437.googlecode.com – 2010-09-05 11:58:27
如果您存儲'clock( )'並分配存儲的值,你會保存一個呼叫(最快的代碼是你不會調用的代碼),它會更準確(否則你會失去你第一次調用'clock()'之間的時間,做了所有的數學和處理分支)。這種精確度的損失會使遊戲運行速度比你想要的慢,即使你不再使CPU使用率達到最大。 (編輯:哈哈,剛剛看到這個日期,哦) – 2011-09-14 12:22:29