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 :

Rien ne se passe :s


Sujet :

SDL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Par défaut Rien ne se passe :s
    Bonjour à tous. J'essaye de programmer un editeur de niveaux pour mon jeu.
    Quand l'utilisateur clique dans la fenetre, il ajoute 1 ou 2 au tableau carte à l'endroit correspondant. Ensuite, il boucle pour afficher tout ce qui à été jouté sur le terrain. Mais moi, rien ne se passe. Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include "lvledit.h"
    #include "affichage.h"
    #include "fichiers.h"
     
    void editeur(SDL_Surface* ecran)
    {
        //Creation des variables
        SDL_Surface *arbre = NULL, *rocher = NULL;
        SDL_Surface *imageDeFond = NULL;
        SDL_Rect position;
        SDL_Event event;
        int carte[48][48] = {0};
        int continuer=1;
        int i = 0;
        int j = 0;
        int currentobjet = 1; //1=rocher 2=arbre 0=vide
     
        // Chargement des objets et du niveau
        arbre = SDL_LoadBMP("arbre.bmp");
        rocher = SDL_LoadBMP("rocher.bmp");   
     
        //affichage du fond
        imageDeFond=make_background(ecran);
        //Boucle principale
        while(continuer) {
            switch(event.type) {
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym) {
                        case SDLK_s:
                            //Ici on sauvgarde la map
                            printf("Je sauvgarde la map");
                            sauvcarte(carte);
                            break;
                        case SDLK_a:
                            //Ici on quitte sans sauvgarder
                            exit(EXIT_FAILURE);
                            break;
                        case SDLK_KP1:
                            currentobjet=1;
                            break;    
                        case SDLK_KP2:
                            currentobjet=2;
                            break;
                        default:break;
                    }
                    break;
     
                case SDL_MOUSEBUTTONDOWN:
                    if (event.button.button == SDL_BUTTON_LEFT) { //Bouton gauche on
                        //ajoute le brush courant
                        printf("Je clique avec le bouton gauche");
                        carte[event.button.x / 20][event.button.y / 20] = currentobjet;
     
                    }
                    else if (event.button.button == SDL_BUTTON_RIGHT) { //On supprim
                        //-me le brush selectionner
                        printf("Je clique avec le bouton droit");
                        carte[event.button.x / 20][event.button.y / 20] = 0;
                    }
                    break;
                default:break;
            }
            for (i = 0 ; i < 48 ; i++)
            {
                for (j = 0 ; j < 48 ; j++)
                {
                    position.x = i * 20;
                    position.y = j * 20;
                    switch(carte[i][j])
                    {
                        case 1:
                            SDL_BlitSurface(rocher, NULL, ecran, &position);
                            break;
                        case 2:
                            SDL_BlitSurface(arbre, NULL, ecran, &position);
                            break;
                        default:break;
                    }
                }
            }
            // Mise à jour de l'écran
            SDL_Flip(ecran);
        }
        //Liberation des images
        SDL_FreeSurface(imageDeFond);
        SDL_FreeSurface(arbre);
        SDL_FreeSurface(rocher);
    }
    Avez vous une idée pour résoudre se problème ?

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Mais moi, rien ne se passe.
    C'est un peu vague...

    Avec ton code, on ne peut pas lancer le programme pour comprendre ce qui ne se passe pas...

    Ton code a l'air plus ou moins correct à part que tu ne testes pas le retour des SDL_LoadBMP ou de ta fonction make_background...

    Ensuite tu ne mets pas l'image de fond, est-ce normal?

    Enfin, où est le code d'initialisation SDL, dans le main?

    En gros, si tu faisais un code minimal exécutable, on pourrait mieux aider... Dans ton cas, tu pourrais limiter le code au main et à ta fonction editeur... Cela nous suffirait pour voir le problème...

    Jc

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Par défaut
    Je vais essayer de faire ça .
    Cette fonction est effectivement appellée par une fonction main qui lance la SDL et qui affiche un fond.
    Ca ne marche pas
    En fait, quand je clique, aucune sprite ne s'affiche.

  4. #4
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Par défaut
    SDL_BlitSurface(rocher, NULL, ecran, &position);
    c'est où que tu récupère ta position ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Par défaut
    Voici où je trouve position:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
                for (j = 0 ; j < 48 ; j++)
                {
                    position.x = i * 20;
                    position.y = j * 20;
                    switch(carte[i][j])
                    {
                        case 1:
                            SDL_BlitSurface(rocher, NULL, ecran, &position);
                            break;
                        case 2:
                            SDL_BlitSurface(arbre, NULL, ecran, &position);
                            break;
                        default:break;
                    }
                }

  6. #6
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Par défaut
    oups, j'avais pas vu ^^

    pourrais tu mettre le main ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. mysqld_multi : rien ne se passe
    Par Christophe P. dans le forum Administration
    Réponses: 3
    Dernier message: 18/08/2006, 15h35
  2. Export WAR, rien ne se passe
    Par hatifnatte dans le forum Eclipse Java
    Réponses: 9
    Dernier message: 28/07/2006, 12h10
  3. RollOver rien ne se passe
    Par hisy dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/07/2006, 09h53
  4. [vb.net][requete]rien ne se passe
    Par Alex35 dans le forum VB.NET
    Réponses: 3
    Dernier message: 23/11/2005, 13h00
  5. [FLASH MX2004] Rien ne se passe qd j'execute mon code
    Par adilou1981 dans le forum Flash
    Réponses: 2
    Dernier message: 27/07/2005, 23h31

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