SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › стратегия
В этой теме 9 ответов, 3 участника, последнее обновление Heisenberg 7 года/лет, 10 мес. назад.
-
АвторСообщения
-
Здравствуйте форумчане!
вопрос у меня к Павлу в основном. Почему именно платформер? я люблю играть в стратегии, поэтому стратегию и хочу написать. здесь ссылка (может кому интересно чего я хочу добиться в конце концов)
написано для direct7 на с++. хочу переписать на sfml но с математикой у меня нелады.
спросите почему именно на sfml? простота кода и минимум строк. вы только посмотрите сколько написано для direct!!!
В ходе уроков разработки Павел показывает принцип работы SFML, и для того чтобы написать игру жанра “стратегия” нужно включить своё мышление и пользоваться данными примерами в своих целях.
В уроках показано:
1) Как создать спрайт и отобразить его.
2) Возможность управления определёнными объектами (спрайтами) с помощью клавиатуры.
3) Обработка нажатия кнопок мышки.
4) Наглядный пример использования вспомогательной программы TileMap Editor для создания карт.
5) Вывод текста из формата .ttf
6) Взаимодействие объектов между собой, к примеру чтобы земля была твёрдой.
И это ещё не весь список возможностей, который Павел нам показал в этих уроках.Если вас интересуют какие либо конкретные решения, и помощь в их реализации задавайте соответствующие вопросы.
На этом форуме найдутся те, кто вам поможетУдачи в учении и разработке.
За реализованный поиск пути жирный +
Привет ) до 19 урока примерно мы шли по пути рпг – стратегия. А именно – двигали и вращали камеру, рисовали текст квеста, вид был сверху, перемещали спрайт в место клика мыши, а так же вращали его в эту сторону. затем то, что было в платформере (стрельба, враги) можно перенести и на стратегию. разница лишь в отсутствии притяжения к земле и виде сверху.
начните делать пока эту стратегию, половину вопросов сразу отпадет и тогда уже с конкретными вопросами можно на форуме спросить и мы поможем) кто -то тут делал стратегию у нас
p.s. я тоже люблю стратегии, просто платформер более пользуется спросом.
спасибо что ответили так быстро
проблема как я уже писал с математикой у меня ))
в том примере что я описал перс идет к точке клика мыши по прямой и (тут то и есть моя трудность) как только между центром спрайта и местом клика мыши угол становится 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.этот урок я усвоил
можно по подробнее суть вопроса. а еще лучше создать для него отдельную тему. не очень пойму какой ролик сменяется..
здравствуйте
извиняюсь что с роликами ввел в заблуждение (( я имел ввиду наборы спрайтов – движение вверх, вниз, по диагонали.
Вложения:
You must be logged in to view attached files.там где находится курсор – точка прибытия. видите перс идет по прямой и как только до точки прибытия угол 45% – идет по диагонали.
P.S. думаю темы плодить все же не стоит
всем привет
долго думал над своим вопросом пока не дождался отключения инета ))
для начала код в теории (меня занимает вопрос движения героя по диагонали
герой всё время по центру экрана
****
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 градусов
C++1234567891011121314151617// Клик внутри обзора игровой камеры (Размеры можно задать самому)sf::FloatRect getVisibleCamera(sf::View cam){return sf::FloatRect(cam.getCenter().x - sizew/2, cam.getCenter().y - sizeh/2, sizew, sizeh);}void ClickEvents(){if(getVisibleCamera(cam).contains(mousePos)){true;}else{false;}}C++123// Угол в какую сторону движется объект по вектору.// Этот угол можно применять в качестве аргумента для метода sprite.setRotate(angle);angle = atan2f(y - y1, x - x1) * 57.295827; -
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.