void waitkey() // attend qu´on appuie sur RETURN
{
while(1) // boucle
{
while(SDL_PollEvent(&)) // aquisition d´evenement
{
if ( event.type == SDL_KEYDOWN) / / on appuie sur une touche ?
{
if ( event.key.keysym.sym == SDLK_RETURN) return; / / c´est " RETURN" ?
}
}
}
}
on peut mexpliquer a quoi sert chaque fonction en DEHORS DU SCRIPT separement quoi ^^ sil vous plais!
et aussi je cherche un livre un peu comme les tutos de Jyy ( pas trouvé de meilleure reference ^^)
c´est a dire qui va droit au but , explique une fonction a quoi elle sert et basta , ne parle pas pour rien dire quoi!
TheSuperBest :
en ne reactualisant qu´un rectangle situe autour de ton personnage ![]()
specifie une SDL_Rect , a peine plus grand que les coordonnees de ton perso
genre , si ton perso est a X,Y , et fais 50*50 pixels , tu fais un SDL_Rect Z
de coordonnees X-5,Y-5 , 50+5,50+5 , que tu blittes a l´ecran AVANT le reaffichage de ton perso . ..
cela dit , si un jeu 2d fait ramer ton ordi , c´est que le probleme est autre
tu affiches que la map situee a l´ecran , ou aussi les parties en dehors de l´ecran ? ca expliquerait
giga-nova : c´est tres simple , y a des structures utiles ( SDL_Rect , SDL_Color ) et des fonction simple à utiliser
en plus , y a plein de tutorials , et si , il est facile de faire bouger un truc
pour un pong , oui , dans le mien , l´ai c´etait juste
si la balle est plus haute que toi , tu montes
si elle est plus basse , tu descends . ..
c´est basique , mais on peut ajouter un pourcentage de chance de rater la balle par exemple etc
Un super bouquin : Programmer en C++ de Claude Delannoy ![]()
Mais je me demande tjr comment vous faites pour gerer les " COLISIONS"
Programmer en C++ de Claude Delannoy
comment il fonctionne?
il explique chake fonction une pas une ou te barbe en expliquant des choses hs ( jaime allez droit au but)
Giga-Nova > les collisions c´est quelque chose de sympa :
quand tu as un bonhomme, ou une balle par exemple : tu imagines un rectangle autour de chacun. Et il te suffit de regarder si les rectangles se chevauchent, ou pas
on appelle ça la techique des bounding box ![]()
jyy > > mouais pourquois pas mais c´est automatique,
je veux dire les colisions no sont pas a coder
ou il faut dire
balle 30x30 pixel si tu te cogne sur un bord de l´ecran tu repart dans un sens alétoire ? ?
si j´ai le cpyright de jyy , je peux te passer une fonction qu´il m´avait faite . ..
mais , en gros , meme si il y a bien sur des dizaines de manieres , pour un jeu 2d tout simple , tu regardes juste si les deux objets se chvauchent .
par exemple , une raquette et une balle
on regarde si l´absicce de la balle est comprise entre l´absisse de la raquette ( en tenant compte de l´epaisseur aussi )
puis , si les coordonnees sont les memes ( tjs en tenant compte de la taille de la raquette/balle )
en gros , ca donne pour une balle de 5*5
et une raquette 10*10 pixels :
if ( Xballe>Xraquette && Xballe+5<Xraquette+10 )
{
/ / les absisses semblent identiques , on passe ax ordonees
if ( Yballe>Yraquette && Yballe+5<Yraquette+10 )
{
/ / LA , il y a collision
}
}
sonic66 : c´est moi , ou j´ai l´impression que tu bloques la dessus depuis perpete ? ces fonctions ne S UTILISENT PAS SEPAREMENT !
tu vois bien qu´elle sont dans une boucle , les unes interagissent avec les autres , on regarde si il y a un evenement , pusi si cet evenement est un appui sur une touche , puis si cette touche est bien la touche echap . ..
IMPOSSIBLE d´utiliser les unes sans les autres
euh . .. pourquoi est-ce que je suis devant l´ordinateur , alors que j´ai bac blanc demain moi ![]()
if ( Xballe>Xraquette && Xballe+5<Xraquette+10 )
{
/ / les absisses semblent identiques , on passe ax ordonees
if ( Yballe>Yraquette && Yballe+5<Yraquette+10 )
{
/ / LA , il y a collision
}
}
c a dire ![]()
sonic > je t´ai déja expliqué : quand tu appuies sur une touche, ça met dans une file d´attente un evenement. Pour pouvoir les traiter, tu utilises pollevent pour récupérer le suivant
ça sort du while s´il n´y a plus personne
sinon, ça rentre dans le while, en disant remplissant " event" avec les données de l´evenment lu
ensuite, il te suffit de regarder le type de l´evenement event.type
et si c´est une touche, tu regardes si cette touche est return, et si c´est le cas, tu sors
jejej > mais oui, tu peux la distribuer ma petite fonction de test de collisions
Giga-nova >
" ou il faut dire
balle 30x30 pixel si tu te cogne sur un bord de l´ecran tu repart dans un sens alétoire ? ? "
Ben oui, il faut le lui dire ! Car sinon, la balle sort de l´écran ! Et il y a d´autres cas ou tu n´auras pas envie de lui dire de rebondir : comme si tu fais un jeu de baston, et que l´ennemi t´envoie une boule de feu, tu n´as peut etre pas envie qu´elle rebondisse ![]()
Boah , de toute façon , j´ai perdu mes textes . ..
GIGA-NOVA :
une balle et une raquette sont des rectangles
la balle fait ( par exemple ) 5*5 pixels
et la raquette 10*10 pixels ( un peu carre mais bon )
on va regarde si la balle peut toucher la raquette
donc , d´abord on va regarder si elles ont les memes coordonnees en absisse X
puis , si c´est le cas , si les coordonnees en ordonee Y sont les memes
mais , pour qu´elles soient exactement les memes , il faudrait beaucoup de chance , ca se joue au pixel pres
donc , on ajoute les > et < , pour ajouter la largeur / hauteur des balles et raquettes
y = vertical
et x horizontal ? ??
si tu as 14 ans , tu as deja du voir ca en maths nan ? c´est un repere effectivement , X est vertical
par contre , le truc un peu lourd , c´est que le repere avec la SDL se situe en haut a gauche de l´ecran , en quelque sorte il est inverse ( en fait , je crois que c´est la meme chose pour toutes les apis graphiques
)
c´est a dire que le point en haut a gauche de l´ecran , est le point ( 0,0) , et non ( 0,600 ) comme je le pensais au debut . ..
tiens petite lecture :
http://perso.numericable.fr/~fvirtman/info/deim/index.html
quand tu changes x : tu te déplaces horizontalement
quand tu changes y : tu te déplaces verticalement
jejej > > oui je voulais en etre juste sur ( en ce moment on fait la proportionnalité donc absise et ordonné)
Oh , je l´avais pas vu ca :
Clipping
lorsqu´un personnage est sur le bord de l´écran, il faut qu´on ne le voie qu´a moitié. Pour cela, il ne faut donc pas l´afficher completement, mais juste la partie visible, il faut donc une phase de prédécoupage, ou l´ordi selectionne juste la partie a afficher. C´est un " clipping". Tous les moteurs actuels gerent le clipping automatiquement : si vous blittez en personnage sur l´écran, sur le bord, ou meme dehors, ils gerent ça tout seul. Les cartes graphiques sont meme en partie faites pour cela.
Donc , si j´ai une carte qui fait 10.000*10.000 pixels , je peux la blitter entierement à l´ecran , l´ordi se charge de n´afficher que le " visible " , ou , j´ai plutot interet à afficher " intelligemment " ?
affiche intelligemment...
Plus tu maches le travail, mieux ca marche !
" les triangles les plus rapides a dessiner sont ceux que l´on n´affiche pas". Ca s´applique aussi a bcp de choses.
Toi tu as une connaissance globale de la scene : tu peux faire un clipping BCP plus efficace que le clipping auto d´une carte graphique, qui fait ca " par element".
jejej > affiche intelligemment ! ! lol ! !
Ce que ça veut dire c´est que si tu affiches tout, ça n´affichera bien sur que la partie visible : la carte va clipper et filtrer ce qui ne sera pas visible...
cependant, une carte de 10000*10000, a 32 bpp ça fait 400 Mo d´envoi a la carte par frame...
Si tu veux 50 frames par secondes, ça fait 400*50 = 20 Go de données envoyées par secondes, qui doivent transiter par le bus ( ou pas si une partie est en VRAM) et qui vont gentillement faire la queue devant le GPU ( pross de la carte graphique) pour savori si elles sont clippées ou non...
On appelle ça un flingage de performances, ![]()
LGV > lol
tu as été plus rapide !