Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania
Viewing all articles
Browse latest Browse all 65225

Kolizja w sfml

$
0
0

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

 


Viewing all articles
Browse latest Browse all 65225

Trending Articles