| Une alternative au alarm[x] dans Step. | |
|
|
Auteur | Message |
---|
keïtchi Utilisateur confirmé: Rang **
Messages : 366 Localisation : Don't Follow me, I'm lost too!
| Sujet: Une alternative au alarm[x] dans Step. Jeu 7 Nov 2013 - 13:57 | |
| Bonjours amis du CBNA! Voila, je cherche une alternative au alarm[x], et pouvoir, dans step, appeler cette alarme qui attendra la fin du temps qu'on lui aura indiqué pour exécuter la portion de code qu'elle contient sans arrêter l'exécution de step. Et, vus que je suis plutôt pointilleu, je voudrais en plus que cette "alarm" utilise comme unité de décompte, non pas les step, mais le temps réel pour des raison de performance et de polyvalance. j'ai donc décider de bidouiller un truc, et, vus que pour bidouiller, je suis fort, j'ai réussi! Ou est le problème alors? Et bien, mon code, est, disons le, loins d'être optimisé, et pas vraiment pratique à utiliser qui plus est. Malheureusement, mes compétences actuel ne me permettent pas de le simplifier, aussi, j'en appel à vous, afin de trouver mon bonheur. Passons au choses sérieuse! Voici Mon Code dans Create: - Code:
-
//time contiendra le current_time+ms il servira de point à atteindre/attendre et doit être > à current_time quand il est utilisé la 1ère fois. time=100000000000000000; timeverif=0;// Variable qui sert à vérifier si time doit être actualisé ou pas. ms=3000;// Le nombre de ms à attendre.
Et dans step: - Code:
-
if(time<=current_time) { show_message("ok"); timeverif=0; } if (timeverif=0) { time=current_time+ms; timeverif=1; } Mon code a qui plus est 1 principal inconvénient, la variable ms, donc le nombre de millisecondes d'attente ne peut pas être définis dans step. _________________ Mon Projet: |
|
| |
hofmeister Bavard
Messages : 109
| Sujet: Re: Une alternative au alarm[x] dans Step. Jeu 7 Nov 2013 - 15:12 | |
| Bonjour, tu peux toujours définir ms dans step en conditionnant pour que ce ne soit fait qu'une seule fois, comme pour la définition de 'time', mais ça paraît mieux de le définir ailleurs, comme la variable peut être utilisée (enfin je crois) plusieurs fois pour ces events 'temps' personnalisés. En gros ça à l'air déjà bien, et peu gourmand en ressources? |
|
| |
keïtchi Utilisateur confirmé: Rang **
Messages : 366 Localisation : Don't Follow me, I'm lost too!
| Sujet: Re: Une alternative au alarm[x] dans Step. Jeu 7 Nov 2013 - 15:41 | |
| J'ai trouver une alternative, j'ai fait un script, (donc a rajouter dans script) pour ceux qui veulent tester: - Code:
-
// Retourne la valeur 1 après avoir attendu // argument0: ms="Milliseconde"+current_time; // Ne fonctionne que si assigné dans Step. if (argument0<=current_time) { test=1; return(test) }
/*- Exemple:
DANS CREATE: startms=1000000000000000000; ms[0]=startms; timer[0]=0;
DANS STEP: timer[0]=Wait(ms[0]);
if (timer[0]=1) { ms[0]:=startms; timer[0]=0; show_message("ok"); } -*/ Mon script retourne 1 quand le temps est passé, et le seul argument a mettre c'est "les millisecondes a attendre ici"+current_time. exemple: timer=Wait(1000+current_time); ici timer retournera 1 après 1000 milliseconde. Après, je peut toujours pas définir l'argument0 dans step. _________________ Mon Projet: |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Une alternative au alarm[x] dans Step. Jeu 7 Nov 2013 - 18:31 | |
| T'aime te compliquer la vie toi Tu fais un truc du style : dans create : - Code:
-
alarm=90; // en step, une seconde équivaut à room_speed steps (30 par défaut, donc là ca fait 3s)
dans step : - Code:
-
alarm-=1; if(alarm==0){ // fais ce que t'as à faire }
_________________ Je suis partie sur les ailes du vent et la tempête m'a ramenée.
|
|
| |
keïtchi Utilisateur confirmé: Rang **
Messages : 366 Localisation : Don't Follow me, I'm lost too!
| Sujet: Re: Une alternative au alarm[x] dans Step. Jeu 7 Nov 2013 - 19:02 | |
| Merci baucoup! Quelques petite questions, Même si ça rame, il y aura toujours 30 steps en 1 sec dans une room par défaut? current_time utilise les steps pour compter le temps passé depuis l'exécution du programme? _________________ Mon Projet: |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Une alternative au alarm[x] dans Step. Jeu 7 Nov 2013 - 19:29 | |
| Nan, tu peux récupérer la vitesse d'exécution courante avec la variable fps, et nan current_time utilise le système de date de l'OS, donc c'est plus "fiable", mais en vrai la méthode avec les steps est beaucoup plus simple (et surement plus rapide), puis si ca rame, vaut mieux que ca suive les fps : si il te faut 1s pour recharger ton arme par exemple, et que le truc tourne à 15fps, bah tu va recharger deux fois plus vite que si t'utilisait ma méthode, donc tu va avoir des décalages... (je sais pas si je suis clair mais bon... ^^)
edit : ceci étant dit, les alarm natives de GM utilise mon fonctionnement, donc si tu veux y trouver une alternative ^^ _________________ Je suis partie sur les ailes du vent et la tempête m'a ramenée.
|
|
| |
keïtchi Utilisateur confirmé: Rang **
Messages : 366 Localisation : Don't Follow me, I'm lost too!
| Sujet: Re: Une alternative au alarm[x] dans Step. Jeu 7 Nov 2013 - 19:47 | |
| Ok merci pour les infos, je pense que je vais me servir des steps effectivement, et current_time si besoin, en gros si je doit échanger des informations avec un serveur/client, j'utiliserais current_time, mais là, c'est vrais que pour l'instant, ça reste de too much pour ce que je veux faire.
Enfin, c'était bien sympa, j'avais jamais bien compris comment fonctionne le temps dans game maker, thx! _________________ Mon Projet: |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Une alternative au alarm[x] dans Step. Jeu 7 Nov 2013 - 21:27 | |
| Dans tous les cas le temps et GM ça fait un peu 2. En général le genre de jeu qui demande beaucoup de réactivité n'est pas bridé en fps. Le fps est au max, mais les mouvements des objets sont calculés en fonction de la durée d'une frame.
Donc même avec un système de current_time, tu peux pas faire grande chose... |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Une alternative au alarm[x] dans Step. Jeu 7 Nov 2013 - 21:39 | |
| D'ailleurs, en parlant de ca oni, tu saurais pas comment on calcule les fps ? Vu qu'en java ia pas de fonction pour les récupérer (du moins à ma connaissance), c'est quoi la meilleure solution ? Pour mon rpg, j'avais fais un timer qui faisait le step/draw de tous les objets 30 fois par seconde, mais si un step prend plus que 1000/30s et donc qu'il rame, bah ca fout me bordel... :/ Or là ce projet devrait bouffer beaucoup plus que mon rpg, donc faudrait aucune limite de fps, comme tu dis Donc l'astuce ce serait de tout faire dans un while, et de calculer les fps en fonction du temps d'exécution du step/draw de tous les objets ? Je demande parce que j'en ai aucune idée, puis j'ai peur qu'avec le while il bouffe toute la puissance du pc, au détriment des autres programmes en cours :/ merci d'avance, à toi ou à ceux qui pourraient m'indiquer un poste _________________ Je suis partie sur les ailes du vent et la tempête m'a ramenée.
|
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Une alternative au alarm[x] dans Step. Jeu 7 Nov 2013 - 22:01 | |
| Récupérer un fps, c'est pas facile a faire si tu le veux un minimum 'stable'. Car en fait chaque frame ne mettra pas exactement le même nombre de msec a s’exécuter, du coup il vaux mieux faire une moyenne sur les n dernières frames (et faut choisir un n pas trop grand sinon le fps ne se mettra pas a jour assez régulièrement). Pour ce qui est du calcul du fps, il faut déjà calculer la durée d'un step. Le fps = 1000/stepTime (pour un stepTime en msec) - Code:
-
main() { lastTime = time() currentTime = time()
while(true) { currentTime = time() frameTime = currentTime - lastTime fps = 1000/frameTime
game()
lastTime = currentTime } } Pour ceux qui veulent limiter le fps, il faut comparer la durée d'une frame et celle qu'on veux, et bloquer la boucle principale le temps qu'il faut: - Code:
-
main() { lastTime = time() currentTime = time() frameTimeRequired = 1000/60 // pour du 60 fps
while(true) { lastTime = currentTime game() while(time() - lastTime < frameTimeRequired) sleep(1) // ont peut mettre plus que 1, mais 1 permet une meilleur précision currentTime = time() } } |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Une alternative au alarm[x] dans Step. Ven 8 Nov 2013 - 7:40 | |
| Ok, merci beaucoup ! _________________ Je suis partie sur les ailes du vent et la tempête m'a ramenée.
|
|
| |
Contenu sponsorisé
| Sujet: Re: Une alternative au alarm[x] dans Step. | |
| |
|
| |
| Une alternative au alarm[x] dans Step. | |
|