PONG EN SDL

DeathAngel67300 Messages postés 10 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 28 juin 2017 - 30 janv. 2005 à 22:34
omer9311 Messages postés 2 Date d'inscription vendredi 23 janvier 2004 Statut Membre Dernière intervention 29 septembre 2005 - 26 oct. 2005 à 23:54
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/29201-pong-en-sdl

omer9311 Messages postés 2 Date d'inscription vendredi 23 janvier 2004 Statut Membre Dernière intervention 29 septembre 2005
26 oct. 2005 à 23:54
Salut,

Moi aussi je fais un pong et je galérais sur les collisions balle/raquettes jusqu'a ce que je trouve la solution dans ton code, merci et bonne continuation !

@+
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
6 févr. 2005 à 18:22
Tu peux écrire ça, mais c'est parce que tu a un cast implicite qui va te le transformer en true.

BYTE c'est pas standard sauf erreur, il faut utiliser char ou unsigned char et vérifier avec sizeof() que ça fait bien 1 octet.
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
6 févr. 2005 à 18:19
ah bon? on peux pas écrire
bool dummy=105;
?
enfin bon.. l'intéret est limité, ya qu'a prendre un BYTE dans ce cas la.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
5 févr. 2005 à 23:54
ben que le compilo t'empêcheras justement de jouer avec les 8 bits de ton booléen, quand bien même ils sont physiquement tous là.
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
5 févr. 2005 à 23:16
"t'as pas accès à toute la plage de valeur" tu veux dire quoi par la? un booleen dans l'idéal c'est true ou false, meme si en C c'est tous les entier entre 0 et 127... (bicoz les 8 bits)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
5 févr. 2005 à 22:33
La taille du double buffer est directement proportionnelle à la profondeur de tes couleurs. Èvidemment si tu fais du 32 bits... ;)

sinon, le booléen est bien stocké sur 1 octet en C++ (en VB c'est sur 4 octets je pense... à vérifier), mais t'as pas accès à toute la plage de valeur... c'est juste pour la clarté.
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
5 févr. 2005 à 21:27
meme un bool fait 8 bits
pourquoi tant d'économie? les barrettes de ram font minimum 128 Mo, 1024 pour les chanceux, et un tableau de 256 fait... 256 octets (si ce sont des bool) soit un millionnieme de ta memoire.
pour info, rien de le double buffer en 800*600 fait plus de 5 Mo.
alors qu'allouer seulement 1 bit par touche et se dépatouiller avec tes or et and doit faire pas mal (toutes proportion gardées) chuter le fps.
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
3 févr. 2005 à 20:10
C'est vrai, bien vu dirait l'aveugle que je suis ^__^
merci pour ce s précisions
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
3 févr. 2005 à 17:56
Oula

en effet, j'ai fumé quoi moi ??

Il faut donc utiliser le type de donnée dont la taille en mémoire correspond à la capacité recherchée (256 octets est trop et 1 octet est effectivement insuffisant).

Merci Kirua pour ta présence d'esprit.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
2 févr. 2005 à 22:21
1 octets ça te fait 256 états, donc 8 touches (forcément, 8 bits). Pour sauver toutes les 256 touches, il te faut 256 / 8 = 32 octets au total.
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
2 févr. 2005 à 22:18
Salut

Shenron666, pour mapper l'état (appuyé ou non) de 256 touches, un octet suffit : 1 bit par touche et on utilise des and et or bit à bit pour faire les tests.

Ce sera plus rapide et l'utilisation de la mémoire sera moindre.

Personnellement j'intercepte les appuis des touches via SDL_KEYDOWN et SDL_KEYUP et j'ajuste par des opérations logiques l'état des bits de ma variable contenant l'état des inputs de mon jeu.

Ensuite pour déplacer, je teste successivement l'état de chaque touche et agis en conséquence.

Bonne prog

Chouchou
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
1 févr. 2005 à 17:41
Avec la SDL, ce tableau est construit et géré d'office par l'API. Tu as une fct qui ressemble à SDL_GetKeyState() ou apparenté.
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
1 févr. 2005 à 16:16
Pour les touches tu peux gérer de la façon suivante :
Tu crée un tableau de 256 chars pour mapper ton clavier (ou un tableau de 4 si tu gères que 4 touches si tu préfères)
à chaque mémoire correspond 1 touche, si la touche est appuyée la mémoire est à 1 sinon elle est à 0
Ensuite tu utilise les fonctions SDL pour détected qu'une touche a été manipulée, tu regardes si la touche a été appuyée ou relachée et tu modifie la mémoire en conséquence

à coté de cela dans la boucle principale du programme tu regarde les mémoires pour savoir si tu vas bouger la raquette
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
31 janv. 2005 à 18:02
1s dans un jeu de réflexe, c'est pas terrible hein :/
faut paramètrer ça, pour que ce soit immédiat, AMHA.
cs_jul38 Messages postés 6 Date d'inscription dimanche 8 août 2004 Statut Membre Dernière intervention 8 février 2005
31 janv. 2005 à 17:57
J'ai utilise SDL_KeyRepeat,et tu peux rester appuyé sur la touche faut attendre 1 sec avant qu'elle se mette a bouger,pour le probleme des diagonales, je veux essayer de voir sa.
Merci
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
31 janv. 2005 à 07:59
pour l'histoire de touches, il y a une fonction qui peut t'aider: SDL_Key_Repeat je pense, qq chose dans ce goût là, qui permet d'envoyer periodiquement les messages claviers tant que la touche n'est pas relâchée
DeathAngel67300 Messages postés 10 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 28 juin 2017
30 janv. 2005 à 22:34
Ben le problème c'est que ton jeu bug.

Après avoir touché deux fois la balle, celle-ci se met juste à faire des diagonales sur l'écran, sans faire perdre ni gagner qqun.
Ensuite la vitesse augmente un peu vite à mon gout, au 6 ème rebond la balle se voit plus.
Dernier commentaire : la jouabilité est pas top du tout, à chaque fois faut appuyer sur la touche pour monter et descendre, vaudrait mieux pouvoir rester appuyé et avoir un mouvement fluide.
Je pense que tu as les moyens d'améliorer tout ca. Bon courage :)
Rejoignez-nous