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; }