AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le deal à ne pas rater :
Cartes Pokémon 151 : où trouver le coffret Collection Alakazam-ex ?
Voir le deal

 

 Une alternative au alarm[x] dans Step.

Aller en bas 
4 participants
AuteurMessage
keïtchi
Utilisateur confirmé: Rang **
keïtchi


Messages : 366
Localisation : Don't Follow me, I'm lost too!

Une alternative au alarm[x] dans Step. Empty
MessageSujet: Une alternative au alarm[x] dans Step.   Une alternative au alarm[x] dans Step. EmptyJeu 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.

albinoblacksheep

_________________
Mon Projet:
Une alternative au alarm[x] dans Step. Backgroundchargement1jc9
Revenir en haut Aller en bas
hofmeister
Bavard



Messages : 109

Une alternative au alarm[x] dans Step. Empty
MessageSujet: Re: Une alternative au alarm[x] dans Step.   Une alternative au alarm[x] dans Step. EmptyJeu 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?
Revenir en haut Aller en bas
keïtchi
Utilisateur confirmé: Rang **
keïtchi


Messages : 366
Localisation : Don't Follow me, I'm lost too!

Une alternative au alarm[x] dans Step. Empty
MessageSujet: Re: Une alternative au alarm[x] dans Step.   Une alternative au alarm[x] dans Step. EmptyJeu 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:
Une alternative au alarm[x] dans Step. Backgroundchargement1jc9
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Une alternative au alarm[x] dans Step. Empty
MessageSujet: Re: Une alternative au alarm[x] dans Step.   Une alternative au alarm[x] dans Step. EmptyJeu 7 Nov 2013 - 18:31

T'aime te compliquer la vie toi Yum! 
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
}
Wink

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
keïtchi
Utilisateur confirmé: Rang **
keïtchi


Messages : 366
Localisation : Don't Follow me, I'm lost too!

Une alternative au alarm[x] dans Step. Empty
MessageSujet: Re: Une alternative au alarm[x] dans Step.   Une alternative au alarm[x] dans Step. EmptyJeu 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:
Une alternative au alarm[x] dans Step. Backgroundchargement1jc9
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Une alternative au alarm[x] dans Step. Empty
MessageSujet: Re: Une alternative au alarm[x] dans Step.   Une alternative au alarm[x] dans Step. EmptyJeu 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.
Revenir en haut Aller en bas
keïtchi
Utilisateur confirmé: Rang **
keïtchi


Messages : 366
Localisation : Don't Follow me, I'm lost too!

Une alternative au alarm[x] dans Step. Empty
MessageSujet: Re: Une alternative au alarm[x] dans Step.   Une alternative au alarm[x] dans Step. EmptyJeu 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:
Une alternative au alarm[x] dans Step. Backgroundchargement1jc9
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Une alternative au alarm[x] dans Step. Empty
MessageSujet: Re: Une alternative au alarm[x] dans Step.   Une alternative au alarm[x] dans Step. EmptyJeu 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...

_________________
Une alternative au alarm[x] dans Step. Runningpotato1Une alternative au alarm[x] dans Step. TvF6GED Une alternative au alarm[x] dans Step. MdetltS
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Une alternative au alarm[x] dans Step. Empty
MessageSujet: Re: Une alternative au alarm[x] dans Step.   Une alternative au alarm[x] dans Step. EmptyJeu 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 Yum! 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 Smile

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Une alternative au alarm[x] dans Step. Empty
MessageSujet: Re: Une alternative au alarm[x] dans Step.   Une alternative au alarm[x] dans Step. EmptyJeu 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()
}
}

_________________
Une alternative au alarm[x] dans Step. Runningpotato1Une alternative au alarm[x] dans Step. TvF6GED Une alternative au alarm[x] dans Step. MdetltS
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Une alternative au alarm[x] dans Step. Empty
MessageSujet: Re: Une alternative au alarm[x] dans Step.   Une alternative au alarm[x] dans Step. EmptyVen 8 Nov 2013 - 7:40

Ok, merci beaucoup ! Smile

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Contenu sponsorisé





Une alternative au alarm[x] dans Step. Empty
MessageSujet: Re: Une alternative au alarm[x] dans Step.   Une alternative au alarm[x] dans Step. Empty

Revenir en haut Aller en bas
 
Une alternative au alarm[x] dans Step.
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Touche pressée dans step !!!!!!!!
» Changer de sprite dans step [Résolu]
» [Résolu] Afficher du texte dans un Step
» Question bete begin step / step / end Step
» bloquer certaines commande dans un laps de temps (step) [RESOLU]

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide débutants-
Sauter vers: