Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Matoux

Pages: [1]
1
Général / Re : Problème affichage sprites
« le: Avril 25, 2013, 09:53:00 am »
Merci de ta réponse Black Templar.
En fait, tout les attributs en trop datent du temps où j'avais mis tout mon programme dans mon main.
Je les supprimes au fur et à mesure, mais il y a certain rescapés  ;).
Si non, la boucle que j'est mise en plus, c'est parce que quand je l'enlève, je ne sais pas pourquoi, le scrolling
ne marche pas vers la gauche.
Effectivement, quand je réinitialise "y", il y a un changement:



Matoux

2
Général / Problème affichage sprites
« le: Avril 24, 2013, 12:01:59 am »
Salut à tous!

J'ai décidé de faire un jeu de plateforme en SFML.

Au début, je faisait tout mon programme dans mon main (oui, c'est crade, je sais :P), et il marchais très bien!

Mais j'ai décidé de découper mon programme en plusieurs fonctions ou classes, et je rencontre un problème à l'affichage de mon décor:

toute la ligne des premiers blocs est remplacé par une barre de la couleur du raffraichissement de l'écran.

capture d'écran:



Comme vous vous en doutez, j'aimerai bien que quelqu'un m'explique pourquoi, ou, au mieux, me donne une solution ;D.

Je remercie d'avance tout ceux qui vont faire un post sur ce sujet ;).

Et, bien sur, je vous met les fichier concernés par ce problème(vous allez surement trouver que le code est peu synthétique, mais je code depuis peu, et c'est mon premier "gros" projet, sans l'appuie d'un tuto):

main.cpp:

#include "Screen.h"
#include "Personnage.h"
 
using namespace sf;
 
int main()
{
RenderWindow prog(VideoMode(1216, 684), "Test.exe");
int yScreen(prog.GetHeight()/38), ind(38), indR(38), finX(0);
double indT(0), constt(0.027);
char pos('d');
bool droite(false), gauche(false), haut(false), bas(false);
Clock timer, timerMarche;
Event event;
Screen screen(yScreen);
screen.chargementLvl(1);
finX=(screen.getfichierLvlsize()-prog.GetWidth()/38)*38;
prog.UseVerticalSync(true);
while(prog.IsOpened())
{
    while(prog.GetEvent(event))
    {
        switch  (event.Type)
{
case  Event::Closed :
prog.Close();
break;
case  Event::KeyPressed :
{
switch  (event.Key.Code)
{
case  Key::Escape :
prog.Close();
break;
case Key::Right :
droite=true;
pos='d';
ind=0;
timerMarche.Reset();
break;
case Key::Left :
gauche=true;
pos='g';
indR=0;
timerMarche.Reset();
break;
case Key::Down :
bas=true;
haut=false;
break;
case Key::Up :
haut=true;
bas=false;
break;
default  :
break;
}
}
break;
case Event::KeyReleased :
{
    switch (event.Key.Code)
    {
        case Key::Right :
        droite=false;
        break;
        case Key::Left :
        gauche=false;
        break;
        case Key::Down :
        bas=false;
        break;
        case Key::Up :
        haut=false;
        break;
        default :
        break;
    }
}
break;
default  :
break;
}
    }
    prog.Clear(Color(2, 255, 255));
    screen.scroling(ind, indR, prog.GetWidth(), gauche, droite);
    for (int i(0); i<yScreen; i++)
        {
    for (int j(0); j<screen.getfichierLvlsize(); j++)
    {
        prog.Draw(screen.getSprite(j, i));
    }
        }
    prog.Display();
}
return EXIT_SUCCESS;
}

 

Screen.h:

#ifndef SCREEN_H_INCLUDED
#define SCREEN_H_INCLUDED
#include <SFML/Graphics.hpp>
#include <fstream>
#include <string>
#include <iostream>
#include <vector>
 
using namespace sf;
 
class Screen
{
    public:
 
    Screen(int yS);
    ~Screen();
    void chargementLvl(int nomLvl);
    int getfichierLvlsize() const;
    Sprite getSprite(int j, int i);
    void scroling(int indt, int indtR, int w, bool gauche=false, bool droite=false);
 
 
    private:
 
    Image *Zero, *Un, *Deux, *Trois, *Quatre, *Cinq, *Six, *Sept;
    int y, x, yScreen, finX, ind, indR, indDX;
    Sprite **screen;
    int **xScreen;
    std::ifstream *fluxFichierLvl;
    std::string ligne;
    std::vector<std::string> fichierLvl;
    double indT, constt;
    Clock timer;
};
 
#endif // SCREEN_H_INCLUDED

 

Screen.cpp:

#include "Screen.h"
 
Screen::Screen(int yS)
{
    int y(0), x(0);
    Zero= new Image;
    Un= new Image;
    Deux= new Image;
    Trois= new Image;
    Quatre= new Image;
    Cinq= new Image;
    Six= new Image;
    Sept= new Image;
    Zero->LoadFromFile("fond.png");
    Un->LoadFromFile("bloc.png");
    Deux->LoadFromFile("sol.png");
    Trois->LoadFromFile("bloqueBonus.png");
    Quatre->LoadFromFile("murCassable.png");
    Cinq->LoadFromFile("pics.png");
    Six->LoadFromFile("plateformeTraversableBas.png");
    Sept->LoadFromFile("plateformeTraversableHaut.png");
    constt=0.027;
    ind=38;
    indR=38;
    finX=0;
    indDX=0;
    yScreen=yS;
}
 
Screen::~Screen()
{
    for (int i(0); i<fichierLvl[0].size(); i++)
{
    delete screen[i];
    delete xScreen[i];
}
    delete screen;
    delete fluxFichierLvl;
    delete xScreen;
    delete Zero;
    delete Un;
    delete Deux;
    delete Trois;
    delete Quatre;
    delete Cinq;
    delete Six;
    delete Sept;
}
 
int Screen::getfichierLvlsize() const
{
    return fichierLvl[0].size();
}
 
void Screen::chargementLvl(int nomLvl)
{
    if (nomLvl==1)
    {
        fluxFichierLvl= new std::ifstream("lvl.txt");
    }
    else if(nomLvl==2)
    {
    }
    else if(nomLvl==3)
    {
    }
    else if(nomLvl==4)
    {
    }
    else if(nomLvl==5)
    {
    }
    else if(nomLvl==6)
    {
    }
    else if(nomLvl==7)
    {
    }
    else if(nomLvl==8)
    {
    }
    else if(nomLvl==9)
    {
    }
    else if(nomLvl==10)
    {
    }
while(getline(*fluxFichierLvl, ligne))
{
    fichierLvl.push_back(ligne);
}
screen= new Sprite*[fichierLvl[0].size()];
xScreen= new int*[fichierLvl[0].size()];
for (int i(0); i<fichierLvl[0].size(); i++)
{
    screen[i]=new Sprite[yScreen];
    xScreen[i]=new int[yScreen];
}
for (int i(0); i<yScreen; i++)
{
    for (int j(0); j<fichierLvl[0].size(); j++)
    {
        screen[j][i].SetPosition(x,y);
        xScreen[j][i]=x;
        if (fichierLvl[i][j]=='0')
        {
            screen[j][i].SetImage(*Zero);
        }
        else if (fichierLvl[i][j]=='1')
        {
            screen[j][i].SetImage(*Un);
        }
        else if (fichierLvl[i][j]=='2')
        {
            screen[j][i].SetImage(*Deux);
        }
        else if (fichierLvl[i][j]=='3')
        {
            screen[j][i].SetImage(*Trois);
        }
        else if (fichierLvl[i][j]=='4')
        {
            screen[j][i].SetImage(*Quatre);
        }
        else if (fichierLvl[i][j]=='5')
        {
            screen[j][i].SetImage(*Cinq);
        }
        else if (fichierLvl[i][j]=='6')
        {
            screen[j][i].SetImage(*Six);
        }
        else if (fichierLvl[i][j]=='7')
        {
            screen[j][i].SetImage(*Sept);
        }
        x+=38;
    }
    y+=38;
    x=0;
}
for (int j(0); j<fichierLvl[0].size(); j++)
{
        screen[j][0].SetPosition(x,y);
        xScreen[j][0]=x;
        x+=38;
}
}
 
void Screen::scroling(int indt, int indtR, int w, bool gauche, bool droite)
{
    if (indDX==0)
    {
        finX=(fichierLvl[0].size()-w/38)*38;
        indDX=1;
    }
    timer.Reset();
    if (droite)
    {
        ind=indt;
        if(finX>0)
{
    if (ind<38)
    {
        indT=timer.GetElapsedTime();
        if(indT<constt)
        {
for (int i(0); i<yScreen; i++)
{
    for (int j(0); j<fichierLvl[0].size(); j++)
    {
 
        xScreen[j][i]-=1;
        screen[j][i].SetX(xScreen[j][i]);
    }
}
finX--;
ind++;
timer.Reset();
        }
 
    }
}
    }
    else if(gauche)
    {
        indR=indtR;
        if(xScreen[0][0]<0)
{
    if (indR<38)
    {
        indT=timer.GetElapsedTime();
        if(indT<constt)
        {
for (int i(0); i<yScreen; i++)
{
    for (int j(0); j<fichierLvl[0].size(); j++)
    {
 
        xScreen[j][i]+=1;
        screen[j][i].SetX(xScreen[j][i]);
    }
}
finX++;
indR++;
timer.Reset();
        }
 
    }
}
    }
}
 
Sprite Screen::getSprite(int j, int i)
{
    return screen[j][i];
}
 

Matoux

Ps: Je tien à préciser que le programme compile

Pages: [1]