SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Движение прямоугольника
В этой теме 5 ответов, 2 участника, последнее обновление Павел Букреев 7 года/лет, 10 мес. назад.
-
АвторСообщения
-
Вот у меня есть прямоугольник:
C++1RectangleShape bort_3(Vector2f(80,80));Мне нужно что б он сам двигался с верху в низ, а самолетик (движется с помощью стрелок только в лево и право) должен его облететь.Как мне это сделать?? Желательно без всяких заморочек.
Вот весь код:
C++12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182#include <SFML/Graphics.hpp>#include <iostream>using namespace sf;using namespace std;RectangleShape karta(Vector2f(680, 840)); //Создаем прямоугольникRectangleShape bort_1(Vector2f(30, 840)); //Создаем прямоугольникRectangleShape bort_2(Vector2f(30, 840)); //Создаем прямоугольникRectangleShape bort_3(Vector2f(80,80)); //Создаем прямоугольникclass Player { // класс Игрокаpublic:float x, y, w, h, speed;//координаты игрока х и у, высота ширина, ускорение (по х и по у), сама скоростьString File; //файл с расширениемImage image;//сфмл изображениеTexture texture;//сфмл текстураSprite sprite;//сфмл спрайтPlayer(String F, float X, float Y, float W, float H){ //Конструктор с параметрами(формальными) для класса Player.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);}};int main() {int speed = 20;RenderWindow window(sf::VideoMode(600, 680), "Letalka");window.setFramerateLimit(60); //Задаем значение FPSkarta.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);while (window.isOpen()) {Event event;while (window.pollEvent(event)) {if (event.type == Event::Closed)window.close();}if (Keyboard::isKeyPressed(Keyboard::Left)){p.sprite.move(-speed, 0);}if (Keyboard::isKeyPressed(Keyboard::Right)){p.sprite.move(speed, 0);}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);window.clear();window.draw(karta);window.draw(bort_1);window.draw(bort_2);window.draw(bort_3);window.draw(p.sprite);window.display();}}Вложения:
You must be logged in to view attached files.C++12y+=0,05*time;bort_1.setPosition(x,y);или если есть ф-ция move у прямоугольника (у спрайтов точно есть)
C++1bort_1.move(0,1);это всё писать внутри цикла while window is open
С функцией
C++1bort_1.move(0,1);работает, но с этой функцией можно будет сделать ускорение обьекта, каждый раз, когда словил бонус? То есть если словил бонус, то этот прямоугольник движется быстрее?
C++123dy=0.01;//стандартная скоростьif (bonus) {dy=dy+0.01;}//если бонус увеличили скоростьbort_1.move(0,dy);C++1if (bort_4)Пишет ошибку (Выражение должно иметь тип bool)
конечно должно, прочитай про тип данных bool и для чего он нужен.
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.