Se connecter

Informatique

Création de Jeux

Sujet : SDL
1
dynoplasmma
Niveau 9
22 mai 2005 à 14:38:32

Bonjour a tous, je poste dans un nouveau topic mes questions, j´elabore un pong, j´ai presque finit le premier mode, certes, mais il y a encore quelques problemes.

_______________________________________________

1er probleme : les collisions

essai :
void collisions()
{
if(r2.x=r4.x,r2.y=r4.y)sy=-1,sx=-1;
if(r3.x=r4.x,r3.y=r4.y)sy=+1,sx=+1;
}

resultat :
les barres se collent a la balle.
_____________________________________________

2eme probleme:
lancer la balle avec la touche d

essai:
void deplacement_balle()
{
SDL_FillRect(screen,NULL,0);
SDL_PollEvent(&);
keystate=SDL_GetKeyState ( NULL);
if(keystate[SDLK_d])r4.x+=3*sx,r4.y+=3*sy;
if ( r4.y<0) sy=1;
if ( r4.y>650) sy=-1;
if ( r4.x<0)r4.x=494,r4.y=333;
if ( r4.x>950)r4.x=494,r4.y=333;
}

resultat:
la balle traverse les barres

______________________________________________
3eme probleme
les scrore

pas d´essais.

_______________________________________________

PS :

r1 = image de fond
r2 = barre de gauche
r3 = barre de droite
r4 = balle

_______________________________________________

Je remercie d´avance ce qui voudront bien m´aider :)

bloodmonster
Niveau 9
22 mai 2005 à 14:43:53

mrd comment ta progresser vite ! !!
tu peut me dire ou trouver des bon tuto sur la SDL pleaze parce que je suis a court de tuto j´arrive juste a afficher des image et a en bougé certaine avec le clavier ou la sourit
donne moi des sources stp a par celui de JYY que j´ai deja fait il est vraiment bien.

merci

dynoplasmma
Niveau 9
22 mai 2005 à 14:48:34

j´ai juste prot les premiers tutos de JYY, sinon les autres tutos, j´en ai utilisé pour savoir comment bouger avec le clavier, mais ca marchait pas. Sinon, je sais juste

_ afficher des images ou je veut
_ faire bouger les images que je veux
_ faire bouger un truc automatique ment(comme une balle)

la souris j´arrive pas, j´ai pas trop essayé non plus. Donc tu es au meme niveau que moi, les collisions, j´essaye masi ca marche pas, le demarrage par un touche, il faut que je reste appuyé sur cette touche, pas pratique.

fantometteninja
Niveau 6
22 mai 2005 à 14:49:30

1er probleme :
le test d´égalité est == et non =
Donc dasn ton code, tu affectais directement les valeurs au lieu de les tester.

2eme probleme :
j´ai pas trop compris ce que tu cherche à faire,
mais tu pourrais deja essayer de sortir le sdl_fillrect() de là, et de faire une boucle de rendu.
Et ce n´est pas normal si la balle traverse les barres puisque tu ne teste pas les collisions avec les barres ?

lockscash
Niveau 6
22 mai 2005 à 14:51:38

Bon je connais pas la SDL, mais je peux te donner une indication pour le 1er problème mais c´est théorique.

Je pense que sx et sy est un vecteur représentant la vitesse de la balle, donc sa direction aussi.
Tu traite 2 cas alors qu´il y en a 4 en fait.

Soit la balle arrive par le haut sur la barre de gauche, soit elle arrive par le bas et idem pour la barre de droite. Donc sx et sy ont 4 valeurs
sx=1, sy=-1
sx=1, sy=1
sx=-1, sy=1
sx=-1, sy=-1

correspondant aux 4 directions.

Ensuite est ce que après ton test de collision tu redéplace ta balle. Normallement pour un instant t, on teste la collision à l´instant t+1 et si il n´y a pas collision on bouge tout les éléments à t+1. ( Pis t = t+1 etc...)
Il faut anticiper.

Pour ton 2ème problème je sais pas, j´ai pas trop compris ce que tu voulais faire.

Sinon pour les Scores, ben :
Si r4.x est inférieur à ton bord gauche, la barre de droite marque un point, et si r4.x est supérieur à ton bord droit c´est la barre de gauche qui marque un point. ( en gros dès que le joueur rate la balle).

Ptival
Niveau 10
22 mai 2005 à 14:52:40

Pour le premier problème on peut pas comprendre sans le code source complet.

Je t´ai répondu au second problème sur le topic de JYY.

Le 3° problème je n´y répondrai que si tu as un problème...Sinon on fait ton boulot et saymal.

bloodmonster ->

http://www.games-creators.org/wiki/SDL
http://cone3d.gamedev.net/cgi-bin/index.pl?page=tutorials/gfxsdl/index

et les références :

http://www.libsdl.org/index.php
http://sdldoc.csn.ul.ie/

dynoplasmma
Niveau 9
22 mai 2005 à 15:03:35

http://walljv.free.fr/index.php?to=view&id=88

dynoplasmma
Niveau 9
22 mai 2005 à 15:13:00

fantomettninja-> les doubles egal, ca marche pas, ya juste que les barres se collent plus a la balle.
void collisions()
{
if(r2.x==r4.x,r2.y==r4.y)sy==-1,sx==-1;
if(r3.x==r4.x,r3.y==r4.y)sy==+1,sx==+1;
}
j´enlevais collision car je pouvais rien testervu que les barres etait coller.

Sinon, pour le deuxieme probleme, je veux que quand j´appui sur une touche la balle se lance, je devais rester apuyer sur d pour que ca avance.

lockscash ; il faut que je mette 4 valeurs alors ?
mais j´ai essayé les quatre chances, et aucune ne marche, donc il doit quand meme y avoir un petit probleme.

Ptival, j´ai essayé de faire ce que t m´a dit, mais ca marche pas l´ecran reste totu noir et on peut pas quitter, ci contre le wall.

fantometteninja
Niveau 6
22 mai 2005 à 15:17:31

Si ça ne marche pas, ça ne veut pas dire que ce sont de mauvaise sinstructions. C´est peut etre ton algo qui a un probleme... ( ce qui est plus que probable)
Si tu veux tester une egalité, il te faut utiliser ==. Si tu mets if(r2.x=r4.x), il va t´affecter r4.x dans r2.x.
au fait, les , c´est légal ?

Sinon je n´ai pas le temps de decortiquer le code source. Plus tard si je peux.

dynoplasmma
Niveau 9
22 mai 2005 à 15:19:55

je pense que tu as raison, car quand je mettais un egal, il me collait les barres entres elles.et la balle, tout quoi.

Matbox2
Niveau 7
22 mai 2005 à 15:21:22

fantometteninja => j´ai testé les " ," dans les if chez moi et ça à l´air de marcher comme l´opérateur &&

bloodmonster
Niveau 9
22 mai 2005 à 15:30:31

moi non plus les colision j´y arrive pas
comment tu fait pour que une image suivent un mouvement prédéfinit ?

dynoplasmma
Niveau 9
22 mai 2005 à 15:34:50

regarde mon codde, c´est avec les sx, xsy, un mouvement predefii je ne sais pas mais de gauche a droite, de haut en bas, je sais et si tu fait les 2 en meme temps, c´est le mouvement d´une balle.

lockscash
Niveau 6
22 mai 2005 à 15:37:34

Moulalal... il manque quelques bases de prog la...

Ne confond pas l´opérateur de comparaison qui est == et l´opérateur d´affectation qui est juste =

Tu veux mettre la valeur 5 dans une variable de type int nommé Entier, tu fait
int Entier = 5;

Tu veux comparer ta variable Entier avec la valeur 5 tu fait :
if ( Entier == 5)
Autres opérateurs < > < = > = ! =

Sinon la virgule je suis surpris que ton compilo il ait pas péter un cable, mais bon, préfère utiliser && pour ET, || pour OU

Donc correctement ta condition doit etre écrite :

void collisions()
{
if( r2.x == r4.x && r2.y == r4.y ) sy=-1,sx=-1;
if( r3.x == r4.x && r3.y == r4.y ) sy=+1,sx=+1;
}

C´est normal que la balle restait coincé, à chaque tour de boucle, tu refixai sa position avec l´opérateur = dans les if.

Test comme ca. C´est pas encore correct mais le code est juste.

dynoplasmma
Niveau 9
22 mai 2005 à 15:48:05

La balle traverse tjs les barre,

bloodmonster
Niveau 9
22 mai 2005 à 15:48:15

dyno sait tu faire que au bout de x seconde mon image 1 disparait pour laissez la place a l´image 2
si quelqu´un sait dite le moi svp

lockscash
Niveau 6
22 mai 2005 à 15:53:13

@dyno
C´est que tes conditions sont pas bonne.

@bloodmonster
Bon on va imaginer que tu prog avec C++ vu que t´as rien dit. Tu utilise des fonctions tels que timeGetTime() qui vont te renvoyer le temps en miiliseconds depuis que ton PC a démarré, tu accumule tu accumule et tu test, si ton temps total > à tes X seconds tu fait afficher une autre image et tu enlève la premiere.

bloodmonster
Niveau 9
22 mai 2005 à 15:54:45

escusez moi j´ai oubliez de préciser mais oui c´est bien du c++ merci lockscash

lockscash
Niveau 6
22 mai 2005 à 15:58:41

Euh j´en rajoute un peu

@Dyno D´après toi, quel est la probabilité que :
( r2.x == r4.x && r2.y == r4.y ) ... Tu test ca avec 1 point, ca veux dire que le joueur il devra avoir l´oeil pour viser exactement le point où il trouvera une collision. Déja il faut que tu connaisse la hauteur de ta barre, la largeur c´est pas nécessaire.
T´es conditions sont pas complète, disons qu´il faudrait rajouter un truc comme ca :
Si ( La balle en X < Barre gauche en X &&
La balle en Y " compris entre " BarreYmini et BarreYmax)

Je te le fait version algo, vais pas macher le travail ca se fait pas. Ya pas d´opérateur " compris entre " au passage :p)

@bllodmonster
N´oublis pas que tu récup un nombre en milliseconde donc soit tu le divise par 1000, soit tu fait que 5 secondes = 5000 et tu test avec 5000.

dynoplasmma
Niveau 9
22 mai 2005 à 21:47:18

Qui pourrait me remplacer cela pour que ca marche

void collisions()
{
if( r2.x == r4.x && r2.y == r4.y ) sy=-1,sx=-1;
if( r3.x == r4.x && r3.y == r4.y ) sy=+1,sx=+1;
}

1
Sujet : SDL
   Retour haut de page
Consulter la version web de cette page