SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Столкновение с препятствием
В этой теме 1 ответ, 2 участника, последнее обновление Павел Букреев 8 года/лет, 4 мес. назад.
-
АвторСообщения
-
У меня есть прямоугольник, который всегда движется с верху в низ, то есть когда дошел до низу начинает свое движение заново. Так же у меня есть самолетик, который двигается только влево и право. Мне нужно что б игра заканчивалась, если прямоугольник столкнулся с самолетом. Вот код:
C++123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125#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);elseif (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);elseif (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++12345if (bort_3.getPosition().x == p.sprite.getPosition().x && bort_3.getPosition().y == p.sprite.getPosition().y){cout << "Crash";}Очень прошу помогите, срочно надо…
Вложения:
You must be logged in to view attached files.посмотри урок когда мы врага добавили . там ф-ция getrect для спрайта. вот она тебе нужна для проверки столкновения.
ну или вручную проверь типа так:
if (player.x-rectangle.x<32) && (…и тд) {то crash();} //где 32 это ширина игрока
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.