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 :

[SDL] Fenêtre qui plante toujours


Sujet :

SDL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 10
    Points
    10
    Par défaut [SDL] Fenêtre qui plante toujours
    Bonjour à tous.

    Je suis en train de faire un Bomberman avec SDL (pour un projet scolaire) et j'ai déjà un petit soucis quand je crée une fenêtre.
    Enfaite, mon programme se lance, crée la fenêtre, la rempli de couleur etc, mais elle plante directe après (Bomberman.exe ne répond pas blabla blabla). Je poste mon code.
    main.cpp
    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
    #include <iostream>
    #include <vector>
    #include "SDL.h"
    #include "Engine.h"
    #include "Position.h"
    #include "Map.h"
    #include "Bonus.h"
    #include "Block.h"
    #include "Bomb.h"
    #include "Fire.h"
    #include "Player.h"
    #include "Enum.h"
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        Engine engine;
        Position position_a, position_b(10,20), position_c(46,27), position_d(3,1), position_b2(10,20), position_f(1,1), posMap(160, 60);
        Map map;
        Block b1(map.getThisMap(), position_b), b2(map.getThisMap(), position_d), b3(map.getThisMap(), position_d), b4(map.getThisMap(), position_c);
        Block b5(map.getThisMap(), position_d), b6(map.getThisMap(), position_d);
        Bomb bomb1(map.getPlayers()[0]->getThisPlayer()), bomb2(map.getPlayers()[1]->getThisPlayer());
        Fire fire1(bomb2.getThisBomb());
        Player p1(map.getThisMap(), 4);
        Position test(1,1);
     
        SDL_Surface* screen = engine.initWin();
     
        engine.colorSurface(screen, 100, 200, 75);
     
        SDL_Surface* rectangle = engine.initSurface(480, 480, 32);
     
        engine.blitSurface(rectangle, screen, posMap);
     
     
        engine.refreshWin(screen);
        engine.waitWin();
     
        engine.freeSurface(rectangle);
        engine.quitWin();
        return 0;
    }
    Engine.cpp :
    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
    #include "Engine.h"
     
    Engine::Engine() {
     
    }
     
    Engine::~Engine() {
     
    }
     
    //action
    SDL_Surface* Engine::initWin() {
        SDL_Surface* screen;
     
        if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1) {
            fprintf(stderr, "Error load SDL : %s\n", SDL_GetError());
            exit(EXIT_FAILURE);
        }
     
        screen = SDL_SetVideoMode(WIN_WIDTH, WIN_HEIGHT, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
     
        if (screen == NULL) {
            fprintf(stderr, "Error load video mode : %s\n", SDL_GetError());
            exit(EXIT_FAILURE);
        }
     
        SDL_WM_SetCaption("Bomberman", NULL);
     
        return screen;
    }
     
    void Engine::quitWin() {
        SDL_Quit();
    }
     
    void Engine::waitWin() {
        int wait=1;
        SDL_Event event;
     
        SDL_WaitEvent(&event);
        while (wait) {
            switch(event.type) {
                case SDL_QUIT:
                    wait = 0;
            }
        }
    }
     
    void Engine::refreshWin(SDL_Surface* _screen) {
        SDL_Flip(_screen);
    }
     
    SDL_Surface* Engine::initSurface(uint _width, uint _height, uint _color) {
        SDL_Surface* surface;
     
        surface = SDL_CreateRGBSurface(SDL_HWSURFACE, _width, _height, _color, 0, 0, 0, 0);
     
        return surface;
    }
     
    void Engine::blitSurface(SDL_Surface* _surface, SDL_Surface* _ecran, Position _position) {
        SDL_Rect position;
        position.x = _position.getX();
        position.y = _position.getY();
     
        SDL_BlitSurface(_surface, NULL, _ecran, &position);
    }
     
    void Engine::colorSurface(SDL_Surface* _surface, uint _r, uint _g, uint _b) {
        SDL_FillRect(_surface, NULL, SDL_MapRGB(_surface->format, _r, _g, _b));
    }
     
    void Engine::freeSurface(SDL_Surface* _surface) {
        SDL_FreeSurface(_surface);
    }
    Voilà, merci d'avance à ceux qui m'aideront ^^

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Et bah, il va falloir utiliser des techniques de debugguage.

    Vous avez le choix ( ou presque ):

    - Des printf dans le code, pour voir ou cela plante ( moyen comme méthode, mais a fait ses preuves )
    - Le debuggueur, magnifique outil, souvent intégré à l'EDI.

    Pour le debuggueur, il faut lancer le programme dans le debuggueur, et celui ci s'arrêtera à la ligne du crash, ce qui vous aidera beaucoup.Si vous ne savez pas faire, veuillez dire quel système vous utilisez et quel EDI, et je vous expliquerai ( ou quelqu'un d'autre )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Résolu, j'avais mal placé le SDL_WaitEvent(&event); ^^'

  4. #4
    Expert éminent sénior

    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 : 43
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Yaman Voir le message
    Résolu, j'avais mal placé le SDL_WaitEvent(&event); ^^'
    Puis-je faire remarquer que SDL_PollEvent est mieux pour un bomberman ?

    Jc

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par fearyourself Voir le message
    Puis-je faire remarquer que SDL_PollEvent est mieux pour un bomberman ?

    Jc
    Ouep, j'ai changé ensuite, c'était juste au début pour faire mes test thx ^^

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

Discussions similaires

  1. [WD12] Affichage de la description d'une fenêtre qui plante windev
    Par gammon dans le forum WinDev
    Réponses: 0
    Dernier message: 19/02/2014, 12h04
  2. SDL: fenêtre qui s'affiche seulement pour quelque seconde
    Par forgotten_angel dans le forum Débuter
    Réponses: 1
    Dernier message: 24/09/2010, 00h04
  3. Fenêtre console qui ouvre toujours
    Par sawbo1 dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 23/05/2006, 21h27
  4. [JTextArea] redessin qui plante
    Par phil_ma dans le forum Composants
    Réponses: 3
    Dernier message: 04/01/2005, 05h19
  5. [MFC] Ces fenêtres qui ne s'affichent pas..
    Par Davide dans le forum MFC
    Réponses: 3
    Dernier message: 19/11/2003, 11h30

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