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

 C Discussion :

(SDL) Déplacer plusieurs sprites à l'écran


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1
    Par défaut (SDL) Déplacer plusieurs sprites à l'écran
    Bonjour à tous,
    je débute en C et j'essaie de créer un programme où l'on peut déplacer plusieurs sprites à l'écran, par cases de 40px.
    Le problème est que la fonction qui gère le déplacement fonctionne très bien pour le premier, mais le deuxième sprite refuse désespérément de bouger.
    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    int game(ecran)
    {
    	SDL_Surface *perso2 = NULL;
    	SDL_Rect pos2;
    	SDL_Surface *perso = NULL;
    	SDL_Rect pos;
     
    	int i, j;
    	int continuer = 1;
    	SDL_Event event;
     
     
    	SDL_Rect position, position2;
     
    	perso = IMG_Load("mur.jpg");
    	perso2 = IMG_Load("robot.gif");
    	err = IMG_Load("err2.jpg");
     
    	pos.x = 0;
    	pos.y = 0;
     
    	pos2.x = 300;
    	pos2.y = 300;
     
    	SDL_BlitSurface(perso, NULL, ecran, &pos);
    	SDL_BlitSurface(perso2, NULL, ecran, &pos2);
     
    SDL_EnableKeyRepeat(100, 100);
     
    	while(continuer)
    	{
    		SDL_WaitEvent(&event);
    		switch(event.type)
    		{
    		case SDL_QUIT:
    			continuer = 0;
    			break;
     
    		case SDL_KEYDOWN:
     
    			switch(event.key.keysym.sym)
    			{
    			case SDLK_UP:
    				pos2.y++;
    				break;
     
     
     
    			case SDLK_DOWN:
    				pos2.y--;
    				break;
     
     
    			case SDLK_RIGHT:
    				pos2.x++;
    				break;
     
     
    			case SDLK_LEFT:
    				pos2.x--;
    				break;
     
     
    			case SDLK_KP8:
     
    				pos.y--;
    				break;
     
     
    			case SDLK_KP2:
    				pos.y++;
    				break;
     
    			case SDLK_KP6:
    				pos.x++;
    				break;
     
     
    			case SDLK_KP4:
    				pos.x--;
    				break;
     
    			}
     
     
    		}
     
    		position.x = pos.x * BLOC;
    		position.y = pos.y * BLOC;
     
    		position2.x = pos2.x * BLOC;
    		position2.y = pos2.y * BLOC;
     
     
    		SDL_BlitSurface(perso2, NULL, ecran, &position2);
    		SDL_BlitSurface(perso, NULL, ecran, &position);
     
     
    		SDL_Flip(ecran);
    	}
     
    	SDL_EnableKeyRepeat (0, 0);
     
     
    }
    Mais où est le 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 : 44
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Ca serait mieux d'utiliser SDL_PollEvent, regarde dans la FAQ comment faire ou dans mes tutoriels.

    Affiche les positions et regardent s'ils changent.

    Jc

  3. #3
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Tu ne peux pas deplacer plusieurs sprite en meme temps de cette facon.

    SDL_EnableKeyRepeat (X, Y) est une fonction generalement a eviter a mon avis.

    En effet : deja, tu n'es pas sûr que la touche sera repeter toute le Y milliseconde apres X milliseconde.
    De plus, ce n'est que la derniere touche qui est repeter, donc si tu veux deplacer deux sprite en meme temps, seule la derniere touche sera repeter et donc un seul sprite bougera.

    Bon, je peux continuer encore longtemps a depprecier cette fonction, mais je pense que je vais m'arreter.

    Comme la fait remarquer fearyourself, tu ne dois pas utiliser SDL_WaitEvent mais SDL_PollEvent car la premiere est bloquante.
    Cependant, si tu veux savoir a un instant si une touche est pressée, je te conseille de t'orienter vers la fonction SDL_GetKeyState.
    Une recherche avec ce mot clé dans le forum SDL te donnera plus de precision quand a son fonctionnement.

    Voila, avec SDL_PollEvent et SDL_GetKeyState, tu devrait pouvoir gerer le deplacement simultané de deux sprite.

    Pour ce qui est du code, je te conseille de faire une structure "Joueur" regroupant un SDL_Surface*, un SDL_Rect et quatre SDL_Key (qui correspondront aux touche directionnel).
    Tu pourrait ainsi un peu mieux organiser (m'enfin, c'est que mon avis).

    Si tu veux faire du temps réel, il te faudra te diriger vers les timers ainsi que vers la fonction SDL_DisplayFormat (mais apparement tu n'en a pas encore besoins).

    Bonne continuation.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/05/2010, 20h41
  2. Déplacer plusieurs fenêtre en même temps
    Par popo dans le forum Delphi
    Réponses: 12
    Dernier message: 28/05/2007, 11h45
  3. Réponses: 5
    Dernier message: 29/11/2006, 13h55
  4. projet "SDL" en plusieurs fichiers
    Par stokastik dans le forum SDL
    Réponses: 52
    Dernier message: 15/09/2006, 11h16
  5. plusieurs résolutions d'écran
    Par fulgaro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 30/01/2006, 14h35

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