У меня возникли проблемы с изменением размеров объектов в окне. Я попытался создать пустоту, которая изменяет размер представления, но кажется, что он работает неправильно. Я читаю ширину и высоту из INI-файла, и я не знаю, нужно ли мне изменять размер представления, даже когда целые числа загружены. Я знаю, что он не работает правильно, потому что я сделал куб 50x50 (выглядит нормально в 650x480) и изменил размер окна до 1920x1080, куб выглядит как прямоугольник. Вот код:
#include <SFML/Graphics.hpp>
#include "Manager.h"
#include "IniData.h"
#include <string>
#include "StateDev.h"
void resizeView(const sf::RenderWindow& window, sf::View& view)
{
float aspectRatio = float(window.getSize().x) / float(window.getSize().y);
view.setSize(480 * aspectRatio, 480);
}
int main()
{
Manager manager;
IniData iniData;
float deltaTime{ 0.0f };
sf::View view(sf::Vector2f(0.0f, 0.0f), sf::Vector2f(640.0f, 480.0f));
std::string title{ "Engine" };
sf::Clock clock;
sf::VideoMode vidMode(unsigned int(iniData.valWindowSize.x), unsigned int(iniData.valWindowSize.y));
sf::RenderWindow window(vidMode, title, sf::Style::Titlebar | sf::Style::Close);
if(iniData.valResizable) window.create(vidMode, title, sf::Style::Titlebar | sf::Style::Close |
sf::Style::Resize);
window.setVerticalSyncEnabled(true);
window.setView(view);
manager.UpdateState(new StateDev());
while (window.isOpen())
{
deltaTime = clock.restart().asSeconds();
if (deltaTime > 1.0f / 20.0f) deltaTime = 1.0f / 20.0f;
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed) window.close();
if (event.type == sf::Event::Resized) resizeView(window, view);
if(!manager.GetCurrentState() == 0)
manager.GetCurrentState()->ProcessInput(event, deltaTime);
}
if (!manager.GetCurrentState() == 0)
manager.GetCurrentState()->Update(deltaTime);
window.clear();
if (!manager.GetCurrentState() == 0)
manager.GetCurrentState()->Render(window);
window.display();
}
}