JeuWeb - Crée ton jeu par navigateur
Boucle & tick coté server NodeJS? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Boucle & tick coté server NodeJS? (/showthread.php?tid=7509)

Pages : 1 2 3 4 5 6 7 8


RE: Boucle & tick coté server NodeJS? - Argorate - 24-11-2015

@xenos : non, dans ce que je préconise, tu n'as pas de delta passé, c'est le setInterval qui fait la régularité.

@sephi : Si tu peux faire ce dont tu as besoin sans ajouté une complexité de plus, c'est mieux non?


RE: Boucle & tick coté server NodeJS? - Sephi-Chan - 25-11-2015

Entièrement d'accord, mais ici la complexité est bien moindre en traînant un delta (que ce soit en terme de développement ou à l'exécution).

La solution d'ajuster le délai du timer pour exécuter régulièrement un tick est plus complexe. D'ailleurs, pour faire ça en Javascript, il faut en réalité créer un setTimeout (avec le délai ajusté) à la fin de chaque tick, et tu te farcis quand même un delta (sauf qu'il est fixe).

N'hésite pas à présenter un bout de code qui implémente "ce que tu préconises".


RE: Boucle & tick coté server NodeJS? - Xenos - 25-11-2015

Je ne comprends toujours pas comment tu veux faire ta fonction de calcul du monde sans lui transmettre d'information sur la durée réelle de tes ticks. Si ta fonction de calcul de l'univers de jeu veux déplacer un objet, elle va se baser sur sa vitesse. Si t'as pas la durée écoulée depuis le dernier déplacement, tu vas coincer.

Soit t'as un X = x0 + dt * v et donc là, je ne vois pas pourquoi passer un dt constant (dt=1tick) ou un dt variable (dt=durée écoulée depuis le dernier calcul) te gène/augmente la complexité.
Soit t'as un X = x0 + dv et donc là, si tu changes la durée d'un tick/ta valeur de setInterval, le jeu accélèrera/ralentira (car la timeline du jeu se base sur les ticks, donc si la conversion tick/temps réel change, le jeu accélère ou ralentit).

Et pour l'avoir fait sur Eclerd, je te garantis qu'un système de "tick fixe" est bien trop rigide dans le temps: sur Eclerd, la date de jeu est calculée par DateInGame = DateJeu0 + K*(DateReelleActuelle - DateReelle0), avec DateJeu0 la date du jeu à son ouverture (j'ai pris 1er Janv 2000), DateReelle0 la date réelle d'ouverture du jeu (admettons, 14 Sept 2011), DateRelleActuelle la date courante (25/11/2015 aujourd'hui) et K un facteur de vitesse.
Conséquence? K ne peut plus être modifié. Si j'augmente K, le jeu fait un bond dans le temps d'un coup. Si je le réduis, il part dans le passé. Je te laisse imaginer les impacts sur le vieillissement de la population et les calculs de production.

A mon avis, tu vas te retrouver dans un cas similaire si ta timeline est à base de ticks (changer la durée d'un tick en cours de partie aura de beaux effets collatéraux [parce que j'aime pas "effet de bord"]).


RE: Boucle & tick coté server NodeJS? - Argorate - 25-11-2015

Il ne faut évidemment plus jamais toucher au tick/seconde une fois la valeur décider. D'où mon topic pour débattre de combien il faut en mettre par seconde.^^
Effectivement le jeu n'aura pas le même vitesse si tu modifies... la vitesse du jeu. Mais une fois que tu as dis ça, tu as pas dit grand chose :p

Ce n'est pas là le problème.


RE: Boucle & tick coté server NodeJS? - Xenos - 25-11-2015

Justement, le problème est là: ton code devient in-évolutif, et cela va te paralyser par la suite. C'est ce que Sephi t'expliques: oui, tu ajoutes quelques lignes de code par ci par là, mais ce n'est pas de la complexité, puisque cela ne fait que révéler un élément qui sinon resterait caché. Ajouter dt comme une vraie variable, c'est comme ajouter un check "if (x < 0) throw InvalidArgumentException();" dans la fonction "sqrt(x)": oui, cela ajoute deux lignes de code, mais cela enlève finalement de la complexité en explicitant clairement une condition qui, sinon, resterait cachée.

En ajoutant littéralement Dt, tu vas enlever de la complexité car tu n'auras pas besoin d'aller chercher où DT est définit, pourquoi cette valeur, etc. A la relecture, il y aura plus de code, mais celui-ci sera plus clair, donc moins complexe (sinon, c'est comme dire qu'une phrase est plus complexe parce qu'elle a plus de mots; si mots enlevés phrase courte complexe plus dur relire sûr).


RE: Boucle & tick coté server NodeJS? - Ter Rowan - 25-11-2015

hello


je n ai pas forcément d'idée sur le sujet propre a Argo, par contre au contre-exemple Eclerd, oui

Si tu veux modifier K tu dois aussi modifier les autres paramètres de ta formule
L'idée étant d'oublier le film du passé :

dateJeu0 devient la date in game lorsque tu décides de changer K (calculée avec l'ancien K)
dateReele0 devient la date réelle où tu décides de changer K

du coup ce qui est acquis avant le changement de K est acquis une fois pour toute

bon si la formule est pas bonne, l'idée y est. Je ne vois pas d'effet de bord, sauf si tu veux pouvoir faire des bonds dans le passé


RE: Boucle & tick coté server NodeJS? - Argorate - 26-11-2015

Pour moi, une fois que tu as trouvé la bonne valeur pour que le serveur simule de manière correcte le temps réel, tu n'as plus à y toucher (d'où mon débat initiale pour savoir où se situ cette valeur).

Vouloir modifier la vitesse du jeu en la rendant plus rapide ou plus lente n'a aucun intérêt, car ça signifie soit que ton jeu va plus lentement que le temps réel, soit plus vite, et aucun des deux cas n'est acceptable.
Tu vois ce que je veux dire?


RE: Boucle & tick coté server NodeJS? - @lucard - 26-11-2015

Si effectivement tu choisis que le temps de ton jeu s'écoule plus rapidement, on plus lentement (c'est à dire 3 choix, + vite, + lent, égale) il n'en reste pas pour autant un infinité de possibilité pour le paramètre de rapidité ( ou de lenteur). Donc si tu trouve que ça va trop, trop vite. Et que tu veux le passer à moins trop vite. (mais vite quand même) tu seras coincé.


RE: Boucle & tick coté server NodeJS? - niahoo - 26-11-2015

Non non car il va trouver la bonne valeur pendant le développement et dix ans après, avec 100 000 joueurs ça sera toujours la bonne valeur.

Quel est donc ce chiffre magique ?


RE: Boucle & tick coté server NodeJS? - Xenos - 26-11-2015

Argorate, considérons que tu partes sur 30Hz (parce que c'est la valeur chez NeoAxis). Dans 6 mois, tu te dis que 100Hz, c'est mieux. Tu changes cela comment, sans que cela n'impacte la vitesse du jeu perçue par les joueurs?

@Ter Rowan: c'est ce que je pensais faire, mais il y avait des cas type "je cherche une date dans le passé ayant uniquement la date réelle en BDD", donc une fois le changement K effectué, la date IG passée correspondant à la date réelle passée n'est plus la même. Ayant l'hypothèse cachée "K ne changera pas", ces algos qui regardent le passé étaient fonctionnel. Mais du coup, K ne peux implicitement pas changer.
Sans compter que je perdais des infos comme la durée totale de jeu (réelle ou ingame, puisque les dates 0 ont changées), et il me semble qu'elle servait ailleurs...