Jak sprawdzic czy zaszla kolizja w sfml ? W builderze byly by to dosc latwe ale tu nie ma left,top,height i width ;/
Kod:
#include <SFML/Graphics.hpp>
#include <cmath>
#include <sstream>
#include "Snake.h"
int main()
{
sf::ContextSettings settings;
settings.antialiasingLevel = 8;
int x=200,y=200,kx,ky; // wspolrzedne glowy, wspolrzedne kwadratu
int ost_x,ost_y;
char aktprzycisk='w'; //'w'-gora , 's' - dol, 'a' - lewo, 'd' - prawo
bool kolizja=false,wylosowanie=false;
sf::RenderWindow okno( sf::VideoMode( 1366, 768, 32 ), "Snake v1.0",sf::Style::Fullscreen, settings);
sf::Texture tlo;
tlo.loadFromFile("img/mapa.png");
sf::Sprite mapa;
mapa.setTexture(tlo);
sf::Texture head;
head.loadFromFile("img/glowa.png");
sf::Sprite glowa;
glowa.setTexture(head);
sf::Clock clock;
sf::Time time;
sf::RectangleShape kwadrat(sf::Vector2f(20,20));
sf::Clock zegar;
sf::Time czas;
while( okno.isOpen() )
{
sf::Event zdarzenie;
while( okno.pollEvent( zdarzenie ) )
{
if( zdarzenie.type == sf::Event::Closed )
okno.close();
if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape )
okno.close();
}
okno.clear();
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
if(aktprzycisk!='s')aktprzycisk='w'; // poruszanie w gore
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
{
if(aktprzycisk!='w')aktprzycisk='s'; // poruszanie w dol
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
{
if(aktprzycisk!='a')aktprzycisk='d'; // poruszanie w prawo
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
if(aktprzycisk!='d')aktprzycisk='a'; // poruszanie w lewo
}
if(x<=25 || x>=1300 || y>=700 || y<=25) kolizja=true;
if(kolizja==false)
{
if(aktprzycisk=='w')
{
//Porusznanie w gore
if(time.asSeconds() > 0.3 )
{
ost_y=y;
y-=30;
glowa.setOrigin(39,39);
glowa.setRotation(-180);
wyrownaniex(x);
wyrownaniey(y);
clock.restart();
time = sf::Time::Zero;
}
}
else if(aktprzycisk=='s')
{
//Porusznanie w dol
if(time.asSeconds() > 0.3 )
{
ost_y=y;
y+=30;
glowa.setOrigin(0,0);
glowa.setRotation(0);
wyrownaniex(x);
wyrownaniey(y);
clock.restart();
time = sf::Time::Zero;
}
}
else if(aktprzycisk=='d')
{
//Porusznanie w prawo
if(time.asSeconds() > 0.3 )
{
ost_x=x;
x+=30;
glowa.setOrigin((39),(0));
glowa.setRotation(-90);
wyrownaniex(x);
wyrownaniey(y);
clock.restart();
time = sf::Time::Zero;
}
}
else if(aktprzycisk=='a')
{
//Porusznanie w lewo
if(time.asSeconds() > 0.3 )
{
ost_x=x;
x-=30;
glowa.setOrigin((0),(39));
glowa.setRotation(+90);
wyrownaniex(x);
wyrownaniey(y);
clock.restart();
time = sf::Time::Zero;
}
}
} // if kolzija
//losowanie kwadratu
if(czas.asSeconds() > 3 && wylosowanie==false)
{
kwadrat.setFillColor(sf::Color(0,128,0));
kwadrat.setOutlineThickness(2);
kwadrat.setOutlineColor(sf::Color(0,0,0));
kx=losuj_x();
ky=losuj_y();
kwadrat.setPosition(kx,ky);
wylosowanie=true;
zegar.restart();
czas = sf::Time::Zero;
}
glowa.setPosition(x,y);
okno.draw(mapa);
if(wylosowanie==true)okno.draw(kwadrat);
okno.draw(glowa);
okno.display();
time = clock.getElapsedTime();
czas = zegar.getElapsedTime();
} //while
return 0;
}