albert0
Messages postés249Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention 9 août 2008
-
2 avril 2006 à 19:45
MorbhAck
Messages postés127Date d'inscriptionjeudi 16 juin 2005StatutMembreDernière intervention 5 août 2007
-
23 juil. 2006 à 17:51
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
MorbhAck
Messages postés127Date d'inscriptionjeudi 16 juin 2005StatutMembreDernière intervention 5 août 2007 23 juil. 2006 à 17:51
J'ai déjà vu cette source quelque part .... www.dev4all.com. Tu l'a un peu modifier mais ta meme pas changer les sprites ! Meme pas les noms de fichiers ! Bon j'ai rien contre mais ....
Pretender06
Messages postés6Date d'inscriptiondimanche 27 novembre 2005StatutMembreDernière intervention12 mai 2008 3 avril 2006 à 19:47
Merci beaucoup pour vos réponses
Je vais essayer de faire ça :)
Sethnakt
Messages postés1Date d'inscriptionmardi 7 janvier 2003StatutMembreDernière intervention 3 avril 2006 3 avril 2006 à 15:18
Salut.
Pour un timer, tu peux utiliser certaines fonction windows qui te permettent d'avoir un "tick" en milliseconde. Je te conseil de regarder les fonctions QueryPerformanceFrequency et QueryPerformanceCounter (qui marchent ensemble) et sont en haute resolution.
Ensuite pour chaque boucle/frame, tu consultes le timer pour savoir combien te temps c'est ecoule en milliseconde depuis la boucle precedente.
Apres tu additionnes ta position actuelle avec la vitesse * par le temp en millisecondes:
Comme cela, quel que soit l'ordinateur, les objects se deplaceront a la meme vitesse.
Il y a qq truc a savoir en utilisant un timer mais pour debuter ca devrait suffir.
Un autre technique (moins propre) est de limiter le nombre d'images par seconde a une valeur fixe, comme 30 par seconde par exemple avec un while.
Voila en esperant que ce te soit utile.
Kleidp
Messages postés124Date d'inscriptionjeudi 5 juin 2003StatutMembreDernière intervention10 février 2008 3 avril 2006 à 14:03
Juste une précision pour ton timer:
Il faut que tu sépare bien la partie "Exécution du code" et "Affichage", sinon ton jeu n'aura pas la même vitesse sur chaque PC. Ainsi tu es sûr que le jeu fonctionne comme tu l'as prévu même si l'affichage ne suit pas vraiment.
exemple:
while(timer>0)
{
Ton code
timer --;
}
Procédure d'affichage;
Pour le timer:
Tu définis combien de fois ta procédure timer est executée par seconde, puis
Procedure Timer()
{
timer++;
}
Bien sûr pour ton snake tu ne gère pas beaucoup d'éléments graphiques, donc ça passera quand meme si tu mélanges l'affichage avec le code (surtout qu'il faut quand meme un ordi bien pourri pour le faire ramer :)
albert0
Messages postés249Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention 9 août 2008 2 avril 2006 à 22:16
je veu pas dire te connerie, mais les timers (je sais plus si le therme est adapté...)c'est des "tests" que te met avant d'executer ta boucle principale de jeux, genre si 100 ms ce sont "Veritablement" ecoulés depuis la derniere excution, alors executer la boucle...
mais pour en etre bien certain, il y a google, ce site, et pete meme dans la doc de Directx ?
parce que si tu met pas de timer, quand tu test ton jeu sur un ordi 1mhz le serpent ira a 1km/5heur ^^ et sur un ordi puissant, a 500km/1sec
donc vala
mais si non il a l'air joli ton serpent (j'ai pas regardé la structure)
et pour ton probleme des pommes, (donc je sais pas comment est fait ta struc..) mais j'aurai fait un "tableau de jeu" deux Dimension, qui contiendrais tout les éléments du jeu (pomme,mur,rien)...
et voila, à chaque generatin de pomme, tu verifie dans ce tableau si la place est "bien vide"
EnjoY
Pretender06
Messages postés6Date d'inscriptiondimanche 27 novembre 2005StatutMembreDernière intervention12 mai 2008 2 avril 2006 à 21:41
ah bon ?
D'accord. Mais comment ça marche ces timers ??
albert0
Messages postés249Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention 9 août 2008 2 avril 2006 à 19:45
chez moi le serpent ce prend pour super man (il va a 400km/h)
il faudrai que tu mette des timers histoir de faire tourner le jeu a la meme vitesse sur TOUT les ordis
23 juil. 2006 à 17:51
3 avril 2006 à 19:47
Je vais essayer de faire ça :)
3 avril 2006 à 15:18
Pour un timer, tu peux utiliser certaines fonction windows qui te permettent d'avoir un "tick" en milliseconde. Je te conseil de regarder les fonctions QueryPerformanceFrequency et QueryPerformanceCounter (qui marchent ensemble) et sont en haute resolution.
Ensuite pour chaque boucle/frame, tu consultes le timer pour savoir combien te temps c'est ecoule en milliseconde depuis la boucle precedente.
Apres tu additionnes ta position actuelle avec la vitesse * par le temp en millisecondes:
D3DXVECTOR2 vPosition;
D3DXVECTOR2 vVelocite;
[...]
float fFrameDuration = (float)pTimer->getFrameDuration();
vPosition += vVelocite * fFrameDuration;
[...]
Comme cela, quel que soit l'ordinateur, les objects se deplaceront a la meme vitesse.
Il y a qq truc a savoir en utilisant un timer mais pour debuter ca devrait suffir.
Un autre technique (moins propre) est de limiter le nombre d'images par seconde a une valeur fixe, comme 30 par seconde par exemple avec un while.
Voila en esperant que ce te soit utile.
3 avril 2006 à 14:03
Il faut que tu sépare bien la partie "Exécution du code" et "Affichage", sinon ton jeu n'aura pas la même vitesse sur chaque PC. Ainsi tu es sûr que le jeu fonctionne comme tu l'as prévu même si l'affichage ne suit pas vraiment.
exemple:
while(timer>0)
{
Ton code
timer --;
}
Procédure d'affichage;
Pour le timer:
Tu définis combien de fois ta procédure timer est executée par seconde, puis
Procedure Timer()
{
timer++;
}
Bien sûr pour ton snake tu ne gère pas beaucoup d'éléments graphiques, donc ça passera quand meme si tu mélanges l'affichage avec le code (surtout qu'il faut quand meme un ordi bien pourri pour le faire ramer :)
2 avril 2006 à 22:16
mais pour en etre bien certain, il y a google, ce site, et pete meme dans la doc de Directx ?
parce que si tu met pas de timer, quand tu test ton jeu sur un ordi 1mhz le serpent ira a 1km/5heur ^^ et sur un ordi puissant, a 500km/1sec
donc vala
mais si non il a l'air joli ton serpent (j'ai pas regardé la structure)
et pour ton probleme des pommes, (donc je sais pas comment est fait ta struc..) mais j'aurai fait un "tableau de jeu" deux Dimension, qui contiendrais tout les éléments du jeu (pomme,mur,rien)...
et voila, à chaque generatin de pomme, tu verifie dans ce tableau si la place est "bien vide"
EnjoY
2 avril 2006 à 21:41
D'accord. Mais comment ça marche ces timers ??
2 avril 2006 à 19:45
il faudrai que tu mette des timers histoir de faire tourner le jeu a la meme vitesse sur TOUT les ordis