begin process at 2010 02 10 08:40:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Multimédia

 > 

probleme SDL et POO


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme SDL et POO

dimanche 17 juillet 2005 à 14:38:22 | probleme SDL et POO

darmoor

voila je suis encore qu'un débutant dans la matière avec la POO et j'apprend a utiliser SDL

j'ai fait un essai en affichant un image et avec unn SDL_rect qui limite l'affichage de limage, juste un partie:
exemple:
SDL_BlitSurface(image, &rect, screen, NULL);

avec un rect assez petit.

donc a partir de ca je voulais faire un truc plus élaboré avec SDL et des classes

et j'ai fait ça et ca n'affiche pas l'image.
Donc est ce que quelqu'un pourait m'expliquer ce qui n va pas ?

Merci

les codes sources:

SDL.cpp:

#include <stdlib.h>
#include <SDL/SDL.h>
#include "perso.h"

SDL_Surface *LoadBMP(const char *filename);

int main(int argc, char *argv[])
{
    perso *ryu;
    SDL_Surface *screen, *image;
    SDL_Event event;
    bool done = false;
    if(SDL_Init(SDL_INIT_VIDEO) == -1)
    {
        printf("Can't init SDL:  %s\n", SDL_GetError());
        exit(1);
    }
    atexit(SDL_Quit);
    screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);
    if(screen == NULL)
    {
            printf("Can't set video mode: %s\n", SDL_GetError());
        exit(1);
    }
    image = LoadBMP("sprite.bmp");
    ryu = new perso(image);
   
    if(image == NULL)
    {
        printf("Can't load image of tux: %s\n", SDL_GetError());
        exit(1);
    }
   
    ryu->DrawSprite2(screen);
    SDL_FreeSurface(image);
    SDL_UpdateRect(screen, 0, 0, 0, 0);
    while(!done)
    {
        while(SDL_PollEvent(&event))
        {
            switch(event.type)
            {
                case SDL_QUIT:
                done = true;
                break;
            }
        }
    }
    delete ryu;
    return 0;

}

SDL_Surface *LoadBMP(const char *filename)
{
    SDL_Surface *temp, *image1;
    temp = SDL_LoadBMP(filename);
    image1 = SDL_DisplayFormat(temp);
    SDL_FreeSurface(temp);
    return image1;
}


perso.h:

#ifndef __perso_h__
#define __perso_h__

#include <SDL/SDL.h>
#include "const.h"

class perso
{
public:
       perso(SDL_Surface *planche_sprite);
       void SetImage(SDL_Surface *planche_sprite);
       void DrawSprite1(SDL_Surface *target);
       void DrawSprite2(SDL_Surface *target);
       void DrawSprite3(SDL_Surface *target);
       void PosRect(SDL_Rect rect, int x, int y);
protected:
          SDL_Surface *image;
          SDL_Rect rectH1, rectH2, rectH3, rectB1, rectB2, rectB3,
          rectD1, rectD2, rectD3, rectG1, rectG2, rectG3;

};

#endif


perso.cpp :

#include "perso.h"

perso::perso(SDL_Surface *planche_sprite)
{
    SetImage(planche_sprite);
    PosRect(rectH1, largeur_sprite+1, 0);
    PosRect(rectH2, 0, 0);
    PosRect(rectH3, largeur_sprite*2+1, 0);
}

void perso::SetImage(SDL_Surface *planche_sprite)
{
    image = planche_sprite;                           
}

void perso::DrawSprite1(SDL_Surface *target)
{
         SDL_BlitSurface(image, &rectH1, target, NULL);                    
}

void perso::DrawSprite2(SDL_Surface *target)
{
         SDL_BlitSurface(image, &rectH2, target, NULL);                    
}

void perso::DrawSprite3(SDL_Surface *target)
{
         SDL_BlitSurface(image, &rectH3, target, NULL);                    
}


void perso::PosRect(SDL_Rect rect, int x, int y)
{
     rect.x = x;
     rect.y = y;
     rect.w = largeur_sprite;
     rect.h = hauteur_sprite;
}

et pour finir
const.h:

#ifndef __def_h__
#define __def_h__
       
const int largeur_sprite = 24;
const int hauteur_sprite = 32;
       
#endif

voila :) Merci d'avance:)



lundi 24 octobre 2005 à 17:28:18 | Re : probleme SDL et POO

MrdJack

salut,
ton probleme vient surement du fait que dans main() tu réactualise mal le rectangle :
SDL_UpdateRect(screen, 0, 0, 0, 0);
-->SDL_UpdateRect(screen, x, y, x+width, y+height);
bref en réactualisant seulement le pixel en haut a gauche, pas étonant que le reste est noir !!!

voila, je pense que ton probleme est résolu !

remarque :
si tu comptes afficher plusieurs rectangles en meme temps, tu peux les actualiser tous d'un coup avec
SDL_UpdateRects(screen, int num_Rect_A_Actualiser, SDL_RECT *Rectangles);
ça permet de réactualiser seulement les zones où tu as fait des modifs donc gain de perf!


@++

lundi 24 octobre 2005 à 17:29:32 | Re : probleme SDL et POO

MrdJack

oups c'est SDL_UpdateRect(screen, x, y, w, h);
désolé !!!

@++


Cette discussion est classée dans : image, perso, sprite, sdl, surface


Répondre à ce message

Sujets en rapport avec ce message

[SDL] Rotation de sprite [ par kojiro2 ] Coucou tout le monde, je veux faire tourner un sprite sur lui meme c'est a dire que ce sprite tourne entre 0° et 360°.Le pb c'est que j'utilise une co SDL et Surface [ par Kangourou_Nomade ] Je voulais savoir si, en SDL, il était préférable de loader une image a partir d'un fichier au fur et a mesure du déroulement du jeu ou s'il vallait m SDL: afficher un BMP [ par yugiohjcj ] Bonjour,c'est mon deuxième message sur ce forum pour un problème avec SDL.Cette fois, je n'arrive pas à afficher une image BMP.Voici la source:void Sh Problème fenêtre SDL sous Linux [ par Neofabiensama ] Bonjour,Je poste aujourd'hui car je suis à cours d'idée sur un problème de fenêtre SDL. Je travaille actuellement sur un projet de visualisation 2D d' importation image en SDL [ par Richard94 ] Bonjour, voila j'ai un petit probleme en SDL, j'essaye d'importer une image format "xcf" en faisant IMG_load sous codeblocks, mais ça ne marche pas. P calcul perimetre ,surface et moment des regions d une image a niveau de gris [ par stevekitio ] je suis eleve ingenieur a l'ecole nationale superieure polytechnique du cameroun dans le cadre d un projet scolaire il nous a ete demende de prop SDL_Image probleme [ par lansam ] s.v.p  est ce que qlq peut m'aider a afficher une image xcf avec sdl.remarque: j'ai utilisé sdl_ image mais j'ai pas réussit ...voila ce que j'ai fait probléme de linker "SDL" [ par yoshiv ] Bonjour, bonsoir. J'ai un probléme avec un exercice (morpion en SDL) [u]mon system[/u]: vista. visual c++ express 2008. Le code ou il y a le probléme redimentionnement d'image avec sdl [ par mounanedra ] salut, j'ai un problème svp qui me l'aide d'aprés ce lien: http://perso.numericable.fr/fvirtman/info/tuto/2_3_10_resize.cpp je ne compris pas commen Probleme sur les timer (SDL) [ par Loynis94 ] Bonjour, je viens de creer un petit programme censé reproduire une image qui rebondit de gauche à droite et de haut en bas. Mon programme marche au d


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales