Bonjour après avoir "réaliser" mon algo pour détecter collision ou non, je ne sait quoi faire pour interdire le déplacement de mon joueur ( Jame ). Du coup je suis un peut bloquer.
Voici mon code en gardant l'essentiel :
main.cpp :
#include "TileMap.h"
#include "Jame.h"
#include <iostream>
#include <SFML/Graphics.hpp>
using namespace std;
int main()
{
Jame blop;
// on crée la fenêtre
sf::RenderWindow window(sf::VideoMode(1920, 1080), "Tilemap");
window.setFramerateLimit(60);
// on définit le niveau à l'aide de numéro de tuiles
const int level[] =
{
1, 1, 1, 1, 1, 1, 1, 1,
1, 0, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 2, 0, 0, 1,
1, 0, 0, 0, 2, 0, 0, 1,
1, 0, 2, 0, 2, 0, 2, 1,
1, 0, 2, 2, 2, 0, 2, 1,
1, 1, 1, 1, 1, 1, 1, 1,
};
// on crée la tilemap avec le niveau précédemment défini
TileMap map;
if (!map.load("tileset.png", sf::Vector2u(80, 80), level, 8, 8))
return -1;
// on fait tourner la boucle principale
while (window.isOpen())
{
// on gère les évènements
sf::Event event;
while (window.pollEvent(event))
{
if(event.type == sf::Event::Closed)
window.close();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
{
window.close();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Z))
{
blop.deplacement_H();
}
if ((sf::Keyboard::isKeyPressed(sf::Keyboard::Q)) && (blop.collision == false)) /*j'avais panssais a sa */
{
blop.deplacement_G();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))
{
blop.deplacement_B();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
blop.deplacement_D();
}
// on dessine le niveau
window.clear();
window.draw(map);
window.draw(blop);
window.display();
}
return 0;
}
Et mon Jame.cpp :
#include "Jame.h"
#include <SFML/Graphics.hpp>
Jame::Jame()
{
t_jame.loadFromFile("ressource/Jame.png");
spr_jame.setTexture(t_jame);
spr_jame.setPosition(160,160);
}
void Jame::deplacement_B()
{
spr_jame.move(sf::Vector2f(0,4)) ;
}
void Jame::deplacement_D()
{
spr_jame.move(sf::Vector2f(4,0)) ;
}
void Jame::deplacement_G()
{
spr_jame.move(sf::Vector2f(-4,0)) ;
}
void Jame::deplacement_H()
{
spr_jame.move(sf::Vector2f(0,-4)) ;
}
bool Jame::collision()
{
bool map_collision[] =
{
1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,
};
posX = spr_jame.getPosition().x;
posY = spr_jame.getPosition().y;
hauteur_2 = posX + 80 ;
largeur_2 = posY + 80 ;
int tiles = posX / 80 ;
int tiles2 = posY / 80 ;
for (int hauteur_1 = posX -80; hauteur_1 < hauteur_2; ++hauteur_1)
for (int largeur_1 = posY -80; largeur_1 < largeur_2; ++largeur_1)
{
if (map_collision [tiles + 3* tiles2] == 1)
{
return true;
}
return false;
}
}
Voila j'attend votre aide avec impatience.
Et sur ce bonne journée.