SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Вид камеры и GUI
В этой теме 5 ответов, 5 участников, последнее обновление KindRedSand 6 года/лет, 11 мес. назад.
-
АвторСообщения
-
Всем привет))
Как можно сделать так чтобы вид камеры двигался, но при этом элементы интерфейся оставались на месте?
Прикрепить элементы интерфейса к координатам камеры. +- Расстояние от центра экрана.
Как уже сказал Heisenberg, надо привязывать к камере отрисоку этих элементов, посмотрите как было в уроке: Урок 30
Не уверен, что это “красиво” написано, но лично у меня вот так :
C++123456789101112//отрисовываем все наши спрайты, кроме тех, что должны не шевелитьсяwindow.draw(sprite);window.draw(sprite1);window.setView(window.getDefaultView()); // закрепляем вид// рисуем все что не шевелитсяhud.draw(window); // либо такwindow.draw(sprite1); // либо такwindow.setView(view); // открепляем камеру видаwindow.display(); // отображаемDeffoe, твой вариант очень даже хорош.
Более оптимизированный вариант//Некропостинг но
При изменении размера окна 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);} -
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.