开发SFML框架

Developing SFML framework

本文关键字:框架 SFML 开发      更新时间:2023-10-16

我创建了一个示例,其中我同时打开了 2 个窗口,并且窗口 1 无法在窗口 2 打开时处理事件。我更改了当前窗口的颜色以说明它的工作(当我移动鼠标时,窗口 1 打开,窗口 2 变得越来越绿)。但是,即使窗口 1 无法在窗口 2 打开时处理事件,我仍然无法更改窗口 1 的位置。我希望不能那样做。

#include <SFML/OpenGL.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
using namespace std;
sf::Event event;
int main()
{
sf::RenderWindow window1(sf::VideoMode(600, 600), "Window1");
sf::RenderWindow window2(sf::VideoMode(300, 300), "Window2");
int r=0,g=0;
while (window1.isOpen())
{
if(window2.isOpen()==false)
while (window1.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window1.close();
r=(r+1)%255;
}
else
{
while (window2.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window2.close();
g=(g+1)%255;
}
}
window1.clear(sf::Color(r,0,0));
window1.display();

window2.clear(sf::Color(0,g,0));
window2.display();
}
return 0;
}

我该怎么做?

SFML 中没有直接的功能(尽管我希望使用特定于平台的代码是可能的),但有几个解决方法:

  1. 将窗口样式更改为 sf::样式::无。这既快速又简单,但具有删除标题栏和窗口边框的效果,您可能不需要。
  2. 通过手动设置每个渲染的位置,或者检查位置变化并反转它来暴力强制窗口位置。