Созданные ответы форума
-
АвторСообщения
-
На вскидку код написан верно. Неплохо попутно и скидывать ошибки которые отлавливает IDE. Убедись что resourcePath+”название файла” ведут именно к картинке.
Ну и вобще может пригодятся мои наработки:
C++ ResourceManager.h Все подписи на анг ибо doxygen вобще не дружит с русским
C++ ResorceManager.cppC# IAssestHandler Перенесённая на C# версия
Ну в хидере всегда висит обьявление, в cpp реализация. Если тебе нужно хранить в классе какой либо другой класс или передовать его в метод используй forward declaration(Т.е. сразу после include выписать используемые классы но header содержащий этот класс подключить в cpp файле!)
C++12345678910//class1.h#include <iostream>class Class2//Здесь мы даём понять линковщику что о этом классе он узнает позже//По сути это уже можно назвать forward declarationclass Class1{public:void foo(Class2 in);//Мы обьявили метод, но его реализацию мы поместим в cpp файл}C++12345678//class2.h#include <iostream>class Class2{public:void foo2() { std::cout << "I summoned!" << std::endl}}C++1234567891011//class1.cpp#include "class1.h"#include "class2.h"void Class1::foo(Class2 in){std::cout << "Start summoning.." << std::end;in.foo2();//Если бы мы попытались вызвать метод в хидере - получили бы ошибку "Недопустимый не полынй тип"//При этом появляется возможность сделать два и более классов, которые могут включать в себя элементы друг друга//всё что о нас думает}Если работаешь из студии можешь использовать быстрые действия для генерации cpp файла.
Ну и на досуге стоит почитать это, да и любую другую литературу по плюсам. Хотя по сути я плюсы изучал по аналогии с тобой, вот только сам вопросы не кидал на форумы, а учился на чужих ошибках//Некропостинг но
При изменении размера окна getDefaultView будет давать нам в распоряжение рястянутое/сплюснутое изображение GUI (т.к. возвращаеться View созданный при инициализации, я полагаю).
Что бы с этим не сталкиватся когда начал переписывать свой движок на шарп в Main loop’е выделил отдельный метод ля отрисовки GUI который не должен смещаться.C++123456789101112/* onUpdate section passed *//* ... */window.setView(view);states.back().onDraw(window);//Draw thingsVector2f re = view.getCenter();//Store view center positionview.setCenter(view.getSize().x / 2, view.getSize().y);//Move cam to 0,0window.setView(view);states.back().onGuiDraw(window);//Draw Gui thingsview.setCenter(re);//Return view positionwindow.setView(view);Ну а отлавливать изменение размера окна нужно в window.pollEvent(event);
C++12345if (event.type == sf::Event::Resized){view.setSize(event.size.width, event.size.height);window->setView(view);}Можешь использовать глобальные или статические переменные.
Для глобальной переменной:
В main.cpp или где-то ещё определяешь int *имя*; Где нужно получить к ней доступ: extern int *имя*;
Если нужен доступ к методу делаеться аналогично void foo(int Num) {} И где нужно получить доступ: extern void foo(int Num);
Кстати, если предполагаеться что переменная в вызове метода может быть не переданна(void foo2(int Num = 0, String str = “”)) то значение по умолчанию должно указываться в extern void foo2(int Num = 0, String str = “”); а не в реализации.
Статические просто определяются как static и обращение идёт как Class::переменная/метод.
А вобще лучше сделать класс или структуру которые будут содержать в себе эти вещи и пихнуть их реализацию в .cppДобавить bool поверх этого дела….
По факту не использовать cout для сброса всего. Используйте sf::Text для дебага информации обновляемой каждый цикл(Кстати, надеюсь цикл не имеет шаг равный частоте кадров). В cout в основном выводят информацию о ошибках либо о критических моментах программы, которые не должны возника каждый цикл. Ну и к “Чем больше пуль тем больше лагов”. Они просто картинки или выгружаються в физический движок? (Самописный/box2d) Если случай с box2d убедись что ты не создаёшь пули 5×5 метров размером (ибо измерения в box2d производится не в пикселях SFML).
Я всё же не очень понял твою задумку. Если ты хочешь отдельно плавающее окно – используй второй RenderWindow в главном цикле. Если же ты хочешь всё распологать в одном окне – используй несколько View в каждом указываея viewport и делая отрисовку в окне с использованием каждого View.
Учти что тут задаётся множитель от 0 до 1 относительно размера окна.
Кнопочки на sf::Text особо проблем сделать не должно предоставить(text.getGlobalBounds().contain(Vector2f(Позиция курсора))).C++123456// Это заставит View использовать всё пространство// справа и до центра окна на всю высоту окнаtileMapView.setViewport(sf::FloatRect(0, 0, 0.5f, 1));// С центра и до левого края окна на всю высоту окнаtilePalitreView.setViewport(sf::FloatRect(0.5f, 0, 0.5f, 1)); -
АвторСообщения