2011-04-19 68 views
1

我想知道如何爲遊戲創建自定義世界時間。C#或AS3自定義世界時間

諸如One小時= 30分鐘 1年= 6個月

6個自定義

我stucked,我不知道該怎麼做。

我知道我可以使用計時器事件。

回答

0

說你的遊戲主循環是一樣的東西:

this.addEventListener(Event.ENTER_FRAME, gameLoop, false, 0, true); 

var _timer = 0; // starts as zero 
const WORLD_TIME_FACTOR:Number = 2; 

function gameLoop(e:Event):void { 
    // all your game logic happens here 

    _timer++; 
} 


function getWorldTime():Number { 
    return (_timer/stage.frameRate) * WORLD_TIME_FACTOR; 
} 

// later (you can adjust WORLD_TIME_FACTOR to be anything, 2 would indicate that the 
// game world happens twice as quick as in real life (like your examples) 
// 

trace(getWorldTime()); // At 3 seconds real world, would trace 6 

trace(getWorldTime()); // At 33 seconds real world, would trace 66 

你會然後格式化這個數字到分鐘的東西,如:

const div60:Number = 1/60; 
const div120:Number = 1/60/60;  
function format_time(value:Number):String { 
    // x >> 0 is the same as int(x) but quicker 
    var minutes:String = String((value* div60 >> 0) % 60); 
    minutes = (minutes == "60") ? "00" : minutes; 
    minutes = (minutes.length == 1) ? "0" + minutes : minutes; 

    var seconds:String = String(value% 60); 
    seconds = (seconds.length == 1) ? "0" + seconds : seconds; 

    return (value* div120 >> 0) + ":" + minutes + ":" + seconds; 
} 

所以最後你會

trace(format_time(getWorldTime())); // At 72 (1 minute, 12 secs) seconds real world, would trace 00:02:24 
+0

注意,在閃光,你不能依靠'stage.frameRate'和計數幀,真的。 'frameRate'對玩家來說至多是一個暗示你想要的最大幀數的暗示。但是不能保證你的swf會以30 FPS的精確度運行。你最好計算三角洲。一個方便簡單的函數是getTimer()。捕捉初始時間,然後,當時鍾再次輸入時(輸入幀,計時器,不管),調用getTimer並將返回的值減去前一個值以獲得流逝的時間。 – 2011-04-19 01:31:58

+0

是的,的確如此。 – Chris 2011-04-19 01:36:24

+0

非常感謝!它真的使用Timer偵聽器工作! – ShadowG 2011-05-17 01:26:56

0

下面的代碼會給你自從1970年1月1日以來傳遞的毫秒數
對這個函數後綴的任何調用都會給你一個以毫秒爲單位的時間。
從原始時間減去該值,並且已經過了多少毫秒。
知道您現在可以考慮您的轉化。 EX6秒=1分鐘

var startingTime:Number = Date.parse(new Date()); 
trace(startingTime); 
0

你必須要記住這一時刻的時間戳和在比賽日時,您的遊戲內時刻開始,然後計算出在遊戲日期給出時刻
milliseconds_of_double_time = moment.timestamp - start_timestamp
ingame_date = date_from_timestamp(start_date.timestamp + milliseconds_of_double_time * 2)