CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

J´aide les personne en C/C++

Matbox2
Matbox2
Niveau 7
28 mai 2006 à 21:35:34

Pour la détection de collision je connais quelque technique comme le bounding boxe ou le pixel perfect, sinon c´est technique ne sont peut être pas les meilleurs pour un labyrinthe.
http://games-creators.org/wiki/Détection_pixel-perfect_des_collisions_2D
Moi je me rappelle pour un jeu je stockais ma map dans un tableau de int (chaque sprite un numéro )et tous les chiffres négatifs correspondait à des objtes infranchissable. Il me suffisait donc de tester a chaque fois que mon personnage avançait s´il tombé sur une case de poids négatif.

Pxnet
Pxnet
Niveau 3
28 mai 2006 à 21:56:03

Salut !
Pour ma part, je fais un FPS en ce moment et en ce qui concerne les collisions, je n´ai utilisé que les mathématiques : en gros je calcule le coefficient directeur de chaque mur, je le considère dans le repère optimal, puis je calcule la distance entre l´abscisse théorique de mon joueur contre le mur et sa position réelle. Ensuite je le repositionne et le résultat et PARFAIT ! Je ´glisse´ véritablement contre mes murs, qu´ils soient inclinés ou pas.

dynoplasmma
dynoplasmma
Niveau 9
29 mai 2006 à 23:55:55

Bonsoir, je viens re rencontrer un probleme avec les collisions.

Prenons un pong, la balle rebondit en X quand elle est comprise entre 10 et 30 de coordonnées, disons.

Admettons qu´on lui rajoute de la vitesse, elle peut arriver a balle-=40;
Si balle.x=31, on lui enleve 40, ca fait -1, on s´est teleporté derierre la raquette.

En ecrivent ces lignes, j´ai trouvé la solution, si la balle est a droite de la raquette aux bonnes coor X, et que le tours d´apres, elle est a gauche de la raquette au bonnes coor X, on fait repasser la balle a droite de la raquette et on fait la collision.

Je testerais ca demain je pense, si j´arrive pas a l´appliquer, je reviendrais poster, mais je devrais y arriver :)

Fvirtman
Fvirtman
Niveau 10
30 mai 2006 à 01:05:06

Pour un pong (comme un casse brique), il est évident qu´il est inutile de faire une vraie collision : on regarde simplement si la balle a franchi la ligne que réprésente la raquette. Si c´est le cas, alors soit on fait rebondir si on est en face de la raquette, soit on fait perdre le point si on ne l´est pas.

Sinon, ton probleme de tabulation est connu.
Une méthode pour éviter cela :
- Eviter que la vitesse d´un objet ne dépasse sa largueur (tu vois ce que je veux dire, meme si c´est un abus de langage)
Si tu te vois obligé de faire cela, alors subdivise le mouvement.
C´est a dire :
ta balle fait 30 pixels de large. tu as envie de la faire bouger de 40 pixels.
Fait le en 2 temps :
20 + 20 par exemple ! Comme si tu faisais 2 frames au lieu d´une ! Sauf que tu n´es pas obligé de réafficher entre les 2 : ainsi, tu calcules 2 mouvements, mais tu n´affiches que le final.
Comme ça, tu te ramenes au bon cas ou il n´y a pas eu tabulation.

kikou81
kikou81
Niveau 9
30 mai 2006 à 12:24:43

Moi je n´ai toujours pas compris la gestion des colisions 2d en C avec la SDL?Je suis aller sur le site game creator mais je n´ai pas compris :(

guyver2
guyver2
Niveau 10
30 mai 2006 à 13:05:31

kikou

il faut que tu sache au moment ou tu veux tester la colision (1) la position de ton objet (2) la position de tout les murs (dans le cas d´un labyrinthe). Ensuite c´est a toi de verifier que ton objet n´est pas colé a un mur ou pire, si il ne l´a pas traversé.
il n´y a pas de technique speciale a SDL, c´est a toi d´implémenter une fonction de test qui te dira si ton objet est en colision.

prenons le cas simple d´une boule dans un labirynthe:
ton labyrinthe est stocké sous forme d´un tableau de droite.
ta balle est stockée avec un centre (x,y) et un diametre.

à chaque mvt de la balle tu vérifie qu´aucune droite ne coupe ta balle. (pas trop compliqué). puis si il y a colision, tu change la direction de la balle (ou tu la stop...).
je sais pas si c´est tres clair...
En tout cas, pour ce genre de probleme (en 2d), tu fais un petit dessin et généralement tu arrive assez facilement a voir ce qu´il faut tester.

Pxnet
Pxnet
Niveau 3
30 mai 2006 à 15:02:05

Oui mais son labyrinthe est peut-être constitué de droites inclinées, s´il doit l´adapter à une image bitmap. Et dans ce cas, un système correct de collision demande un peu plus de réflexion...

guyver2
guyver2
Niveau 10
30 mai 2006 à 15:47:47

non pas forcement. une fonction qui verifie qu´une droite coupe un cercle peut-etre valable pour les droite ni verticale ni horyzontale...

Pxnet
Pxnet
Niveau 3
30 mai 2006 à 16:15:40

Mais s´il veut faire glisser son cercle contre la droite? (enfin, je trouve que c´est la meilleure collision qu´on puisse réaliser)

kikou81
kikou81
Niveau 9
30 mai 2006 à 16:50:18

Je pense que j´ai une solution, c´est que dans ma fonction de deplacemment, je fais dire les coordonné "interdite" donc je dis
deplacer(image) que si image n´est pas a certaine coordonné.

Ca peut marcher non?Je pense que c´est une mauvaise idée mais bon...

Pxnet
Pxnet
Niveau 3
30 mai 2006 à 17:26:34

En fait, le système de collision que tu vas réaliser dépend de ce que tu veux faire faire à ta balle. Si tu veux qu´elle glisse contre les murs, l´algorithme est assez compliqué (mais je peux t´aider !) , mais si tu veux seulement qu´elle s´arrête :

- tu stockes le contenu des variables X et Y dans oldX et oldY avant le code de déplacement de la balle
- et quand la balle est dans une zone ´interdite´, alors tu mets le contenu de oldX et oldY dans X et Y, ce qui replace la balle à son ancienne position.

Cette technique est en quelque sorte le hello world de la collision :)

dynoplasmma
dynoplasmma
Niveau 9
30 mai 2006 à 17:34:44

Merci Fvirtman, j´y avais vraiment pas pensé de separer en deux voire plus les deplacement pour pas traverser la raquette.
Ca va etre plus facile ainsi :)

kikou81
kikou81
Niveau 9
30 mai 2006 à 21:02:35

Ok merci beaucoup Pxnet, je testerais sa demain apres midi ^^ mais o fait, c´est pas une balle moi, c´est juste un petit sprite ^^ Merci beaucoup; au fait, vous pensez qu´il faut que fasse un topic pour mon jeu quand?

guyver2
guyver2
Niveau 10
30 mai 2006 à 22:09:59

quand tu auras 2-3 images de présentation; si le moteur n´est pas pres c´est trop tot. (a mon avis)
pour le moment tu peux poser tes question ici (ça répond assez vite).

dynoplasmma
dynoplasmma
Niveau 9
31 mai 2006 à 13:37:53

Methode de Fvirtman appliquée, la vitesse de la balle peut aller de 600 en 600, ca fonctionne quand meme, j´ai decomposé de 20 en 20, en 4 lignres de code, le tours est joué ^^

kikou81
kikou81
Niveau 9
31 mai 2006 à 15:19:17

J´ai un autre probleme pour mon jeu, quand je deplace mon sprite, il laisse une trace des couleur qui compose le sprite a lecran c´est tres moche...Pour le deplacemment je fais:

Si evenement clavier == UP(fleche du haut)
{
position_sprite.y--;
}
blit()
flip()
Si ca ne vous vas pas je peut vous donner le code exact.

Merci tous le monde.

Matbox2
Matbox2
Niveau 7
31 mai 2006 à 15:36:41

C´est tout à fait normal il faut que tu nettois l´écran, et reconstruise l´image. Le simple appel de la fonction SDL_FillRect(screen, &rect, 0); dans ta boucle principale devrait suffrir à enrayer ton problème.

kikou81
kikou81
Niveau 9
31 mai 2006 à 17:12:37

Non ca ne regle pas mon probleme, le background est noir, tu es sur que le troisieme parametre de la fonction est bien "0" normallement "0" c´est le noir donc...Moi je veux que mon sprite puisse se balader sur mon image donc il ne faut pas metrte du noir sinon ca m´efface mon image...Ta pas une solution?

Merci beaucoup,

dynoplasmma
dynoplasmma
Niveau 9
31 mai 2006 à 17:15:20

Mais non, tu met le noir, puis ton image !

SDL_FillRect(...);

//Deplacement de l´image

SDL_BlitSurface(image);
SDL_Flip();

kikou81
kikou81
Niveau 9
31 mai 2006 à 17:23:22

Oui oui sa marche mais c´est parce que j´avais oublié un break dans un swich :honte: mais sinon la j´ai toujours un probleme,
je me suis fait un menu de presentation et quand je lance le jeu, ca maffiche en eclair le menu ca nattend meme pas que l´on rentre une lettre(h dans mon jeu) et sa va directemment au jeu.Par contre le jeu marche :) vou savez pourquoi ou vous voulez mon code?

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware