Форум программистов, компьютерный форум, киберфорум
Наши страницы
SFML
Войти
Регистрация
Восстановить пароль
 
Cheshyrsky_Kot
0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 30
1

Столкновение прямоугольника и спрайта

28.11.2015, 19:09. Просмотров 381. Ответов 1
Метки нет (Все метки)

Уже 2 дня мучаюсь, вообщем: У меня есть прямоугольник, который всегда движется с верху в низ, то есть когда дошел до низу начинает свое движение заново. Так же у меня есть самолетик, который двигается только влево и право. Мне нужно что б игра заканчивалась, если прямоугольник столкнулся с самолетом. Вот игра сама:
Столкновение прямоугольника и спрайта

Вот весь код игры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <SFML/Graphics.hpp>
 
#include <iostream>
#include <iostream>
#include <ctime>
 
using namespace sf;
using namespace std;
 
class Player
{
public:
 
    float x, y, w, h, speed, friction;
    sf::Vector2f velocity;
    String File;
    Image image;
    Texture texture;
    Sprite sprite;
 
    Player(String F, float X, float Y, float W, float H)
    {
        File = F;
        w = W; h = H;
        speed = 0;
        image.loadFromFile(File);
        texture.loadFromImage(image);
        sprite.setTexture(texture);
        sprite.setPosition(x = X, y = Y);
        sprite.setOrigin(w / 2, h / 2);
 
        friction = 0.96;
        velocity.x = 0;
        velocity.y = 0;
    }
};
 
 
 
int main()
{
    srand(std::time(0));
    int speed = 300;
    RenderWindow window(sf::VideoMode(600, 680), "Letalka");
    window.setFramerateLimit(60);
 
    RectangleShape karta(Vector2f(680, 840));
    RectangleShape bort_1(Vector2f(30, 840));
    RectangleShape bort_2(Vector2f(30, 840));
    RectangleShape bort_3(Vector2f(80, 80));
 
    karta.setFillColor(Color::White);
    karta.setPosition(0, 0);
 
    bort_1.setFillColor(Color::Red);
    bort_1.setPosition(0, 0);
    bort_2.setFillColor(Color::Red);
    bort_2.setPosition(570, 0);
    bort_3.setFillColor(Color::Red);
    bort_3.setPosition(300, 0);
 
    Player p("Airplane.png", 300, 540, 130, 90);
 
    sf::Clock clock;
 
    while (window.isOpen())
    {
        sf::Time dt = clock.restart();
 
        Event event;
        while (window.pollEvent(event)) {
 
            if (event.type == Event::Closed)
                window.close();
        }
 
        if (Keyboard::isKeyPressed(Keyboard::Left))
        {
            p.velocity.x = -speed * dt.asSeconds();
        }
 
        if (Keyboard::isKeyPressed(Keyboard::Right))
        {
            p.velocity.x = speed * dt.asSeconds();
        }
 
        p.sprite.move(p.velocity);
        p.velocity *= p.friction;
 
        if (p.sprite.getPosition().x < 95)
            p.sprite.setPosition(95, p.sprite.getPosition().y);
        else
            if (p.sprite.getPosition().x > 505)
                p.sprite.setPosition(505, p.sprite.getPosition().y);
 
        bort_3.move(0, 600 * dt.asSeconds()); // Заставляем обьект двигаться
 
        if (bort_3.getPosition().y >  680) // Когда препятствие доходит до конца карты, оно появляеться с начала.
        {
            sf::Vector2f pos(std::rand() % 600, std::rand() % 100 - 150);
            bort_3.setPosition(pos);
        }
        // Не даем препятствиям залазить за борта
        if (bort_3.getPosition().x < 95)
            bort_3.setPosition(std::rand() % 600, std::rand() % 100 - 150);
        else
            if (bort_3.getPosition().x > 505)
                bort_3.setPosition(std::rand() % 600, std::rand() % 100 - 150);
        if (bort_3.getPosition().x == p.sprite.getPosition().x && bort_3.getPosition().y == p.sprite.getPosition().y)
 
        {
            cout << "Crash";
        }
 
 
 
        window.clear();
 
        window.draw(karta);
        window.draw(bort_1);
        window.draw(bort_2);
        window.draw(bort_3);
        window.draw(p.sprite);
        window.display();
    }
}
Вот как я пытался сделать:
C++
1
2
3
4
5
 if (bort_3.getPosition().x == p.sprite.getPosition().x && bort_3.getPosition().y == p.sprite.getPosition().y)
 
        {
            cout << "Crash";
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2015, 19:09
Ответы с готовыми решениями:

Вывод спрайта
Не так давно решил &quot;поизучать&quot; SFML, и в итоге самое легкое что только может в...

Анимация для определенного спрайта
Есть картинка, где несколько спрайтов персонажа. В одну сторону он движется...

Не получается вывод спрайта на экран
Не получается вывести картинку на экран выдает какую-то ошибку и пищит...

Не получается вывод спрайта на экран
помогите пожалуйста! Когда вывожу спрайт на экран, запускаю приложение - даже...

Sfml: вращение спрайта относительно центра
Хочу узнать как вращать спрайт относительно своего центра если задать это...

1
rikimaru2013
C++ Game Dev
2472 / 1141 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
28.11.2015, 19:17 2
Cheshyrsky_Kot,
sf::Rect<T>::Contains(...)


http://www.sfml-dev.org/documentatio...a55c201e270d41
http://www.sfml-dev.org/documentatio...2266f47e7e1011
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2015, 19:17

<SFML/Graphics.hpp> создание спрайта
Хочу создать спрайт, загрузить в него текстуру и вывести на экран. Проблема: ...

Размещение спрайта при изменении разрешения окна
Доброго времени суток. Столкнулся с проблемой расчёта координат положения...

Столкновение объектов
У меня есть прямоугольник, который всегда движется с верху в низ, то есть когда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru