Partage
  • Partager sur Facebook
  • Partager sur Twitter

split écran (SDL 1.2)

    3 mai 2019 à 21:44:16

    Bonjour à tous,

    Je suis entrain d'apprendre comment faire un jeu avec deux personnage qui se déplacent sur la même map mais avec un écran scindé

    Jusqu'à là pas de soucis, mais mon problème apparait lorsque le personnage bouge 

    Je vous montre un bout du code avant d'éxpliquer :

        	while ((boucle)&&((*continuer)))
        	{
        		while (SDL_PollEvent(&event))
           		switch(event.type)
            	{
            	
            		case SDL_QUIT:
                		(*continuer) = 0;
                		break;
            	}
            	        if(keystates[SDLK_q])
                		{
                			//camera1.x-=5;
                			poshero.x-=5;
                		}
                		if(keystates[SDLK_d])
                		{
                			//camera1.x+=5;
                			poshero.x+=5;
                		}
                		if(keystates[SDLK_LEFT])
                		{
                			camera2.x-=5;
                		}
                		if(keystates[SDLK_RIGHT])
                		{
                			camera2.x+=5;
                		}
            	if (camera1.x>=9100)
            	{
            		camera1.x-=5;
            	}
            	if (camera2.x>=9100)
            	{
            		camera2.x-=5;
            	}
            	if (camera1.x<=0)
            	{
            		camera1.x+=5;
            	}
            	if (camera2.x<=0)
            	{
            		camera2.x+=5;
            	}
            	SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
            	//animation(&heroactu,herod,&i);
            	SDL_BlitSurface(background, &camera1, ecran, &posbackg1);
            	SDL_BlitSurface(background, &camera2, ecran, &posbackg2);
    		SDL_BlitSurface(heroactu, NULL, background, &poshero);
    
            	SDL_BlitSurface(bande, NULL, ecran, &posbande);
            	SDL_Flip(ecran);
            }

    Voilà donc je blitte le personnage pas sur l'écran mais plutot sur le background car si c'était sur l'écran, il se déplacerait d'une caméra à l'autre et ce n'est pas le but que je recherche, mais dans le cas contraire sur je le blitte sur le background directement, ben je ne saurais pas vraiment expliquer ce qui arrive sur la photo mais c'est le résultat qui en découle xD

    -
    Edité par MohamedChtourou 3 mai 2019 à 21:46:20

    • Partager sur Facebook
    • Partager sur Twitter
      4 mai 2019 à 11:18:34

      Salut,

      Quand tu blit une image sur une autre, la destination est définitivement marquée. Si tu mets un coup de marqueur sur une toile de maître et que tu en remet un autre 1 cm plus à droite, le premier coup de marqueur sera toujours là. Le seul moyen de les faire disparaître est de repeindre par dessus un truc qui devra ressembler à ce qui est sous le marqueur. Ou carrément repeindre tout le tableau par dessus.

      Dans ton cas, je dirais que tu manques de surfaces. Une image de background est une ressource, pas un espace de travail. Donc soit tu utilises 2 surfaces de travail gauche et droite sur lesquelles tu mets dans l'ordre, les backgrounds du plus éloigné au plus près, ton perso, puis tes foregrounds du plus éloigné au plus près (de la caméra). Ensuite tu blit tes 2 surfaces de travail sur la principale. ça, c'est pour faire simple. à peine plus compliqué consiste à blitter direct sur la surfaces finale en utilisant correctement les arguments de SDL_BlitSurface().

      Bonne continuation.

      • Partager sur Facebook
      • Partager sur Twitter

      Bonhomme !! | Jeu de plateforme : Prototype.

        4 mai 2019 à 16:15:03

        Bonjour, merci de la réponse quoi que je reste un peu confus sur ce que je dois faire correctement,

        En faite ça m'a donné l'idée de charger la "map" sur une autre surface et ainsi blitter la nouvelle surface sur l'ancienne surface. Voici un bout de code qui devrait éclaircir ce que je dis :

                	SDL_BlitSurface(background, &camera1, ecran, &posbackg1);
                	SDL_BlitSurface(background2, &camera1, background, &posbackg1);
                	SDL_BlitSurface(background, &camera2, ecran, &posbackg2);
                	SDL_BlitSurface(background2, &camera2, background, &posbackg2);
        		SDL_BlitSurface(heroactu, &framed[i/4], background, &poshero);
                	SDL_BlitSurface(bande, NULL, ecran, &posbande);

        avec bande c'est le séparateur qui sépare supposé les deux écrans, mais celà reste incorrect ... 

        EDIT :

        Tout compte fait j'ai agis avec ce code ci :

                	SDL_BlitSurface(background, &camera1, ecran, &posbackg1);    	
                	SDL_BlitSurface(background, &camera2, ecran, &posbackg2);
                	SDL_BlitSurface(background2,NULL, background, &posbackg2);
                	SDL_BlitSurface(background2,NULL, background, &posbackg1);
        		SDL_BlitSurface(heroactu, &framed[i/4], background, &poshero);
        		
                	SDL_BlitSurface(bande, NULL, ecran, &posbande);

        ça a réglé le problème, si quelqu'un à une amélioration, je suis toute ouïe :)

        Cordialement,

        Melek chtourou

        -
        Edité par MohamedChtourou 4 mai 2019 à 16:54:19

        • Partager sur Facebook
        • Partager sur Twitter
          4 mai 2019 à 20:14:23

          Re,

          il ne faut rien blitter sur tes backgrounds. Il faut les garder intact.

          Si N est le background le plus éloigné de la caméra, il faut blitter back[N], back[N-1]...back[0] sur "ecran". Pas les backgrounds les uns sur les autres.

          -
          Edité par drx 4 mai 2019 à 20:14:35

          • Partager sur Facebook
          • Partager sur Twitter

          Bonhomme !! | Jeu de plateforme : Prototype.

          split écran (SDL 1.2)

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown