Созданные ответы форума
-
АвторСообщения
-
тоже столкнулся с такой проблемой.
для тех кто не понял о чём речь повторюсь, есть игровая карта она длинная и окно view перемещается по нему за игроком, а фон меню и кнопки находятся в самом начале этой карты, то есть если персонаж отойдёт от левого края и нажать на Esc, то мы увидим только часть меню, поскольку view сместилось за персонажем.
может я не прав, но сделал следующим образом:
у меня есть класс описывающий окноC++123456789101112131415// размер камеры (окна) задаётся один раз, и можно привязывать изменение текстур к переменнымint vidX = 640;int vidY = 480;......int screen_0::Run(sf::RenderWindow &App){// здесь добавляю новое view, что бы при нажатии на Esc оно сработалоView viewMenu(FloatRect(0, 0, vidX, vidY));......//в конце добавляем для устанавки окно по центру, что бы меню отображалосьApp.setView(viewMenu);......почитай тут там вроде подробно объяснено. текста много, но вроде все разжевано
ini проще, но в целях обучения был выбран именно txt фаил.
С регулярными совсем тяжело, пока в процессе освоения. В общем получилось так.
C++123456789101112131415161718192021222324252627#include <iostream>#include <fstream>#include <unordered_map>#include <string>#include <regex>using namespace std;int main() {//открываем фаилifstream ff("test.txt");// проходимся по открытому файлуstring txt{ istreambuf_iterator<char>(ff),istreambuf_iterator<char>() }; x.second x.first << " " <<unordered_map<string, double>m;// регулярка для считывания текста в файлеregex e("(\\w+)\\s*\\=\\s*(\\d+\\.?\\d*)");// считанное разделяем на str(1) и str(2). в str(1) храним наименование переменной в str(2) значениеfor (auto it = sregex_iterator(txt.begin(), txt.end(), e); it != sregex_iterator(); ++it) {m.emplace(it->str(1), stod(it->str(2)));}// заполняем мар мfor (const auto&x : m) {cout << x.second << endl;}system("pause");return 0;}осталось добавить сравнение с переменными в файле и программами.
на сколько понимаю в твоем примере ведётся работа со всем буфером. алгоритм решения моей задачи я представляю следующий:
1. в моей программе есть переменные speed, time и т.д
2. в файле *.txt есть запись ( speed = 50 time = 10)
3. при помощи метода я могу считать весь фаил в переменную, массив или ещё что то..
4. затем нужно взять переменную из программы и сопоставить со считанным из файла, если нашлось совпадение например “speed = 50″ и “speed” тогда значение “50” записать в переменную в программе.
вот пункт 4 я не понимаю как можно сравнить по сути разное и если в них хоть что то совпадает, то взять часть.
в моём примере fscanf делал нужное ” %127[a-zA-Z] = %d” маска записанного в фаиле, что сразу заносилось в переменные &name,&value
плохо что это си функция
то что с++ мозговыжигатель согласен. тружусь на jave там вроде попрощенифига ты наворотил. посмотри видос платформер на SFML будет много понятно про анимацию. под видео есть ссылки на проги и исходный код. если останутся вопросы спрашивай
если два врага сразу умрут, я же не смогу вызвать два огня сразу
почему нет? делаешь простой класс “огонь” делаешь класс анимации и вызываешь их в любом удобном случае, при событии с игроком, при наступлении определённого события в игре и т.д. в таком варианте будет одинаковая на вид анимация, но она никак не зависит от появления другой анимации.
Привет скорее всего вы не понимаете что такое итератор тут подробно разьяснили про итератор Может хотите сделать анимацию типа персонаж умер и его поглотил огонь? Тогда самое простое через жизнь “если очки жизни = 0, тогда воспроизвести анимацию огня и вывести меню”.
пользуюсь GitHub Desktop как раз. про UTF-8 действительно не думал комменты по русски делал для понятливости поскольку начинающему более понятнее так. При просмотре в GitHub кракозябры, если кому надо переправлю, а если скачать проект и открыть локально, то комменты читабельны.
Я в плюсах не силён столкнулся с С функциями типа fscan, которые в моём VS 2017 не поддерживаются, много мозга сломал, чтобы найти аналог (без лишних библиотек). Аналогия хорошо, ещё бы знать, запуститься. А так спасибо.
ссылку KindRedSan дал на мой вопрос. ситуация возникла из-за моей невнимательности. Был косяк с XML картой. Сегодня скинул весь мой клон Марио на гит хаб можешь посмотреть максимально старался комментировать его
подобные исключения выпадают когда ваш код вызывает ошибки в сторонних библиотеках. для исправления читайте данные внизу где написаны, какие данные выводят ваши переменные и смотри последние вызываемые команды (Кадр стека). обвёл красным на вашем скрине.
Вложения:
You must be logged in to view attached files.Спасибо Ryuzaki надо статью в FAQ. только в статье надо выделить “Впишите в неё команду premake5 vs2017.” а то в тексте затерялось и долго тупил.
посмотри тут может поможет
Я только начинаю учиться и поэтому задаю глупые вопросы и как говориться если смог объяснить проблему ребёнку и он тебя понял, значит проблемы нет.
В вашем коде есть два класса
C++12345678910111213141516171819202122232425class Player {public:Image img;Texture txt;Sprite sprt;Player(String pth, int x, int y){img.loadFromFile(pth);txt.loadFromImage(img);sprt.setTexture(txt);sprt.setPosition(x,y);}};class Block {public:Image img;Texture txt;Sprite sprt;Block(String pth, int x, int y){img.loadFromFile(pth);txt.loadFromImage(img);sprt.setTexture(txt);sprt.setTextureRect(IntRect(0, 0, 32, 32));sprt.setPosition(x, y);}};и как понимаю они сами по себе и ни на кого не ссылаются и не наследуются и используют одни и те же переменные? или это неизвестный мне способ наследования?
а по моему вопросу тут вы закидываете в конструктор Block параметры
C++123for (int i = 0; i < 20; i++) {DIM1[i] = new Block("images/blocks/grass.png", 100 * i, 100);}а потом просите отрисовать опять в цикле со ссылкой на sprt
C++123for (int i = 0; i < 20; i++) {window.draw(DIM1[i]->sprt);}почему нельзя так
C++1window.draw(DIM1[i]);все данные в массив выше уже закинуты или я не прав?
-
АвторСообщения