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++

JeanYvesYves
JeanYvesYves
Niveau 10
13 août 2004 à 10:26:55

j_powel >

" est ce qu il fo vider la memoire ou un truc comme ca avant d afficher une autre BMP "
--> non.
En fait, quand tu charges un BMP avec SDL_LoadBMP, ça te le charge en mémoire, une fois pour toute. Quand tu n´en a plus besoin, la oui, il faut vider sa mémoire.
Cependant, quand tu vas pour le blitter sur l´écran : tu n´as pas besoin de toucher a ta mémoire : ton écran est déja alloué, ce que tu colles aussi, donc tu peux blitter 50000 fois le meme BMP sur ton écran sans qu´il y aie besoin de toucher a la mémoire.

En ce qui concerne la gestion du clavier, ou de l´evenement en général, ça recoupe qq chose que tu disais plus haut : les threads :
un thread, C un sous programme indépendant, qui fait sa vie tout seul. SDL en utilise, mais tu n´es meme pas obligé de le savoir.
Ce thread a une fonction simple : il guette le clavier, la souris, le joystick, etc, sans arret.
Et quand le clavier est pressé par exemple, le thread cree l´evenement, le met dans une file d´attente.
Analogie :
tu es caissier de cinéma : toi, tu restes a la caisse : tu regarde qui il y a dans la file d´attente pour le servir.
Il y a un pote a toi, le thread, qui est devant le cinéma, et qui voit arriver les gens : quand il le voit, il regarde si c´est un étudiant, un vieux, etc, et lui colle une étiquette dessus disant ce que c´est, et le met dans la file d´attente.
SDL marche pareil :
il voit arriver un signal : il lui " colle une étiquette" comme quoi c´est une touche du clavier appuyée, et que c´est le " f" et il le met tout seul dans la file d´attente.

Tout ce que tu as a faire, c´est créer une struct event, qui contiendra l´evenement que tu regardes ( le client que tu sers)
tu fais une boucle :

while(SDL_PollEvent(&))
{
}

qui veut dire littéralement : " tant qu´il y a des clients dans la file d´attente, je les traite : PollEvent voulant dire " sors le gars a qui c´est le tour d´etre servi de la file d´attente, et appelle le " event"

Ensuite, a l´intérieur de ce while : tu regarde de qui il s´agit !

if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_RETURN)
/ /....
}
}
dans ce cas, ça regarde son type : et si l´evenement est de type " j´ai appuyé sur une touche", alors je regarde quelle touche !
C´est aussi simple que ça !

pour + d´infos :
http://sdldoc.csn.ul.ie/sdlevent.php

JeanYvesYves
JeanYvesYves
Niveau 10
13 août 2004 à 10:27:36

doctor_kipetfor > désolé, hors sujet. Va voir le topic de Yamidavid " j´aide les débutants dans RPG maker" :)

J_PoWeL
J_PoWeL
Niveau 3
13 août 2004 à 11:12:23

merci beaucoup JYY je comprends mieux
par contre comment je fait pour vider la memoire d une image qui ne me sert plus car dans mon cas:

image1-> delai 3sec image2->delain 3sec

et vu que je ne me sert plus de l image 1 je doit la vider de la memoire ce ca ? et comment on fait?

MERCI BEAUCOUP

JeanYvesYves
JeanYvesYves
Niveau 10
13 août 2004 à 11:19:00

http://sdldoc.csn.ul.ie/sdlfreesurface.php

:)

anagram_
anagram_
Niveau 3
13 août 2004 à 15:06:58

Coucou ! C´est ENCORE moi :-|
J´en encore un petit bleme avec les maps. J´aurais trois questions . ..

Je n´ai pas trop compris dans le code sur les maps pourquoi l´image de fond ( levels.bmp) n´est pas affichée dans sa totalité dans l´écran. Bien sûr, c´est dans le contexte du tuto mais je ne vois pas comment modifier ce code pour que toute la map apparaisse.
Une fois que j´y serai arrivé, est-ce que je pourrai prélever le pixel de la map à l´endroit où se trouve le pacman pour déterminer s´il cogne un mur ?
Sinon, si j´utilise la méthode des matrices et que je définis la largeur d´un mur pour que le level occupe tout l´écran ( sur mon PC), est-ce que sur une autre machine le level occupera aussi tout l´écran ? Ou bien existe-t-il des fonctions qui retournent la taille de l´écran et ainsi calculer l´épaisseur du mur ?

Merci d´avance et désolé de poser autant de questions ! :\

JeanYvesYves
JeanYvesYves
Niveau 10
13 août 2004 à 15:20:12

Dans mon exemple, la fonction " map" que j´ai faite contient 2 parametres : H et W définis à la valeur 64 par défaut
change donc cette valeur !

met 32*32 par exemple : largeur d´un bloc !

pour les positions, c´est tres simple : tu définis la position de ton gars par 2 int : x et y : dans mon exemple, c´est Xoffset et Yoffset qui définissent la position du coin supérieur gauche de l´écran.

si tu veux la position de ton bonhomme, tu peux l´avoir dans 3 reperes bijectifs ( *) : tu passes de l´un a l´autre facilement :
- le repere local de l´écran : tu sais bien ou est défini ton bonhomme dans le repere de l´écran : sa postion sera entre 0 et 1024 pour X, entre 0 et 768 pour Y ( si tu es en 1024*768 bien sur...)
- le repere global du monde ( ce sera de grands int) calculés ainsi :
Xglobal = Xlocal + Xoffset
Yglobal = Ylocal + Yoffset
- le repete de la carte ( pour voir ou est ton gars sur la minimap) :
Xminimap = Xglobal/W
Yminimap = Yglobal/H

Apres, tu navigues entre les reperes aisément.

( *) juste pour les matheux qui vont gueuler : oui je sais, de la minimap aux autres reperes, on n´a pas une bijection du a la division entiere : on retrouve le haut gauche de case.

JeanYvesYves
JeanYvesYves
Niveau 10
13 août 2004 à 15:29:23

pour les collisions, une méthode simple :

tu connais le point supérieur gauche ( point A) et le coin inférieur droit ( point B) de la boite englobante de ton bonhomme : tu veux tester si il touche un mur :

tu calcules :
Aminimap ( Ax, Ay)
Bminimap ( Bx, By)

tu obtiens une mini boite englobante ( qui fera 2*2 pixels a tout casser si jamais ton objet est de taille normale)
il te suffit de tester chaque pixel de cette miniboite ( tres rapide car mini) et regarder s´il correspond a un pixel de mur ou non
si c´est le cas : alors tu touches.

L´astuce : ton algo ne doit pas etre :
- je bouge
- je regarde si je touche

car dans ce cas, tu t´encastres dans le mur pour voir que tu le touches : et tu ne sors plus !

L´astuce est donc de :
- je calcule la prochaine position de mon gars
- je regarde si je touche
- si je touche, je ne bouge pas, sinon, je bouge ( je valide la prochaine position calculée)

anagram_
anagram_
Niveau 3
13 août 2004 à 15:31:26

Ben encore MERCI !
J´ai bien compris tes explications. Je sais pas comment te remercier. Peut-être en t´envoyant ce pacman une fois terminé, mais je pense que t´as déjà des jeux beaucoup plus évolués.

@+

JeanYvesYves
JeanYvesYves
Niveau 10
13 août 2004 à 15:34:37

pas besoin de me remercier, mais je veux bien voir ton pacman une fois fini :)
pour mes petites créations :
mon site ( cf ma carte de visite) rubrique " mes programmes"
tu verras, il y a déja un jeu avec du " mapping", ( je j´ai appelé Papy, car C un vieux ( je voulais faire un magicien, mais du coup je l´ai appelé Papy)) mais les collisions étaient une ancienne méthode assez foireuse : il y a des cas ou je passe partiellement a travers les murs
( Par contre, j´avais fait l´affaire en pascal a l´époque, mais bon...)

anagram_
anagram_
Niveau 3
13 août 2004 à 15:39:54

Wow ! En pascal, ça doit pas être du gateau.
Je vais explorer tout ça. Ce site est une vraie bible.

Snake_Fisher
Snake_Fisher
Niveau 7
13 août 2004 à 15:42:43

J´aimerais creer un resident evil online ( le outbreak che nous naura pas le mode online)

JeanYvesYves
JeanYvesYves
Niveau 10
13 août 2004 à 15:51:07

anagram_ > merci :) quel niveau mathématique as tu ? ( car il y a plein d´astuces avec les maths comme justement quand je te parlais de changement de repere, de bijections)

Snake_Fisher > si tu es débutant, ne commence pas par ça : tu risques de te casser les dents !

Snake_Fisher
Snake_Fisher
Niveau 7
13 août 2004 à 16:01:32

Mieux vaut commencer par quelque chose de bon trés bon même

JeanYvesYves
JeanYvesYves
Niveau 10
13 août 2004 à 16:04:19

pas du tout.
Enfin bon, c´est toi qui voit.

Snake_Fisher
Snake_Fisher
Niveau 7
13 août 2004 à 16:10:55

Par koi je dois commencer aussi pour mon jeu?

anagram_
anagram_
Niveau 3
13 août 2004 à 16:11:46

Ca fait à peu près deux ans que j´ai arrêté les maths. J´en eu un deug mias. On s´est arrêté aux séries de fourrier ( quelle horreur ! ).

Oui, je crois que je peux utiliser les coordonnées homogènes et des matrices de transformation pour changer de repère. J´ai justement fait un peu d´imagerie cette année et j´ai appris les différents repères dans la modélisation 3D : repère local, repère réel, repère lié au point de vue et repère image 3D.
Mais voilà, on a pour le moment juste appris la théorie du 3D avec un tas d´algos d´éclairement ( dont le lancer de rayon et la radiosité). Mais là ça dépasse le 2D. Je vais sûrement pouvoir me servir de tout ça ; )
C´est bien de matrices de pasage dont tu me parlais ?

JeanYvesYves
JeanYvesYves
Niveau 10
13 août 2004 à 16:15:36

oui, c´est des matrices de passage :)
mais bon, c´est la grosse artillerie, pour changer de repere pour le mapping pas la peine de créer une matrice, suffit de faire 2 additions ou 2 divisions, lol !

ok donc on pourra causer maths si besoin j´ai aussi le DEUG MIAS !

Snake_Fisher
Snake_Fisher
Niveau 7
13 août 2004 à 16:16:49

J´aimerais faire un resident evil online mais je sais pas comment m´y prendre

Ruffi
Ruffi
Niveau 9
13 août 2004 à 16:20:32

Oublie cette idee pour l´instant
Fait quelque chose de plus simple pour commencer

( conseil : insiste pas trop pour faire un resident Evil OnLine, sinon tu va t´en prendre plein la gueule ! :) Te voila prevenu)

anagram_
anagram_
Niveau 3
13 août 2004 à 16:22:46

OK je crois que je me contenterai largement des additions et divisions :)
Merci et @bientôt ! Le moment venu, j´aurai sûrement besoin de tes conseils pour diriger les fantômes et le choix de l´algo ( sûrement A*).

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