Probléme de blittage avec découpage d'un sprite

Le tutoriel en ligne vous pose quelques problèmes ? C'est ici pour en parler !

Probléme de blittage avec découpage d'un sprite

Messagede hbx360 le 25 Avr 2011 07:18

Bonjour, j'ai voulu faire le principe de la barre de tâche mozilla ou windows ou quand on passe par exemple la souris sur fichier ou sur édition sa devient bleu le problème c'est que je n'arrive pas à y faire fonctionné ; j'ai voulu découpé mon image (la barre de tache qui et surligné en bleu)comme pour une feuille de sprite et blitté juste la parti fichier ou édtion mais cela ne marche pas sauf si je supprimes le deuxième if qui indique le position de la souris dans la zone édition et le 2 eme if qui indique la position de la souris quand celle-ci n'est pas sur la barre de tache..

Si vous pouviez m'aider à résoudre mon problème ce serait sympa; merci par avance.

Voici mon code plus les 2 sprites de barre de tache celle grisé et celle en bleu à télécharger avec MU si vous voulez faire le test :
http://www.megaupload.com/?d=99DV3Z5J BarreDeTache.bmp
http://www.megaupload.com/?d=EIWZRW9H BarreDeTacheEnBleu.bmp



Code: Tout sélectionner
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <SDL_image.h>


int main(int argc, char *argv[])
{


    SDL_Surface *ecran = NULL, *imageDeFond = NULL, *BarreDeTacheGrise = NULL, *BarreDeTacheBleu = NULL;

    SDL_Rect positionFond, posBarreDeTacheGrise, posBarreDeTacheBleu, posBarreDeTache3[2];

    int x = 0, y = 0;

    int continuer = 1;

    SDL_Event event;

    positionFond.x = 0;
    positionFond.y = 0;

    posBarreDeTacheGrise.x = 0;
    posBarreDeTacheGrise.y = 0;

posBarreDeTache3[0].x = 0;
posBarreDeTache3[0].y = 0;
posBarreDeTache3[0].w = 45;
posBarreDeTache3[0].h = 24;

posBarreDeTache3[1].x = 45;
posBarreDeTache3[1].y = 0;
posBarreDeTache3[1].w = 51;
posBarreDeTache3[1].h = 24;

    SDL_Init(SDL_INIT_VIDEO);

    SDL_WM_SetIcon(IMG_Load("sdl_icone.bmp"), NULL);

    ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE);
    SDL_WM_SetCaption("Chargement d'images en SDL", NULL);
   
    BarreDeTacheGrise = IMG_Load("BarreDeTache.bmp");
    SDL_BlitSurface(BarreDeTacheGrise, NULL, ecran, &posBarreDeTacheGrise);

    BarreDeTacheBleu = IMG_Load("BarreDeTacheEnBleu.bmp");

   while (continuer)
    {

SDL_WaitEvent(&event);

        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_MOUSEBUTTONUP:

                if (event.button.button == SDL_BUTTON_RIGHT)
                continuer = 0;

            case SDL_MOUSEMOTION:

                x = event.motion.x;
                y = event.motion.y;

if ((x > posBarreDeTacheGrise.x) && (x < posBarreDeTacheGrise.x + posBarreDeTacheGrise.w-334)&&(y > posBarreDeTacheGrise.y) && (y < posBarreDeTacheGrise.y + posBarreDeTacheGrise.h))
                       {
                      SDL_BlitSurface(BarreDeTacheBleu, posBarreDeTache3, ecran, &posBarreDeTache3[0]);
                       }

if ((x > 45) && (x < 96)&&(y > posBarreDeTacheGrise.y) && (y < posBarreDeTacheGrise.y + posBarreDeTacheGrise.h))
                       {
                       SDL_BlitSurface(BarreDeTacheBleu, posBarreDeTache3, ecran, &posBarreDeTache3[1]);
                       }


if (!((x > 0) && (x <45)&&(y > posBarreDeTacheGrise.y) && (y < posBarreDeTacheGrise.y + posBarreDeTacheGrise.h)))
                       {
                       SDL_BlitSurface(BarreDeTacheGrise, NULL, ecran, &posBarreDeTacheGrise);
                       }


if (!((x > 45) && (x < 96)&&(y > posBarreDeTacheGrise.y) && (y < posBarreDeTacheGrise.y + posBarreDeTacheGrise.h)))
                       {
                       SDL_BlitSurface(BarreDeTacheGrise, NULL, ecran, &posBarreDeTacheGrise);
                       }

                break;

            case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {   case SDLK_ESCAPE:
                        continuer = 0;
                        break;

                    default:
                break;
                }

                break;
}


SDL_Flip(ecran);
   }

    SDL_FreeSurface(imageDeFond);
    SDL_FreeSurface(BarreDeTacheGrise);
    SDL_FreeSurface(BarreDeTacheBleu);

    SDL_Quit();

    return EXIT_SUCCESS;
}

hbx360
Bébé Chocobo
Bébé Chocobo
 
Messages: 6
Inscription: 25 Avr 2011 07:03

Re: Probléme de blittage avec découpage d'un sprite

Messagede Vally8 le 25 Avr 2011 18:04

désolée, mais y'a plus personne ici qui peut t'aider sur le SDL. Y'a une question qui me turlupine quand même : comment ca se fait que vous êtes si nombreux tout d'un coup à arriver sur le site pour le SDL ? Tu as trouvé le site via google ? Il est linké quelque part ?
Moi, j'aime schtroumpfer...
Si vous voulez faire une soluce, plutôt que de m'envoyer un MP, postez-là ici (j'ai rarement le temps de répondre à tous les MP)
Avatar de l’utilisateur
Vally8
Gouroute du Site
Gouroute du Site
 
Messages: 15567
Inscription: 07 Mai 2004 18:14
Localisation: Au pays des schtroumpfs
Jeu(x) du moment: Professor Layton, Tales of Vesperia, Dragon Quest 9

Re: Probléme de blittage avec découpage d'un sprite

Messagede hbx360 le 25 Avr 2011 21:20

Non ton site je dois le connaître depuis un peu plus d'un an environ mais comme j'apprenais par intermittence sur un autre site assez connu je ne venais que très rarement ici pour regarder le tuto d'animation des sprites mais à cette époque je n'en était pas là et je dois dire que c'est assez difficile pour moi de comprendre le tuto après, j'ai perdu ton site de vu ; j'ai repris un peu la programmation il y a environ 2 mois mais je ne suis pas très assidu et comme je cherches de l'aide pour m'aider à trouver les erreurs dans mon programme je cherches sur différent forum de l'aide qui est assez difficile à trouvé d'ailleurs souvent c'est débrouille toi par toi même des fois je tombe sur des gens sympa qui me dise ou sont mes erreur et d'autre c'est d'é... .

En faite j'ai retrouvé ton site en tapant tous simplement animation sprites sur google ; mais c'est bizarre pourquoi demande tu ça plus personne ne vient sur ton site ton forum ou tu ne veut plus que des gens s'inscrive il est vrais que tes critères pour garder un compte chez toi son assez stricte et surement difficilement à appliquer je pense que c'est dommage mais bon tu as tes raison.

Salut.

Ps. : ce n'est pas une critique mais une discussion, une observation.
hbx360
Bébé Chocobo
Bébé Chocobo
 
Messages: 6
Inscription: 25 Avr 2011 07:03

Re: Probléme de blittage avec découpage d'un sprite

Messagede hbx360 le 25 Avr 2011 21:29

A oui au faite j'ai trouvé ou était mon problème pour le collage des sprites découpés mais maintenant ma difficulté est de les faire blitté à chaque fois que ma souris passe sur fichier ou édition je pense que mon problème vient de la façon dont sont agencé placé mes if voici mon code :

Ps vally si tu sais ou sont mes erreurs n'hésite pas à me le dire ce serait sympa vu que tu y touche en programmation C.

Code: Tout sélectionner
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <SDL_image.h>


int main(int argc, char *argv[])
{


    SDL_Surface *ecran = NULL, *imageDeFond = NULL, *BarreDeTacheGrise = NULL, *BarreDeTacheBleu = NULL;

    SDL_Rect positionFond, posBarreDeTacheGrise, posBarreDeTacheBleu, posBarreDeTache3[2], offset[2];

    int x = 0, y = 0;

    int continuer = 1;

    SDL_Event event;

    positionFond.x = 0;
    positionFond.y = 0;

    posBarreDeTacheGrise.x = 0;
    posBarreDeTacheGrise.y = 0;

offset[0].x = 0;
offset[0].y = 0 ;

offset[1].x = 45;
offset[1].y = 0;

posBarreDeTache3[0].x = 0;
posBarreDeTache3[0].y = 0;
posBarreDeTache3[0].w = 45;
posBarreDeTache3[0].h = 24;

posBarreDeTache3[1].x = 45;
posBarreDeTache3[1].y = 0;
posBarreDeTache3[1].w = 51;
posBarreDeTache3[1].h = 24;

    SDL_Init(SDL_INIT_VIDEO);

    SDL_WM_SetIcon(IMG_Load("sdl_icone.bmp"), NULL);

    ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE);
    SDL_WM_SetCaption("Chargement d'images en SDL", NULL);

    BarreDeTacheGrise = IMG_Load("BarreDeTache.bmp");
    SDL_BlitSurface(BarreDeTacheGrise, NULL, ecran, &posBarreDeTacheGrise);

    BarreDeTacheBleu = IMG_Load("BarreDeTacheEnBleu.bmp");

   while (continuer)
    {

SDL_WaitEvent(&event);

        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_MOUSEBUTTONUP:

                if (event.button.button == SDL_BUTTON_RIGHT)
                continuer = 0;

            case SDL_MOUSEMOTION:

                x = event.motion.x;
                y = event.motion.y;

if ((x > posBarreDeTacheGrise.x) && (x < posBarreDeTacheGrise.x + posBarreDeTacheGrise.w-334)&&(y > posBarreDeTacheGrise.y) && (y < posBarreDeTacheGrise.y + posBarreDeTacheGrise.h))
                       {
                      SDL_BlitSurface(BarreDeTacheBleu, &posBarreDeTache3[0], ecran, &offset[0]);
                       }

if ((x > 45) && (x < 96)&&(y > posBarreDeTacheGrise.y) && (y < posBarreDeTacheGrise.y + posBarreDeTacheGrise.h))
                       {
                       SDL_BlitSurface(BarreDeTacheBleu, &posBarreDeTache3[1], ecran, &offset[1]);
                       }

if (!((x > posBarreDeTacheGrise.x) && (x < posBarreDeTacheGrise.x + posBarreDeTacheGrise.w-334)&&(y > posBarreDeTacheGrise.y) && (y < posBarreDeTacheGrise.y + posBarreDeTacheGrise.h)))
                       {
                       SDL_BlitSurface(BarreDeTacheGrise, NULL, ecran, &posBarreDeTacheGrise);
                       }
if (!((x > 45) && (x < 96)&&(y > posBarreDeTacheGrise.y) && (y < posBarreDeTacheGrise.y + posBarreDeTacheGrise.h)))
                       {
                       SDL_BlitSurface(BarreDeTacheGrise, NULL, ecran, &posBarreDeTacheGrise);
                       }

                break;

            case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {   case SDLK_ESCAPE:
                        continuer = 0;
                        break;

                    default:
                break;
                }

                break;
}


SDL_Flip(ecran);
   }

    SDL_FreeSurface(imageDeFond);
    SDL_FreeSurface(BarreDeTacheGrise);
    SDL_FreeSurface(BarreDeTacheBleu);

    SDL_Quit();

    return EXIT_SUCCESS;
}
hbx360
Bébé Chocobo
Bébé Chocobo
 
Messages: 6
Inscription: 25 Avr 2011 07:03

Re: Probléme de blittage avec découpage d'un sprite

Messagede 6trouille le 25 Avr 2011 22:21

Sans vouloir répondre à la place de Vally, en fait elle doit s'interroger car le forum (qui n'est pas axés sur la programmation à la base mais qui possédait quand même ce petit coin qui y était dédié) n'a quasiment jamais vu personne sur le coin programmation quand on avait qqn pour répondre aux éventuelles questions ... et que maintenant qu'il n'y a plus personne, bah on a de plus en plus de monde qui se pointe et pose des questions :oui: :D

Bref je pense que c'est ça qui doit piquer sa curiosité :oui: ;)

Bon, sur ce, je laisse la suite aux autres au cas où certains puissent te répondre car moi j'y connais que dalle en programmation :D
La vitesse de la lumière étant supérieure à la vitesse du son, il est normal que certains paraissent brillants avant d'ouvrir la bouche ;)
Avatar de l’utilisateur
6trouille
Gourou Star Ocean
Gourou Star Ocean
 
Messages: 23713
Inscription: 07 Mar 2005 21:47
Localisation: Somewhere
Le jeu qui vous a fait connaître le site: Star Ocean 'till the End of Time

Re: Probléme de blittage avec découpage d'un sprite

Messagede val le 26 Avr 2011 06:03

oui, c'est exactement ce que trouille a dit ... Non pas que je ne veuille pas que l'on s'incrive sur le site ou que le site n'a pas de visites (2500 visiteurs par jour, on est à 13 Millions de visiteurs depuis l'ouverture, c'est pas un pb de visites...)
Mais ca m'amuse pas des masses de dire à des gens qui se sont inscrits que malheureusement on ne peut pas les aider, c'est avant tout un forum d'entraide ici, même si à la base, c'est plus pour les RPGs ^^

J'ai pas de quoi compiler du C - SDL et j'ai pas touché à du C depuis très longtemps.
La ton code il fait quoi exactement ?
Moi, j'aime schtroumpfer !
Avatar de l’utilisateur
val
Chocobo des montagnes
Chocobo des montagnes
 
Messages: 1829
Inscription: 11 Juin 2010 06:55

Re: Probléme de blittage avec découpage d'un sprite

Messagede ark le 26 Avr 2011 09:34

Beurk, je hais les moteurs graphiques, c'est toujours plein de vilaines fonctions dédiées obscures.
J'avais fais un moteur SDL qui tournait pas trop mal pourtant à l'époque (et que j'avais du transformer à l'arrache en opengl parce que j'ai découvert que SDL était interdit pour le jeu et autorisé que pour le menu) mais comme tout ce qu'on fait en un weekend et qu'on ne retouche plus jamais ensuite, on oublie très très très vite.
Je dois même plus avoir mes sources et pareil, plus de quoi compiler ce genre de conneries.
De toute façon, c'est po moi qui aurait pu te donner des conseils pointus.
Le truc dont je me rappelle le mieux c'est comment j'ai géré les controles de la palette du casse brique pour qu'elles répondent parfaitement bien même quand on faisait n'importe quoi. En gros, un truc qui t'aidera pas du tout ^^.
Merci.
Avatar de l’utilisateur
ark
Chocobo montage
Chocobo montage
 
Messages: 4207
Inscription: 03 Mai 2005 13:40
Localisation: seine st denis
Le jeu qui vous a fait connaître le site: Star Ocean III

Re: Probléme de blittage avec découpage d'un sprite

Messagede hbx360 le 26 Avr 2011 17:19

Merci pour vos commentaires je comprend mieux à présent ; laissez tombé pour le programme je vais continué à cherché sur le net en tout cas bonne continuation.

Saaaluuut.
hbx360
Bébé Chocobo
Bébé Chocobo
 
Messages: 6
Inscription: 25 Avr 2011 07:03


Retourner vers Besoin d'aide en SDL ?

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron