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

[C] "Décupler" une variable

Glosoli
Glosoli
Niveau 10
16 septembre 2011 à 21:12:04

Oui mais le but de la malloc c'est justement de créer ces SDL_Rect nan ? J'peux pas appréhender le nombre de tir que je fais. A chaque appuie sur t, ça doit me créer un nouveau sprite, et disparaît lorsqu'il a été en collision !

Pocolo
Pocolo
Niveau 10
16 septembre 2011 à 21:17:41

" Oui mais le but de la malloc c'est justement de créer ces SDL_Rect nan ? "

Oui entre autres, enfin si tant est que tu as besoin d'autre chose, je ne sais pas exactement comment ça se présente, seul toi le sais.

Tu peux utiliser "realloc" pour redéfinir la taille du bloque de mémoire à l'emplacement pointé (si il manque de la place, le tout sera alloue sur un autre emplacement en mémoire).

Sinon je te conseil de passer au C++, c'est plus confortable (enfin moi je trouve en tout cas, certains diront peut-être le contraire), tu pourras utiliser des classes avec des méthodes et constructeur/destructeur, puis les opérateurs new et delete au lieu de malloc et free, puis tu pourrais éventuellement utiliser les conteneurs de la librairie standard.

Glosoli
Glosoli
Niveau 10
16 septembre 2011 à 21:24:08

J'ai déjà songé au C++, la SDL me permet juste d'affiner mes connaissances en C !
Mais tu as raison, je vais m'y tourner prochainement, c'est vrai qu'au fur et à mesure mon petit projet se complexifie, et le C n'est pas le meilleur module pour créer des jeux-vidéos.. :oui:

Au moins je fais quelque chose d'un peu poussé, ce qui me permet de me forcer à réfléchir et de trouver des solutions, très bon exercice (même si je viens demander aide ici !)

Je continue de voir tout ça, sur l'alloc' dyna' :oui:

Odolwan
Odolwan
Niveau 10
16 septembre 2011 à 21:29:24

"mmmh j'ai pas conseillé d'utiliser une liste chainée. Meme si c'est certainement plus propre, c'est quand meme plus de boulot a mettre en place correctement qu'un tableau tout bête. "

J'ai lu un peu vite je crois. :noel:

M'enfin bon une liste chainée est très bien quand même pour ce qu'il veut faire.

Au fait Glosoli les collisions, tu maitrises ? :noel:

Glosoli
Glosoli
Niveau 10
16 septembre 2011 à 21:36:38

:rire: Odol :hap:
Ouais à fond, j'ai une maîtrise reconnue par d'autres, j'avais travaillé avec un autre sur son petit projet, et il m'a dit qu'il comprenait rien aux collisions.. :hap:

Nan mais je gère :bave: Regarde dans le pastebin dans le post original, tu y trouves facilement une gestion de collision bien étoffée :hap: :cool:

Sinon j'en arrive aussi à un souci à ce niveau.. Lorsque j'ajoute une surface, lorsque je ne la touche pas, je suis donc soumis à la gravité.. Et donc la gravité est plus lourde (Dragon Ball spotted), et ainsi de suite que j'ajoute une plateforme !

Et donc à chaque fois je dois monter la hauteur du saut.. Et ça me gêne quoi :peur: Alors j'ai pensé que j'devais me mettre au tile mapping, mais ça me plaît pas trop..
Alors j'ai un peu laissé tomber à ce niveau, je reverrai lorsque j'aurai acquis suffisamment de bases pour entamer un vrai jeu présentable :oui:

Glosoli
Glosoli
Niveau 10
16 septembre 2011 à 21:41:26

Ou alors j'ai pas trouvé de solution.. :hap: (Doit y en avoir une, je devrais plus disperser mon code en dehors du main, remplacer par des pointeurs etc.. pour avoir une meilleure gestion de chaque chose)

Et tu peux voir que la gestion animation est bien dégueulasse :peur: Je sais qu'il faut mettre tout ça dans un tableau, mais faut gérer un peu le temps.. Me suis pas encore pris le temps de voir ça.. pourtant y'a pas grand chose à faire :non:

Odolwan
Odolwan
Niveau 10
17 septembre 2011 à 07:42:25

Pour ton problème renseigne toi sur les listes chainées. En gros c'est une sorte de tableau. Les objets sont raccordé les uns les autres par un pointeurs sur l'objet suivant. Mais ils ne se suivent pas en mémoire.

Glosoli
Glosoli
Niveau 10
17 septembre 2011 à 13:38:23

C'est c'que j'ai lu ouaip. :oui:
Faut déjà que je capte bien l'alloc'. :hap:

Pocolo
Pocolo
Niveau 10
17 septembre 2011 à 13:49:56

Qu'est-ce que tu ne comprends pas à ce niveau-là?

Glosoli
Glosoli
Niveau 10
17 septembre 2011 à 13:56:08

Ben j'ai fait que d'lire pour l'instant. J'aurais besoin du sizeof ?

Pocolo
Pocolo
Niveau 10
17 septembre 2011 à 14:08:35

" J'aurais besoin du sizeof ? "

Ce n'est pas indispensable mais plus pratique. C'est simplement une fonction qui renvoie la taille en octets du type en question et vu qu'il faut fournir la taille du bloque de mémoire avec "malloc" il faut connaître la taille du type d’éléments qu'il va contenir.

malloc(5*sizeof(int));

Par exemple alloue de la place pour 5 entiers, sizeof renvoie ici la taille d'un int (en général 4 octets) et on alloue donc 5 fois 4 octets.
Au lieu de mettre "sizeof(int)" on aurait pu mettre directement "4" si on sait qu'un int vaut 4 octets (mais ça peut varier selon les implémentations) ou on aurait encore pu mettre juste "malloc(20);".

A noter que sizeof est particulièrement pratique pour connaître la taille d'un type défini par l'utilisateur (struct ou class par exemple). A noter aussi qu'en C++ avec l’opérateur "new" la taille de l'objet est fourni automatiquement et implicitement.

Glosoli
Glosoli
Niveau 10
17 septembre 2011 à 14:17:53

Yep ça j'ai lu ! Et donc ça servirait donc à s'adapter à la machine sur laquelle le programme tourne surtout ?

Mais comme moi je veux donner la taille de mon sprite, je dois mettre la taille de mon .bmp ?

Pocolo
Pocolo
Niveau 10
17 septembre 2011 à 14:24:49

" Et donc ça servirait donc à s'adapter à la machine sur laquelle le programme tourne surtout ? "

Non, pas spécialement.

" Mais comme moi je veux donner la taille de mon sprite "

Pour? Si tu utilises la SDL les fonctions SDL_LoadBMP ou IMG_Load iront chercher la taille automatiquement.

Glosoli
Glosoli
Niveau 10
17 septembre 2011 à 14:34:12

Ouais d'accord :oui:

Et pour le lier à un tableau de pointeurs ?

J'vois pas trop comment faire.. Je donne quoi comme paramètre à mon tableau ? Et comment les mallocs vont se stocker dedans ?

Pocolo
Pocolo
Niveau 10
17 septembre 2011 à 14:46:27

La fonction malloc renvoie un pointeur void, (pointeur de type non défini, on l'utilise en général avec une conversion de type explicite (casting)).

Truc *trucs;
trucs = (Truc*) malloc(10*sizeof(Truc));

Alloue de l'espace pour 10 "Truc" dans un emplacement libre en mémoire et renvoie l'adresse de cet emplacement (concrètement l'adresse du premier octet de tous les octets occupés par nos 10 Truc, a noter aussi la conversion de type (Truc*) nécessaire car comme je l'ai dit plus haut malloc renvoie un pointeur void).

Après tu peux utiliser ton pointeur comme un tableau, par exemple trucs[2] pointe vers le troisième Truc, c'est pareil que "trucs+2", en imaginant que la taille d'un truc est de 50 octets on ajoute donc 100 a l'adresse contenu dans le pointeur "trucs" pour pointer sur le troisième Truc.

Glosoli
Glosoli
Niveau 10
17 septembre 2011 à 16:14:09

Merci Pocolo pour les explications :oui:

J'ai suffisamment de réponses sur ce topic pour pouvoir faire quelque chose !

Glosoli
Glosoli
Niveau 10
21 septembre 2011 à 01:07:50

Bon voilà, j'ai tenté quelque chose..

http://pastebin.com/qWNZRP77

M'alors ça tourne tout ça, mais rien de spécial ne se passe !

Je pense que ce doit être un problème de sélection du tir..En tout cas de position du tir ou de déplacement. Bref. :snif:

J'espère que vous arriverez à lire le code ! Tout en haut je déclare un typedef struct, vers le haut du main je déclare le tableau de cette structure, et dans la gestion collision, lorsque j'appuie sur t, y'a tout c'qui devrait se passer !

Merci d'avance !

Glosoli
Glosoli
Niveau 10
21 septembre 2011 à 16:38:15

C'est ok !

En fait, dans SDLK_t, après les trois lignes :d)

tableautesttir[i].postirtest.x = posperso.x;
tableautesttir[i].postirtest.y = posperso.y;
tableautesttir[i].remplis = 1;

Il faut tout simplement mettre un break ! Sinon y'a booltirright = 1; (ce petit booléen qui me dit quand je dois avancer ou non mon sprite tir), il continue son chemin sans se soucier d'autre chose.. :hap:

Bref, en fait pour en arriver à ça faut quand même réfléchir.. :hap:
Quelle satisfaction d'en arriver à tirer plusieurs fois mes missiles là :bave:

Pocolo
Pocolo
Niveau 10
21 septembre 2011 à 21:48:46

J'ai pas tout regarder en détail mais sache que c'est quand même assez moche comme code et il y a beaucoup de fautes (mais c'est normal quand on débute), notamment (et ça pourtant été répété au moins TROIS fois par différentes personnes sur ce topic, tu n'écoutes pas ce que les autres te disent) le fait qu'il ne faut pas (vraiment pas) mettre plusieurs fois la même image en mémoire, ton programme est rempli de memory leaks (fuites de mémoires), c'est très mauvais ça.

Glosoli
Glosoli
Niveau 10
21 septembre 2011 à 22:37:11

Ben c'déjà pas mal comme ça :snif:

Mais l'image se charge seulement lorsqu'on appuie sur t non ?

Sinon j'dois aller sur la méthode realloc, c'pas mon fort ça..

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