2011-04-19 3 views
1

Je me demande comment puis-je créer un monde personnalisé pour un jeu.C# ou AS3 Custom world time

comme une heure = 30 minutes, 1 année = 6 mois

6 mois personnalisés

Je suis stucked, et je n'ai pas la moindre idée comment le faire.

Je sais que je peux utiliser l'événement timer.

Répondre

0

que votre boucle principale du jeu est quelque chose comme:

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 

Vous formate alors ce nombre en minutes avec quelque chose comme:

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; 
} 

vous donc enfin avoir

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

Notez que flash, vous ne pouvez pas compter sur 'stage.frameRate' et compter les trames, vraiment. 'frameRate' est au mieux un indice pour le joueur indiquant le nombre maximum d'images que vous voulez. Mais il n'y a aucune garantie que votre swf fonctionnera exactement à, disons, 30 FPS. Tu ferais mieux de calculer les deltas. Une fonction pratique et simple pour cela est getTimer(). Capturez l'heure initiale, puis, lorsque l'horloge se déclenche à nouveau (entrez frame, timer, any), appelez getTimer et soustrayez la valeur renvoyée à la valeur précédente pour obtenir le temps écoulé. –

+0

Oui, c'est vrai. – Chris

+0

merci beaucoup! cela fonctionne vraiment en utilisant un auditeur Timer! – ShadowG

0

Le code suivant vous donnera les millisecondes qui se sont écoulées depuis l'époque Jan, 1 1970
Tout appel à cette fonction afterwords vous donne une durée en millisecondes. Soustrayez cela de l'heure d'origine et vous avez combien de millisecondes qui ont passé. Sachant que vous pouvez maintenant prendre en compte votre conversion.
EX 6 secondes = 1 minute

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

vous devez vous rappeler l'horodatage et dans le jeu date du moment où votre temps dans le jeu a commencé, puis à calculer la date en jeu pour donné instant:
milliseconds_of_double_time = moment.timestamp - start_timestamp
ingame_date = date_from_timestamp (start_date.timestamp + milliseconds_of_double_time * 2)