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
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
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.
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 ?
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).
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/
http://walljv.free.fr/index.php?to=view&id=88
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.
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.
je pense que tu as raison, car quand je mettais un egal, il me collait les barres entres elles.et la balle, tout quoi.
fantometteninja => j´ai testé les " ," dans les if chez moi et ça à l´air de marcher comme l´opérateur &&
moi non plus les colision j´y arrive pas
comment tu fait pour que une image suivent un mouvement prédéfinit ?
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.
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.
La balle traverse tjs les barre,
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
@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.
escusez moi j´ai oubliez de préciser mais oui c´est bien du c++ merci lockscash
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
@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.
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;
}