В этом уроки разберёмся как сделать персонажа с управлением как в машине.
Итак начнём! (!!!Я использую using namespace sf !!!)
Как-же создать передвижение в ту сторону которую он направлен? Сначала передвижение под углом. Используем функцию move(), мы будем двигать спрайт по двум осям. Так для движения в 45(гр.) Установим X = 0.5 Y = 0.5 ;
1 |
hero.move(0.5, 0.5); //Если работает не так то перед Y ставим "-" |
Теперь как повернуть спрайт. Для этого используем функцию rotate(n). n – угол. Для того чтобы узнать угол getRotation()
1 2 |
if (Keyboard::isKeyPressed(Keyboard::Left)) { hero.rotate(-0.05); }//Поворот в лево if (Keyboard::isKeyPressed(Keyboard::Right)) { hero.rotate(0.05); }//Поворот в права |
Теперь само движение.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
float r = hero.getRotation();// Создаём переменную r в ней хранится угол спрайта if (Keyboard::isKeyPressed(Keyboard::Up))//Если нажата клавиша Up то ... { if (r > 349 || r < 11) { hero.move(0, -0.1/2); } //Если угол равен от 349 до 11 то двигаем персонажа вверх if (r > 11 && r < 33) { hero.move(0.02/2, -0.08/2); }//И т.д. if (r > 33 && r < 57) { hero.move(0.05/2, -0.05/2); } if (r > 57 && r < 79) { hero.move(0.08/2, -0.02/2); } if (r > 79 && r < 101) { hero.move(0.1/2, 0); } if (r > 101 && r < 123) { hero.move(0.08/2, 0.02/2); } if (r > 123 && r < 147) { hero.move(0.05/2, 0.05/2); } if (r > 147 && r < 169) { hero.move(0.02/2, 0.08/2); } if (r > 169 && r < 191) { hero.move(0, 0.1/2); } if (r > 191 && r < 213) { hero.move(-0.02/2, 0.08/2); } if (r > 213 && r < 235) { hero.move(-0.05/2, 0.05/2); } if (r > 235 && r < 259) { hero.move(-0.08/2, 0.02/2); } if (r > 259 && r < 281) { hero.move(-0.1/2, 0); } if (r > 281 && r < 303) { hero.move(-0.08/2, -0.02/2); } if (r > 303 && r < 327) { hero.move(-0.05/2, -0.05/2); } if (r > 327 && r < 349) { hero.move(-0.02/2, -0.08/2); } } |
Что получилось:
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 |
#include <SFML/Graphics.hpp> using namespace sf; int main() { RenderWindow window(VideoMode(800, 600), "Game"); Texture heroT; heroT.loadFromFile("player.png"); Sprite hero; hero.setTexture(heroT); hero.setOrigin(16, 16); hero.setPosition(400, 300); while (window.isOpen()) { float r = hero.getRotation(); sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } //////////////////Управление///////////////////// if (Keyboard::isKeyPressed(Keyboard::Left)) { hero.rotate(-0.05); }//Поворот в лево if (Keyboard::isKeyPressed(Keyboard::Right)) { hero.rotate(0.05); }//Поворот в права if (Keyboard::isKeyPressed(Keyboard::Up)) { if (r > 349 || r < 11) { hero.move(0, -0.1/2); } if (r > 11 && r < 33) { hero.move(0.02/2, -0.08/2); } if (r > 33 && r < 57) { hero.move(0.05/2, -0.05/2); } if (r > 57 && r < 79) { hero.move(0.08/2, -0.02/2); } if (r > 79 && r < 101) { hero.move(0.1/2, 0); } if (r > 101 && r < 123) { hero.move(0.08/2, 0.02/2); } if (r > 123 && r < 147) { hero.move(0.05/2, 0.05/2); } if (r > 147 && r < 169) { hero.move(0.02/2, 0.08/2); } if (r > 169 && r < 191) { hero.move(0, 0.1/2); } if (r > 191 && r < 213) { hero.move(-0.02/2, 0.08/2); } if (r > 213 && r < 235) { hero.move(-0.05/2, 0.05/2); } if (r > 235 && r < 259) { hero.move(-0.08/2, 0.02/2); } if (r > 259 && r < 281) { hero.move(-0.1/2, 0); } if (r > 281 && r < 303) { hero.move(-0.08/2, -0.02/2); } if (r > 303 && r < 327) { hero.move(-0.05/2, -0.05/2); } if (r > 327 && r < 349) { hero.move(-0.02/2, -0.08/2); } } //////////////////Рисовка/////////////////////// window.clear(Color::Black); window.draw(hero); window.display(); } return 0; } |