Созданные ответы форума
-
АвторСообщения
-
всем привет
долго думал над своим вопросом пока не дождался отключения инета ))
для начала код в теории (меня занимает вопрос движения героя по диагонали
герой всё время по центру экрана
****
sizeh – высота экрана
sizew – ширина экрана
x, y – координаты героя; x1,y1 – координаты клика мыши
если х1 < sizew*0.75
если x < x1
если y1 < sizeh*0.25
если y > y1
включить анимацию героя наверх
как только угол между вектором xyx1y1 и осью y 45 градусов включить анимацию героя вверхвправо(проверка на клик в верхний правый угол экрана)
****
у меня два вопроса
1. не слишком ли много if получается подряд
2. как вычислить угол между указаными векторами
в этом же квадрате есть еще проверка на клик, но тогда рациональнее сначала идти по оси y… и снова угол в 45 градусов
здесь всё расписано
sf::Color transparent = sf::Color::Transparent; это вято мной из файла Color.hpp. насколько понимаю цвет прозрачности по умолчанию черный
там где находится курсор – точка прибытия. видите перс идет по прямой и как только до точки прибытия угол 45% – идет по диагонали.
P.S. думаю темы плодить все же не стоит
здравствуйте
извиняюсь что с роликами ввел в заблуждение (( я имел ввиду наборы спрайтов – движение вверх, вниз, по диагонали.
Вложения:
You must be logged in to view attached files.пример с шейдерами есть в примерах (устанавливаются SFML)
смотри папки
этот урок я усвоил
спасибо что ответили так быстро
проблема как я уже писал с математикой у меня ))
в том примере что я описал перс идет к точке клика мыши по прямой и (тут то и есть моя трудность) как только между центром спрайта и местом клика мыши угол становится 45 градусов, сменяется ролик и перс идет по диагонали. как это реализовать? сплошная математика (
C++123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263#include < SFML/Graphics.hpp >int main(){sf::RenderWindow window(sf::VideoMode(1024, 768), "GAME");sf::Texture t_hero;t_hero.loadFromFile("C:/res/troll.png");float currentFrame=0;sf::Sprite s_hero;s_hero.setTexture(t_hero);s_hero.setPosition(480,352);s_hero.setTextureRect(sf::IntRect(0,63,63,63));sf::Clock clock;while (window.isOpen()){float time = clock.getElapsedTime().asMicroseconds();clock.restart();time = time/800;sf::Event event;while (window.pollEvent(event)){if (event.type == sf::Event::Closed)window.close();}if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)){s_hero.move(-0.1*time,0);currentFrame += 0.007*time;if(currentFrame>5)currentFrame -= 5;s_hero.setTextureRect(sf::IntRect(64*int(currentFrame),384,63,63));}if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)){s_hero.move(0.1*time,0);currentFrame += 0.007*time;if(currentFrame>5)currentFrame -= 5;s_hero.setTextureRect(sf::IntRect(64*int(currentFrame),128,63,63));}if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)){s_hero.move(0,-0.1*time);currentFrame += 0.007*time;if(currentFrame>5)currentFrame -= 5;s_hero.setTextureRect(sf::IntRect(64*int(currentFrame),0,63,63));}if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)){s_hero.move(0,0.1*time);currentFrame += 0.007*time;if(currentFrame>5)currentFrame -= 5;s_hero.setTextureRect(sf::IntRect(64*int(currentFrame),256,63,63));}window.clear(sf::Color::White);window.draw(s_hero);window.display();}return 0;}Вложения:
You must be logged in to view attached files. -
АвторСообщения