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
doctor_kipetfor > désolé, hors sujet. Va voir le topic de Yamidavid " j´aide les débutants dans RPG maker" ![]()
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
http://sdldoc.csn.ul.ie/sdlfreesurface.php
![]()
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 ! :\
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.
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)
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.
@+
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...)
Wow ! En pascal, ça doit pas être du gateau.
Je vais explorer tout ça. Ce site est une vraie bible.
J´aimerais creer un resident evil online ( le outbreak che nous naura pas le mode online)
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 !
Mieux vaut commencer par quelque chose de bon trés bon même
pas du tout.
Enfin bon, c´est toi qui voit.
Par koi je dois commencer aussi pour mon jeu?
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 ?
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 !
J´aimerais faire un resident evil online mais je sais pas comment m´y prendre
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)
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*).