SFML и C++ Уроки \ Разработка игр › Форумы › Флудилка (общение на разные темы) › Sinsinmin тема.
В этой теме 12 ответов, 3 участника, последнее обновление Павел Букреев 7 года/лет, 7 мес. назад.
-
АвторСообщения
-
Дабы не засорять другие темы, создаю тему во флудилке.
Блоги никто не читает. И там криво всё как то)))) так что начало тут… https://kychka-pc.ru/Forum/topic/sozdanie-rpgvozmozhno-network-na-dvoix
Итак)))Введение окончено. Я буду писать свои мысли, мне так проще учиться. И эта тема может быть закончена в любой момент. Надеюсь она никому не помешает.
Потрпев неудачу с РПГ))) ко мне пришли пару умных мыслей которые я собираюсь реализовать.
Дело в том что идея написать мини рпг дала мне ряд неудач, которые привели к лучшему понимаю программирования вообще.
В идеале код должен быть разбит на блоки независимые друг от друга. Меняя один блок он не должен затрагивать другой.
Да я понимаю что ежели бы я удосужился изучить хоть чуть чуть теорию то я бы всё это нашёл)))) но так уж я привык)))
Итак))
Идея)) Дело в том что в любой программе есть блоки которые что то делают и их выносят в отдельные функции, Скрипты, процедуры.
Которые потом подключаются к программе. Что ежели сделать набор таких функций самому. Не игру а набор функций для игры.
К примеру)) Вывод в данных координатах надписи. И исчезание её через пару пару секунд. Или лучше через время. Достаточное для осмысления прочитанного.
Для чего использовать. Для вывода нанесённого урона, подобранных монетах, в общем любых изменениях числовых переменных.
Получили лвл ап. Вывести соообщение. Ударили врага. Вывести сообщение. Подняли монетку. вывести сообщение.
Это даёт некую динамику. Увлечение Внимания игрока. И некую иллюзорность действия.
Что делал я?)))Вчера я два час потратил на то чтобы вывести кулдаун после удара у героя. Над головой героя. Зачем?Не знаю. ))))
Как сделаю. Выложу код. Как отдельный подключаемый эээ файл….*.h который.
Можно добавить цвет.
Ах да. идея в том чтобы изучить по частям. Классы, списки, анимация. Но не столкновения…)))))) пока что это ад для меня.
Класс, функция должна быть заранее продумана. Чтобы она будет делать, какие параметры получать. Как вообще она будет работать. Это должно быть представлено полностью. Иначе получится так что нужно будет добавить здесь параметр там параметр , а потом ещё вот там…и… где же ещё он был…))))
Итак возникли вопросы.
Как я предполагал? Я передаю параметры в функцию, функция выводит до определённого таймера и потом текст исчезает.
Но основной вывод и подсчёт времени идёт в функции main().
То есть я могу передать в функцию TextOutXY параметры x,y,text,color но как быть с таймером?
К примеру Игрок атакает Врага и на пару секунд выскакивает урон в виде текста.
В общем запутался))))))))Наверное я не понимаю как работают функции и процедуры. )))
Флудилка для флуда, давай вопросы по решению задач в темах предназначеных для этого. И чтобы помочь, нужен код твоих попыток.
да, тут уже стоящие вопросы появляются , которые могут помочь и другим потом ) а во флудилке их могут и не прочесть.. можешь темку создать в нужном разделе , а тут в тексте давать ссылку на эту темку
Ну создайте такой раздел. Нету ведь такого.)) Я ведь хочу сюда выкладывать своё обучение типа. Свои траблы.
Решение ваших “траблей” помогут другим в решении похожих “траблей”.
#Так_вот_же_тот_самый_раздел#Логика игр, это когда чел знает эту логику и выкладывает его. А когда чел не знает, то это называется решение траблов при создании мини игры. Но дело ваше)) логика так логика. Может Админ форум может перенести мою тему в более подходящую?
C++123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111#include <SFML/Graphics.hpp>#include <iostream>#include <sstream>//сейчас не нужно. раньше выводили текст ( в 13 ом уроке )#include "iostream"#include <vector>#include <list>#include <string>using namespace sf;class TextOut {public:float x, y, timeStart, time;sf::Color color;String TextString;sf::Font font;sf::Text text;TextOut(float X, float Y, String TextStrinG, sf::Font Font, sf::Color Color, float TimeStart){sf::Text Text(TextStrinG, font, 20);x = X, y = Y, TextString = TextStrinG, font = Font, color = Color, timeStart = TimeStart;text = Text;text.setPosition(x, y);text.setColor(color);timeStart = TimeStart;}void update(sf::RenderWindow &window, float time){if (timeStart >= 0){x += 0.04;y -= 0.04;text.setPosition(x, y);window.draw(text);timeStart -= time;std::cout << time << std::endl;}}};int main(){sf::RenderWindow window(sf::VideoMode(800, 600), "Lesson 13. kychka-pc.ru");sf::Font font;font.loadFromFile("CyrilicOld.ttf");sf::Text text("500",font,20);text.setColor(sf::Color::Red);text.setPosition(100, 100);float y = 0;float x = 0;float inc;inc = 0;sf::Clock clock;float textTime = 0;float time = 0;std::list<TextOut*> ListTextOut;std::list<TextOut*>::iterator it;float posXY = 100;ListTextOut.push_back(new TextOut(100, 100, "50", font, sf::Color::Blue, 1 * 1000));ListTextOut.push_back(new TextOut(500, 100, "20", font, sf::Color::Blue, 1 * 1000));ListTextOut.push_back(new TextOut(100, 500, "40", font, sf::Color::Blue, 1 * 1000));while (window.isOpen()){time = clock.getElapsedTime().asMicroseconds();clock.restart();time = time/1000;//time = time/1.2;window.clear();inc += 20*time/800;x = int(inc);y = int(inc);/*text.setString("500");if (x>100) text.setString("");text.setPosition(x, y);*/for (it = ListTextOut.begin(); it != ListTextOut.end();){TextOut *b = *it;if (b->timeStart >= 0){b->update(window, time);it++;}else{it = ListTextOut.erase(it);posXY += 0.1;/*ListTextOut.push_back(new TextOut(100, 500, std::to_string(posXY), font, sf::Color::Blue, 1 * 1000));*/}}//text.setPosition(x+100, y+100);//if (int(x) % 10 == 0)/*window.draw(text);*/window.display();}return 0;};Как то так вышло))))
Текст с движением чуть вверх и вправо.
Просто твои грабли в новой теме хорошо будут искаться для других людей с помощью поиска на форуме, а так же с гугла и яндекса
для этого оно делается
человек придёт уже на тему с решеной проблемой, к тому же возможно получим ещё одного активного участника форума:)
Сделай копипастой в нужном разделе темку и ссылку давай. Свои траблы ты можешь здесь выкладывать , подкрепляя их ссылками на темы с решениями. можешь и тут траблу и решение расписать для читающего, но саму проблему решить в новой темке. у тебя целый трабл-учебник получится, столько тем обсуждений и ссылок породишь
и всё структурированно)
Двойная работа)) но я понял. Щас сделаю.
Короче)) тут я пишу свои наброски заметки, а как чо готовое или вопрос то буду тему создавать)))))
Итак…определился со следующей задачей. Но чую пока не потяну её. Опишу намётки свои.
Итак подобрался я к своей мини цели. Сделать волны мобов дерушиеся друг с другом.
Алгоритм следующий.
1) Поиск врага в зоне видимости.
если найден..идём к нему. Если нет то 2)
2) движение по прямой.
3) проверка столкновения со своими. Если да, то 4)
4) поиск пути обхода(тут траблы)
5) Если дошли до радиуса атаки, то дерёмси.
6) Если враг убит, то опять топаем.
Но))) Упёрся я в тоже что и чел в этой теме https://kychka-pc.ru/Forum/topic/vzaimodejstvie-obektov
А именно…как юниту обойти своего и занять позицию для атаки. И далее вернуться на некий путь для дальнейщего движения.
Пока это не продумано…возьмусь за что другое)))
на вопрос ответил в той темке)
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.