Comment fait on pour afficher plusieurs images
qui ne sont pas de fond
( ex: la raquette et la balle)
on fait plieurs rectangles
SDL_Rect rect1,(et le rect2 et 3 ici) ? ?
il faut faire plusieurs SDL_Blit surtout ![]()
sur la SDL ca ne me parait pas très clair tout ca
on a un code et on doit / copier/coller betement
sans comprendre...
jejej > Mon jeu rame parce qu´il réactualise 300 rectangles par frame, ce qui est un peu beaucoup...
Ton astuce me semble bonne mais maintenant, au lieu que ce soit le perso qui laisse un tâche c´est ma texture d´herbe qui laisse une grosse trainée verte irrégulière.
if ( event.type == SDL_KEYDOWN) / / on appuie sur une touche ?
{
if ( event.key.keysym.sym == SDLK_RETURN) return; / / c´est " RETURN" ?
}
donc si le type de cet event est une touche tapée au clavier , alors si cette touche c return , ben on quitte!
plus que 2 petites question : event.key.keysym.sym cest quoi tous ces . key.keysym.sym
et le return a la fin pourquoi il est placé a la fin d´une instruction et non pas comma ca :
r = . ..........;
return r;
ou encore
return a+b;
Thesuperbest > 300 blit par seconde, c´est peu : ton ordi devrait gérer ça les doigts dans le nez
est ce que tu as bien mis tes tiles en VRAM ?
sonic66 >
pour savoir pourquoi key.keysym.sym, c´est ainsi que sont faites les structures :
regarde la doc sur la structure event :
http://sdldoc.csn.ul.ie/sdlevent.php
et navigue
Sinon, pour le return, sans rien derriere, c´est parce que la fonction renvoie " void" donc c´est :
return RIENDUTOUT;
donc
return;
Ce n´est pas 300 blit par secondes ! Mais par frame ! Mon ordi arrive à gérer ça avec 40 FPS soit 12000 Blit par secondes mais je connais quelqu´un chez qui c´est limité à 15 FPS soit 4500 Blit par secondes.
ça devrait pourtant tourner ! !
essaie de voir et de compiler mon tuto " scrolling a la souris"
il doit faire autant de frame par seconde que toi, voir +, est ce que ça rame chez toi aussi ? ( ou alors chez ton pote ? )
et pour moi sinon?
bon, j´ai reussi a afficher mon fond et ma balle et 1 raquette pour mon pong, ( ce qui doit ette déja bien pour qqun qui porg depuis meme pas 1 semaine
je peut faire bouger ma raquette dans les 4 dierction avec
( event.key.keysym.sym == SDLK_
mais now je dois gérer les colisions c chaud non ? ?
en fait celui qui a fait la sdl a utilisez des struct et donc nous pour certaines operation on doit utiliser des struct! merci
ps: moi et l´anglais ben ca fait 2
pour un pong, c´est tout con :
tu regardes simplement si le x de ta balle est < 10 par exemple, ou alors > MAXRESOL-10
( tu vois ce que je veux dire)
si c´est le cas, tu regardes le sens :
si tu es < 10 et que tu vas a gauche, alors il faut tester la collision
si tu es > MAXRESOL-10 et que tu vas a droite, alors il faut tester la collision :
pour tester, dans ce cas, tu peux simplifier, tu regardes juste si :
yraquette<yballe<yraquette+hauteurraquette
voila, c´est tout ! si c´est bon, tu rebondis : tu inverses le sensx
sinon : perdu.
ensuite, pour faire rebondir en haut et en bas de l´écran :
si yballe<0 && ysens<0 --> ysens = -ysens;
( ysens est le sens de la balle)
( yballe est la position de la balle)
si yballe>MAXY && ysens>0 --> ysens = -ysens;
enjoy !
sonic66 > voila, tu explores les structures internes de SDL.
le mec a appelé ses champs comme ça
donc voila !
SDL_Surface* screen; // l´ecran principale
SDL_Event event; // gestion d´evenement
void init_SDL() // initialise SDL
{
SDL_Init(SDL_INIT_VIDEO); // preapare SDL
screen = SDL_SetVideoMode(800, 600, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN); / / mode graphique
SDL_ShowCursor(0); / / eneleve la souris
}
SDL_Rect Rect(int x,int y,int w=0,int h=0) // pour faire un rectangle plus vite
{
SDL_Rect r;
r.x=x;
r.y=y;
r.w=w;
r.h=h;
return r;
}
SDL_Surface* LoadBMP(char* fichier,int vram=1) / / voir tutorial 2.1.2
{
SDL_Surface* f = SDL_LoadBMP(fichier); // charge l´image dans f en RAM
SDL_Surface* r=NULL;
if ( vram)
r=SDL_CreateRGBSurface(SDL_HWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);// cree une image en VRAM
if ( r==NULL) vram=0; // Si plus de place en VRAM, alors r= NULL.
if ( !vram)
r=SDL_CreateRGBSurface(SDL_SWSURFACE, f->w, f->h, 32, 0, 0, 0, 0); / / cree une image en VRAM
SDL_Rect R=Rect(0,0,f->w,f->h);
SDL_BlitSurface(f,NULL,r,&); // copie l´image f de la RAM vers firstscreen en VRAM
SDL_FreeSurface(f); / / supprime la surface f : inutile maintenant --> libere la mémoire
return r;
}
int main(int argc , char **argv)
{
int s=1; / / sera le sens de déplacement de l´image : 1 = droite, -1 = gauche
int sx=1,sy=1; / / sens de déplacement en x et en y
SDL_Rect rect1,rect2; // structure rectangle ( contiendra la position de la balle pour rect1.x et rect1.y
SDL_Surface* firstscreen; / / tampon temporaire
SDL_Surface* balle;
SDL_Surface* raquette;
int fini=0;
init_SDL(); // initialise ( plus haut)
/ / on dessine
rect1.x = 0;
rect1.y = 0;
rect2.x = 0;
rect2.y = 0;
firstscreen=LoadBMP("background.bmp");
balle=LoadBMP("balle.bmp");
raquette=LoadBMP("raquette.bmp");
SDL_SetColorKey(balle,SDL_SRCCOLORKEY , SDL_MapRGBA(balle->format,255,0,255,0));
SDL_SetAlpha(balle,SDL_SRCALPHA,128);
while(1)
{
SDL_PollEvent(&); / / récupere l´evenement suivant
if ( event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_RETURN) / / si c´est l´appui d´une touche et que C return
break; / / on sort du while.
rect1.x+=3*sx;
rect1.y+=3*sy;
if ( rect1.x<0) sx=1;
if ( rect1.y<0) sy=1;
if ( rect1.x>770) sx=-1;
if ( rect1.y>570) sy=-1;
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_UP) rect2.y-=3;
if ( event.key.keysym.sym == SDLK_DOWN) rect2.y+=3;
}
if ( rect2.x<0) sx=1;
if ( rect2.y<0) sy=1;
if ( rect2.x>770) sx=-1;
if ( rect2.y>570) sy=-1;
SDL_BlitSurface(firstscreen,NULL,screen,NULL); // colle l´image sur l´écran, a la position rect1, donc surtout a x pour la coordonnée x.
SDL_BlitSurface(balle,NULL,screen,&1);
SDL_BlitSurface(raquette,NULL,screen,&2);
SDL_Flip(screen); // affiche la prochaine frame
}
SDL_ShowCursor(1); // reactive la souris
SDL_Quit(); // quitte SDL
return 0; // quitte le programme
}
voila ca donne ca mais ma raquette ( rect2)
peut sortir du champ de vision et je ne trouve pas
comment interdire cette action
PS: non dsl jyy je comprend rien
ben c´est pas dur :
tu places qq part un :
if ( rect1.x<10 && sx==-1)
{
if ( rect2.y<rect1.y && rect1.y<rect2.y+rect2.h)
{
sx=1;
}
else / / dernier if
{
/ / joueur perd
}
}
et pour la raquette qui reste, c´est simple :
avant de faire aveuglément rect2.y+=3;
tu la protege par un if :
if ( rect2.y>10) rect2.y+=3;
JYY > Le tuto de scrolling à la souris tourne bien, il est fluide, je n´ai pas mesurer le nombre de FPS mais je pense qu´il est plus rapide.
Voici mon code :
http://forumftp1.site.voila.fr/tsRPG.rar
Je sais, c´est un peu long . ..
JYY, tu as reflechi au probleme sur mon programe???
les colisionq marche à merveille encore merci jyy
à toi ô programmeur professionnel
je voulait savoir si pour créer un jeu(pong) il fallait que le logiciel c++ , ou il faut aussi paint shop , enfin des logiciel comme ça, c´est à dire que c++ n´est que pour l´IA , les bases , ce qui fait marché le jeu et paint shop pour les graphismes qui bougeront grace à C++
bye ![]()