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 - Kopplex

Pages: [1]
1
Général / Re : Program received signal SIGSEGV
« le: Janvier 28, 2016, 06:53:48 pm »
Salut, en fait j'ai résolue le problème et je suis parvenue au résultat désiré, le problème venait de ma class entity que j'ai due supprimer vue qu’elle ralentit mon programme et en plus de ça elle ne sert pas à grand chose étant donné que les Sprite sont déjà en quelque sorte des entités, merci encore de ton aide  :)

2
Général / Re : Program received signal SIGSEGV
« le: Janvier 27, 2016, 08:57:41 pm »
Salut Kokyett !
Merci infiniment c'était bel et bien la déclaration de la variable dans le constructeur qui posais problème  :D !
mais maintenant je me retrouve avec mes sprite tout blancs comme si il était sans Texture  :o

3
Général / Program received signal SIGSEGV
« le: Janvier 27, 2016, 05:00:03 pm »
Bonsoir à tous/toutes,

Je suis en plein apprentissage et prise en main de la lib SFML et pour m'exercer j'essaie de faire un petit jeu en 2D tout simple, et là je bloque sur le tile mapping, j'ai pourtant l'impression d'avoir tout bien fais ... mais rien n'y fait je reçois constamment cette erreur du debugger "Program received signal SIGSEGV" je m'en remet donc à vous  ::) voici donc mon code et mes class :

entity.h

   
#ifndef ENTITY_H
#define ENTITY_H
#include <SFML/Graphics.hpp>
#include <iostream>
using namespace sf;
using namespace std;
enum direction {DOWN,LEFT,RIGHT,UP};
const int taille_block = 32;
class entity : public Drawable
{
    public:
        entity(string path);
        Sprite& getSprite();
        entity();
    protected:
    private:
        Texture perso;
        Sprite sp_perso;
        bool collision;
 
        virtual void draw(RenderTarget& target, RenderStates states) const
    {
        target.draw(sp_perso, states);
 
    }
 
};

#endif // ENTITY_H


entity.cpp

   
#include "entity.h"
 
entity::entity(string path)
{
 
    perso.loadFromFile(path);
    sp_perso.setTexture(perso);
 
}
entity::entity()
{
 
 
 
}
 
Sprite& entity:: getSprite()
{
    return sp_perso;
}
 
Map.h
   
#ifndef MAP_H
#define MAP_H
#include <SFML/Graphics.hpp>
#include "entity.h"
#include <vector>
 
class Map : public entity
{
    public:
        Map();
       void add_object(entity e);
       vector<entity>& get_Objects();
    protected:
    private:
        int carte[800/taille_block][400/taille_block];
        vector<entity> objects;
        entity carte_base;
        int carte_w,carte_h,num_ofObject;
 
};
 
#endif // MAP_H

Map.cpp

   
#include "Map.h"
 
Map::Map()
{
 
int carte[800/taille_block][400/taille_block];
vector<entity> objects;
entity carte_base("map1.png");
 
 
carte_w = carte_base.getSprite().getTexture()->getSize().x;
carte_h = carte_base.getSprite().getTexture()->getSize().y;
 
num_ofObject = (carte_w/taille_block)*(carte_h/taille_block);
cout << num_ofObject << endl;
 
for(int i = 0; i < carte_w/taille_block; i++)
{
  for(int y = 0; y < carte_h/taille_block; y++)
{
carte_base.getSprite().setTextureRect(IntRect(i*taille_block,y*taille_block,taille_block,taille_block));
objects.push_back(carte_base);
cout << "Object added sucessfully ! x : "<<i*taille_block<<" y : "<<y*taille_block<<endl;
 
}
}
 
 
 
}
 
void Map:: add_object(entity e)
{
 
//objects.push_back(e);
 
 
}
vector<entity>& Map:: get_Objects()
{
    return objects;
}

Et pour finir mon main :
       
#include <iostream>
#include <SFML/Graphics.hpp>
#include <sstream>
#include <string>
#include "shape.h"
#include "map.h"
using namespace sf;
using namespace std;
const int window_h = 400, window_w = 800, block_size = 32;
float speed = 0.1f;
Vector2i anim(1,DOWN);
Texture perso;
Sprite sp_perso;
Event event;
Clock t1,t2,cspeed;
Time temps,tspeed;
bool update_anim = true;
void gestion_clavier();
View vue;
Font font;
Text text_fps;
ostringstream os;
RectangleShape rect2,rect;
entity joueur("image.png");
int vie = 100;
const int distance_need = 20;
 
 
int main()
{
    joueur.getSprite().setPosition(0,0);
 
 
    RenderWindow window(VideoMode(window_w, window_h,32), "SFML works!");
    rect = DRAW_RECTANGLE(680,10,100,16);
    rect2 = DRAW_RECTANGLE(680,10,100,16);
    rect.setOutlineColor(Color::White);
    rect.setOutlineThickness(1);
    rect2.setFillColor(Color::Red);
    rect.setFillColor(Color::Black);
 
    font.loadFromFile("arial.ttf");
    text_fps.setFont(font);
    text_fps.setCharacterSize(10);
    text_fps.setString("FPS :");
    text_fps.setColor(Color::White);
    text_fps.setPosition(50,50);
    window.setFramerateLimit(60);
 
    Map carte;
 
    vector<entity> les = carte.get_Objects();
   int xTest = les[4].getSprite().getTexture()->getSize().x ;
 
 
    while(window.isOpen())
    {
        window.pollEvent(event);
 
       switch(event.type)
     //case Event::Closed: window.close();break;
 
        t1.getElapsedTime();
        gestion_clavier();
 
 
 
if(update_anim){
    if(t1.getElapsedTime().asMilliseconds() >= 100)
{
        anim.x++;
        if(anim.x * block_size >= joueur.getSprite().getTexture()->getSize().x)
        {
            anim.x=0;
        }
t1.restart();
}
}update_anim=false;
 
       joueur.getSprite().setTextureRect(IntRect(anim.x*block_size,anim.y*block_size,block_size,block_size));
 
    Vector2f centre(joueur.getSprite().getPosition().x + (block_size/2) - (window_w/2), joueur.getSprite().getPosition().y - (window_h/2) + (block_size/2) );
 
 
        if(centre.x < 0 )centre.x=0;
        if(centre.y < 0 )centre.y=0;
 
        if(vie>=100)vie=100;
        if(vie<=0)vie=0;
        rect2.setSize(Vector2f(vie,16));
 
        vue.reset(FloatRect(centre.x,centre.y,window_w,window_h));
        rect2.setPosition(vue.getCenter().x+280,vue.getCenter().y-190);
        rect.setPosition(vue.getCenter().x+280,vue.getCenter().y-190);
        text_fps.setPosition(vue.getCenter().x-390,vue.getCenter().y-190);
 
 
        window.setView(vue);
        window.draw(text_fps);
        window.draw(rect);
        window.draw(rect2);
        window.draw(joueur);
 
       float frps = 1 / (t2.restart().asSeconds());
        os << frps;
        window.setTitle("FPS : "+ os.str());
        text_fps.setString("FPS : "+os.str());
        os.str("");
        tspeed = cspeed.restart();
 
 
 
        window.display();
        window.clear();
 
    }
 
 
 
 
}
void gestion_clavier()
{
 
  switch(event.type)
        {
        case Event::KeyPressed:
            switch(event.key.code)
            {
            case Keyboard::Up: vie++;anim.y = UP;joueur.getSprite().move(0,-speed*tspeed.asMilliseconds());update_anim=true;break;
            case Keyboard::Down: vie-- ;anim.y = DOWN; joueur.getSprite().move(0,speed*tspeed.asMilliseconds());update_anim=true;break;
            case Keyboard::Left: anim.y=LEFT; joueur.getSprite().move(-speed*tspeed.asMilliseconds(),0);update_anim=true;break;
            case Keyboard::Right: anim.y=RIGHT; joueur.getSprite().move(speed*tspeed.asMilliseconds(),0);update_anim=true;break;
 
                }break;
        }
    if(joueur.getSprite().getPosition().x <= 0 )joueur.getSprite().setPosition(0,joueur.getSprite().getPosition().y);
    if(joueur.getSprite().getPosition().y <= 0 )joueur.getSprite().setPosition(joueur.getSprite().getPosition().x,0);
}

Sachant que d'après le debugger le problème viendrais de la ligne 53

   
int xTest = les[4].getSprite().getTexture()->getSize().x ;

Bien évidement j'ai chercher sur google et j'ai trouver que ce problème vient lorsque qu'un pointer pointe vers NULL et qu'on essaie de faire une action avec, mais je comprend toujours pas j'ai beau essayé de modifier ma méthode get_Objects rien n'y fais toujours ce problème :(

j'ai continuer de chercher d’où provient mon problème et apparemment ça serait dès que j'essaie d’accéder à un élément du vector "objects" que ça bloque ... je comprend vraiment pas , pourtant j'ai bien ajouté des Sprites à mon vector

Merci d'avance pour votre temps et vos réponses.

Pages: [1]