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 à 14:34:59

Bonjour,

sous mon apprentissage de la SDL avec le C, j'en arrive à un petit souci :

Créer un projectile..
Donc c'est tout simple : Lorsque j'appuie sur une touche, le projectile part dans la direction voulue (droite ou gauche, en fonction de la position de mon personnage), avec la vitesse etc.. Tout est bon.
Le souci, c'est que j'y ai mis deux variables : tirleft et tirright
Ça donne dans ma gestion évènementielle :d)

int tirright = 0;
Appuie sur T
{
if(perso est vers la droite)
{
tirright = 1;
}
}

if(tirright)
{
positiontir.x++;
}

Bon j'ai utilisé la même image pour la droite ou la gauche (c'est un sorte de laser tout simplement)..

Mais voilà, si j'appuie sur T à nouveau alors que le laser est envoyé, il disparaît logiquement et redémarre sa route.

Voilà le souci, je souhaite tirer à l'infini ! (Ou presque)
Je pourrais faire un tableau du style :d)

tirtableau[100]; (tirer 100 lasers en même temps ça paraît pas mal du tout)

Et pour chaque ligne du tableau je lui donne l'imagine, et quand j'appuie sur T ben on incrémente le suivant, et ça tourne..

Est-ce une bonne idée ? Avez-vous d'autres solutions ? L'idée du tableau n'est-elle pas très coûteuse ?

Si j'ai pas été assez clair je vous file le code : http://pastebin.com/aC9fpzCp (Attention, pas vraiment de commentaires, pas très clean, mais relativement petit et compréhensible)

Merci bien !

Glosoli
Glosoli
Niveau 10
16 septembre 2011 à 14:36:19

"Edit.." :hap:

"je lui donne l'imagine" = je lui donne l'image ! (du sprite laser)

De plus, j'ai pas vraiment développé le titre, mais vous comprenez le principe je pense. :oui: (Le tableau permettrait de faire ça)

guyver2
guyver2
Niveau 10
16 septembre 2011 à 15:34:14

l'idée du tabeau est un bon début. néanmoins tu devrais plutôt utiliser un tableau de pointeur vers ta structure de projectile. Comme ça les projectile qui n'existe pas encore ne prenne pas de place en mémoire. En gros tu crée un projectile quand tu en a besoin (malloc) et tu le supprime quand il disparaît (free), et tu mets a jour ton tableau de pointeurs.
De plus si tes lasers disparaisse dans un ordre différent de leur arrivé tu peux dire lesquels sont encore actif en regardant si la case associée vaut NULL.

Je me suis bcp servi de cette méthode à l'efficacité douteuse mais si simple a mettre en oeuvre :)

Glosoli
Glosoli
Niveau 10
16 septembre 2011 à 16:12:29

Ah mais oui de une malloc ! C'est parfait. :oui:

Je m'en vais tester ça, merci bien guyver !

Odolwan
Odolwan
Niveau 10
16 septembre 2011 à 17:39:09

Je suis d'accord avec guyver, une liste chainée me semble OK pour ton exemple.

Glosoli
Glosoli
Niveau 10
16 septembre 2011 à 18:12:53

Okay Odolwan. :oui: :coeur: ( :hap: )

guyver2
guyver2
Niveau 10
16 septembre 2011 à 18:33:44

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.

caelacanthe
caelacanthe
Niveau 10
16 septembre 2011 à 18:37:17

"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."

:d) d'un autre côté... on n'est pas obligé de gérer des cases vides, ni de nombre de cases limite, avec une liste chaînée. :(

Glosoli
Glosoli
Niveau 10
16 septembre 2011 à 18:45:30

Et comment je fais pour donner à chacune de mes malloc l'image de mon sprite ?

Le = SDL_LoadBMP("tir.bmp"); j'le mets où ?

godrik
godrik
Niveau 30
16 septembre 2011 à 18:47:36

si ils ont tous la meme image, tu veux certainement ne la charger qu'une seule fois en memoire.

caelacanthe
caelacanthe
Niveau 10
16 septembre 2011 à 18:47:46

le mieux serait dans le mettre dans une seule SDL_surface, et de l'afficher plusieurs fois, à l'emplacement des tirs. :hap:

Glosoli
Glosoli
Niveau 10
16 septembre 2011 à 18:56:21

Oui justement :hap:

J'regarde des tutos sur les allocations dynamique à nouveau, ça me permet de l'utiliser enfin. :oui:

Couplé aux pointeurs c'est quand même compliqué :peur: Sachant que j'dois l'assembler aux évènements :peur:

caelacanthe
caelacanthe
Niveau 10
16 septembre 2011 à 19:06:25

l'assembler aux événements? :(

Glosoli
Glosoli
Niveau 10
16 septembre 2011 à 19:10:57

En fait j'ai vraiment du mal. :peur:

J'étudie ça profondément :hap:

+ j'arrive pas encore à imaginer comment ça marche exactement, ma question est abstraite :hap:

Pocolo
Pocolo
Niveau 10
16 septembre 2011 à 20:17:42

Du mal pour quoi spécifiquement?

Glosoli
Glosoli
Niveau 10
16 septembre 2011 à 20:32:26

A schématiser :peur:
Mais j'dois juste bien comprendre le malloc etc.. :oui:

En gros vous pouvez me dire comment ça se présente ?

Je crée ma SDL_Surface (ça crée un pointeur aussi nan ? Etant donné que je fais après : SDL_Surface *ma surface..)

M'ensuite je fais un tableau de pointeurs (de quoi comme taille ? Enfin je sais que malloc ne donne pas de mémoire spécifique, mais y'a quoi dans mon tableau ? Lorsque j'appuie sur ma touche pour tirer ça rajoute une surface dans mon tableau ?)

Pocolo
Pocolo
Niveau 10
16 septembre 2011 à 20:45:22

" Lorsque j'appuie sur ma touche pour tirer ça rajoute une surface dans mon tableau ? "

Comme dit plus une surface (dans le sens SDL_Surface) tu n'en as besoin que d'une seule si tu n'utilise qu'une image.

Quant au tableau, le mieux ca serait un tableau du type de la classe de ton projectile (contenant tout ce dont un seul projectile a besoin pour "exister"), enfin je parle de classe mais tu es en C donc ça serait plutôt une data structure avec des fonction séparées.

Pocolo
Pocolo
Niveau 10
16 septembre 2011 à 20:45:41

" Comme dit plus une surface "

Comme dit plus haut.

Glosoli
Glosoli
Niveau 10
16 septembre 2011 à 21:02:01

D'accord je vois mieux :oui:

J'vous en dirai des nouvelles lorsque j'aurai avancé, merci !

Pocolo
Pocolo
Niveau 10
16 septembre 2011 à 21:08:08

Puis sinon pour rester dans le contexte de la SDL, c'est un SDL_Rect qu'il faudrait attribuer à chacun de tes projectiles, non pas une SDL_Surface justement, celle-ci contient (entre autres) l'information pixel de l'image que tu as mis dedans, tu peux ensuite utiliser cette information a volonté pour afficher les pixels en question n'importe où sur l’écran, en revanche il faut bien plusieurs SDL_Rect vu que ceux-ci définissent l'emplacement des pixels sur l’écran et que chaque projectile aura une position différente.

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