IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

[bug affichage] répétition du sprite lors du déplcement !


Sujet :

SDL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2012
    Messages : 32
    Points : 12
    Points
    12
    Par défaut [bug affichage] répétition du sprite lors du déplcement !
    Bonjour, je bosse sur un petit jeu en SDL

    le tank (l'ennemi) doit lancer cette balle :

    sauf que l'image se répète et ça donne ça :


    parce que dans la destination du apply_surface de cette balle, j'ai mit le background et pas l’écran (screen) , pour que la balle ne suit pas mes déplacements ,

    :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    apply_surface( xxx, yyy, map.BALL, map.background, NULL );
    si je mets apply_surface( xxx, yyy, map.BALL, jeu.screen, NULL ); ça fait pas ce bug mais la balle suit mes déplacements !!


    j'espère que vous m'aidez à régler ce problème

  2. #2
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Pas tous a fait compris (et n’étant pas devin) , je peux pas deviner a quoi correspond les variables et la fonction mais j'ai ma petite idée.

    Bon déjà il faut savoir ce qu'on fait avec la SDL (parce que la ça ressemble a du bricolage).
    les positions x et y dépende du blit , je m'explique :
    imaginons x pour 3 et y pour 5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    apply_surface( xxx, yyy, map.BALL, map.background, NULL );
    tu colle la balle dans 3x et 5y par rapport a la map.background , ça veut dire que si ta map.background et au coordonné 10,10, ça fera (par rapport au repérè de ta fenêtre en haut a gauche 13,15 en tout).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si je mets apply_surface( xxx, yyy, map.BALL, jeu.screen, NULL ); ça fait pas ce bug mais la balle suit mes déplacements !!
    la en aura la balle en 3,5 tout simplement.

    Après je vois pas du tous intérêt de faire des fonctions d'affichage autre que SDL_blitsurface.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2012
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    @Kannagi

    merci pour ta réponse , j'ai utilisé le camera scrolling de loka (sur developpez)
    le background c'est la map et le screen c'est l’écran, ce qui concerne les coordonnées ça je le sait
    ,

    mon problème c'est si j'affiche la balle par rapport à cette map ça fait le bug sur l'image,
    ci je le fait par rapport à l’écran , plus de bug, mais la balle suit mes déplacements sur l’écran), et moi je veux que ça reste dans le même écran parce que c'est l’ennemie qui lance les balles et je contrôle pas ses mouvements

  4. #4
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2012
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Je veux blitter sur l'arière plan et pas l'ecran (celui que j'ai récupéré avec SDL_SetVideoMode()), sans que l'image reste !


  5. #5
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    montre plus ton code , parce que comme ça je vois pas ou est vraiment le souci.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2012
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Kannagi Voir le message
    montre plus ton code , parce que comme ça je vois pas ou est vraiment le souci.
    OK je vais te montrer les parties importantes du code , dans mon init j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jeu.screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );
    l'arrière plan je l'affiche de cette façon :
    PS: apply_surface = SDL_BlitSurface + les coordonées (x,y)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    apply_surface( 0, 0, map.background, jeu.screen, &camera );
    normalement il faut blitter la ball comme ça pour que les anciens balls s'effacent lors du déplacement,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    apply_surface( xBALL, yBALL, map.BALL,  jeu.screen, NULL );
    sauf que dans ce cas la ball suit la &camera et moi je veux quel reste par rapport au coordonnées du background , j'ai mit ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    apply_surface( xBALL, yBALL, map.BALL, map.background, &camera );
    mais la BALL : laisse ses traces lors du déplacement ! , comme l'image suivante



    moi je veux pas que ça laisse ses traces comme ça

    autre image pour que tu comprends le bug :
    (la le jet se déplace en haut et bas)

  7. #7
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Ben oui j'ai compris le problème , vu que tu redessine pas arriérè plan.
    Le problème vient d'une mauvaise architecture de ton jeux , au début du disais "ça fait pas ce bug mais la balle suit mes déplacements !!", si tu incrémente ta balle elle suit pas tes déplacement normalement =P
    Pour ça que j'ai re expliqué comment fonctionne SDL_blitsurface , mais apparemment tu as compris ça.

    Pour être honnête je me demande comment t'as pu construire ton jeu pour qu'il soit si mal foutu ,c'est pas compliqué de faire un blit et une balle qui suit pas le fond ^^'

    Bon on gros si tu fais un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    while(1)
    {
     
        //code
     
     
        SDL_BlitSurface(fond,NULL,ecran,&positionfond); 
        SDL_BlitSurface(perso,NULL,ecran,&position);    
        SDL_BlitSurface(ball,NULL,ecran,&positionball); 
     
    }
    si ta ball se déplace elle ne suit pas la camera(le fond) sur ce code minimaliste , après effectivement il faut des fonctions ect pour gérer le scrolling , et les tir répétitif.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2012
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Tu ma pas compris XD

    de toute façon je suis obligée de blitter certain sprites sur l’arrière plan parce que l’écran (jeu.screen) se déplace avec les touches (flèches),

    c'est ça le principe du camera scrolling (l’écran déplace mais pas le personnage)

    donc y a certain trucs qui doivent rester dans le background (par exemples , les buildings, ennemies ... etc), et si je blitte les ennemies avec l’écran comme destination, logiquement : les ennemies suivent les déplacements de l'écran,

    se que je veux c'est de régler le problème du répétition de l'image sur l'arrière-plan,

    et merci de répondre à mes question , c'est très gentil

  9. #9
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par elhadiDZ Voir le message
    de toute façon je suis obligée de blitter certain sprites sur l’arrière plan parce que l’écran (jeu.screen) se déplace avec les touches (flèches),

    c'est ça le principe du camera scrolling (l’écran déplace mais pas le personnage)

    donc y a certain trucs qui doivent rester dans le background (par exemples , les buildings, ennemies ... etc), et si je blitte les ennemies avec l’écran comme destination, logiquement : les ennemies suivent les déplacements de l'écran,
    Merci je sais je qu'est un scrolling et j'ai déjà fais qql mini jeu utilisant le scrolling + tir repetetif , donc non tu n'es pas obligé de blitter sur le fond.

    Moi je préfères déplacer les positions , chaqu'un son truc , mais cela n’empêche pas que ta ball t'es pas obligé de la blitter au fond mais a écran.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2012
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_BlitSurface(sprite,NULL,ecran,&positionsprite);
    t'es d'accord avec moi que le dernier paramètre "&positionsprite" et la position du sprite (source) par rapport à l'écran (destination),

    donc logiquement si la position de l’écran change , le sprite suit l’écran ,

    ?

  11. #11
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    oui et ? =P

  12. #12
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2012
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Kannagi Voir le message
    oui et ? =P
    XD

    moi je veux pas que certain sprites suivent l'ecran,

    très clairement

    j'ai un background de 6000 X 1024 , la résolution est de : 1024 X 768

    si je mit un sprite au cordonnées (0,300) ( par exemple)
    et je déplace mon écran pour qu'il affiche la partie de 1024 à 2048 X y à y+768
    ce sprite va être dans (1024,y+300) par rapport à l'arrière plan parce que il suit l’écran,
    et moi je veux qu'il reste dans (0,300) du background

    Alors ! je suis obligé de mettre le background comme destination !

  13. #13
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par elhadiDZ Voir le message
    XD

    moi je veux pas que certain sprites suivent l'ecran,
    Je t'ai donné un exemple plus haut.

    Citation Envoyé par elhadiDZ Voir le message
    XD

    j'ai un background de 6000 X 1024 , la résolution est de : 1024 X 768
    Je trouve ça énorme pour ça que j'utilise pas la méthode blitter sur le fond (sans compter que ça passerai pas si tu codais sur une vielle console un rapide calcul de tete 6000*1024 *3 = 18432000 soit 18mo ça passe sur une psp pour faire un jeu (limité a 32 mo) mais bref.
    La résolution est énorme , sans accélération matériel (opengl dans ce cas la) ton jeu ramera.

    Citation Envoyé par elhadiDZ Voir le message
    XD
    si je mit un sprite au cordonnées (0,300) ( par exemple)
    et je déplace mon écran pour qu'il affiche la partie de 1024 à 2048 X y à y+768
    ce sprite va être dans (1024,y+300) par rapport à l'arrière plan parce que il suit l’écran,
    et moi je veux qu'il reste dans (0,300) du background

    Alors ! je suis obligé de mettre le background comme destination !
    Je te le répète tu n'est pas obligé , si tu veux que le perso reste sur le 0 ,300 ben rien t’empêche de le faire , confond pas entre que tu sais pas le faire et obliger hein , parce que j'ai fait du scolling vertical et j'utilisais pas ta méthode (qui a plein de désavantage d'ailleurs).

    Donc je le redit tu peux faire en sorte que tous des éléments blit sur écran et pas sur le fond , si tu veux faire le scrolling (et vu que tu risque de pas trouver la solution avant longtemps ) , tu dois créer un vecteur vitesse (SDL_Rect vitesse par exemple) , quand le perso avance les autres élément 'recules'.

    Voila donc moi je te conseil de bien réfléchir et de mettre en place ce que je t'ai dit.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2012
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    OK, merci

    je vais essayer de régler le problème avec ton idée du vecteur vitesse
    sinon le camera scrolling c'est le même de loka (tuto's developpez)
    non le jeu n'est pas pour une console, et j'ai régler le problème du lag avec :

    le DisplayFormatAlpha

    pour éviter le traitement de l'image, en mettant directement des PNG transparents ,

  15. #15
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2012
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Sorry it was trés stupid error

    il suffit juste d'enlever les coordonnées du camera des coordonnées de ce sprite

    merci pour l'aide , et désolé pour le dérangement

Discussions similaires

  1. [Apache2] Bug Affichage/Chargement incomplet...
    Par Atomicfryer dans le forum Apache
    Réponses: 3
    Dernier message: 27/09/2009, 12h24
  2. [C#] [GDI+] Bug affichage
    Par Tips dans le forum C#
    Réponses: 8
    Dernier message: 05/12/2005, 17h41
  3. [TScrollBox] Bug affichage
    Par Pedro dans le forum Composants VCL
    Réponses: 10
    Dernier message: 14/09/2005, 11h48
  4. Réponses: 5
    Dernier message: 06/08/2002, 20h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo