Bonjour désoler de redemander de l'aider mais depuis hier soir j'ai une erreur et je n'ai aucune idée d'où cela peut venir.
Apres avoir réussit a crée ma tile map, il falai bien faire les collision j'ai donc trouver un post qui disais de faire un tableau de bool de même dimension que la tile map,
le 0 correspond a un objet sans collision et le 1 un avec une collision.
C'est ce que j'ai fait mais ma fenêtre ce ferme aussitôt ouverte. Et le problème viens de la condition bool.
Je vous post le code complet
J'ai bien entendu redimensionner la carte car un tableau de 26/22 sa fait grand pour test le fonctionnement
Je remercie ceux pouvant m'aider.
#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
#include <iostream>
#include <sstream>
#include <stdlib.h>
int LARGEUR_TILE = 40;
int HAUTEUR_TILE = 40;
int horloge =0;
int x;
int y;
int taillecase = 40;
using namespace std;
int main()
{
sf::RenderWindow World(sf::VideoMode(800, 600), "tilemap");
World.setFramerateLimit(60);
sf::Texture myTexture;
myTexture.loadFromFile("ressource/tile.png");
sf ::Texture Perso;
Perso.loadFromFile("ressource/zone.png");
sf::Sprite perso;
perso.setTexture(Perso);
perso.setPosition(160,160);
int map[5] [5]
{
{4,4,4,4,4},
{4,0,0,0,4},
{4,0,0,0,4},
{4,0,0,0,4},
{4,4,4,4,4},
};
bool masque [] =
{
1,1,1,1,1,
1,0,0,0,1,
1,0,0,0,1,
1,0,0,0,1,
1,1,1,1,1
};
bool collision (bool masque []);
{
if ( masque [ int (x/taillecase) + 3*int(y/taillecase) ] ==1 )
{
return true;
}
else
{
return false;
}
}
///tuile 0 : route
sf::Sprite mySprite(myTexture);
mySprite.setTextureRect(sf::IntRect(0,0,40,40));
sf::Sprite tuile0;
tuile0 = mySprite;
///tuile 1 : herbe
sf::Sprite mySprite1(myTexture);
mySprite1.setTextureRect(sf::IntRect(40,0,40,40));
sf::Sprite tuile1;
tuile1 = mySprite1;
///tuile 2 : maison
sf::Sprite mySprite2(myTexture);
mySprite2.setTextureRect(sf::IntRect(80,0,40,40));
sf::Sprite tuile2;
tuile2 = mySprite2;
///tuile 3 : eau
sf::Sprite mySprite3(myTexture);
mySprite3.setTextureRect(sf::IntRect(120,0,40,40));
sf::Sprite tuile3;
tuile3 = mySprite3;
///tuile 4 : arbre
sf::Sprite mySprite4(myTexture);
mySprite4.setTextureRect(sf::IntRect(160,0,40,40));
sf::Sprite tuile4;
tuile4 = mySprite4;
///tuile 5 : pont
sf::Sprite mySprite5(myTexture);
mySprite5.setTextureRect(sf::IntRect(0,40,40,40));
sf::Sprite tuile5;
tuile5 = mySprite5;
///tuile 6 : pas d'idée
sf::Sprite mySprite6(myTexture);
mySprite6.setTextureRect(sf::IntRect(40,40,40,40));
sf::Sprite tuile6;
tuile6 = mySprite6;
///tuile 7 : sable
sf::Sprite mySprite7(myTexture);
mySprite7.setTextureRect(sf::IntRect(80,40,40,40));
sf::Sprite tuile7;
tuile7 = mySprite7;
///VUE///////////////////////////////////
sf::View view1; ///
///.////////////////////////////////////
///BOUCLE///////////////////////////////
while (World.isOpen())
{
sf::Event event;
while (World.pollEvent(event))
{
if (event.type == sf::Event::Closed)
World.close();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
{
perso.move(sf::Vector2f(4,0)) ;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
perso.move(sf::Vector2f(-4,0)) ;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
perso.move(sf::Vector2f(0,-4)) ;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
{
perso.move(sf::Vector2f(0,4)) ;
}
World.clear();
for (int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
///selon le code trouve dans le tableau on parametre le bon tile et on le colle sur l'ecran
switch(map[i][j])
{
case 0:
tuile0.setPosition(i * LARGEUR_TILE, j * HAUTEUR_TILE);
World.draw(tuile0);
break;
case 1:
tuile1.setPosition(i * LARGEUR_TILE, j * HAUTEUR_TILE);
World.draw(tuile1);
break;
case 2:
tuile2.setPosition(i * LARGEUR_TILE, j * HAUTEUR_TILE);
World.draw(tuile2);
break;
case 3:
tuile3.setPosition(i * LARGEUR_TILE, j * HAUTEUR_TILE);
World.draw(tuile3);
break;
case 4:
tuile4.setPosition(i * LARGEUR_TILE, j * HAUTEUR_TILE);
World.draw(tuile4);
break;
case 5:
tuile5.setPosition(i * LARGEUR_TILE, j * HAUTEUR_TILE);
World.draw(tuile5);
break;
case 6:
tuile6.setPosition(i * LARGEUR_TILE, j * HAUTEUR_TILE);
World.draw(tuile6);
break;
case 7:
tuile7.setPosition(i * LARGEUR_TILE, j * HAUTEUR_TILE);
World.draw(tuile7);
break;
}
}
}
view1.reset(sf::FloatRect(0,0,800,600));
sf::Vector2f position(400,300);
position.x = perso.getPosition().x + 20 - 400;
position.y = perso.getPosition().y + 20 - 300;
if ( position.x < 0)
{
position.x = 0;
}
if ( position.x > 700)
{
position.x = 800;
}
if ( position.y < 0)
{
position.y = 0;
}
if ( position.y > 600)
{
position.y = 600;
}
view1.reset(sf::FloatRect(position.x,position.y,800,600));
World.setView(view1);
World.draw(perso);
World.display();
}
}