首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SFML:保持RenderWindow的局部区域不刷新

SFML:保持RenderWindow的局部区域不刷新
EN

Stack Overflow用户
提问于 2019-04-01 21:29:56
回答 1查看 214关注 0票数 1

我希望获得与Winforms的GraphicsPath相同的效果,它允许保持myForm的某些特定区域不刷新。f.i.:

代码语言:javascript
复制
myForm.Invalidate(new Region(graphicsPath));

我的最终目标是使用将提供给外部应用程序的HDC (设备上下文句柄)在未刷新的位置绘制内容。(这目前使用winforms工作)。

我使用的是SFML.Net 2.4,我这样创建我的窗口:

代码语言:javascript
复制
 SFML.Graphics.RenderWindow  mySfmlWindow = new RenderWindow(myForm.Handle, settings);

但是,我仍然可以在myForm上创建HDC,即使不调用:

代码语言:javascript
复制
mySfmlWindow.Clear(color);

,外部应用程序绘制的内容仍会立即清除。

EN

回答 1

Stack Overflow用户

发布于 2019-04-02 21:25:39

手动方法

你可以自己绘制你想要的背景。我有一个例子,我手工绘制了一半的窗口背景,而另一半没有被清除。

左半部分用灰色“清除”,只是为了显示这一点。

在代码中,我使用sf::RectangleShape清除窗口,但如果形状更复杂,也可以使用sf::VertexArray

完整代码

代码语言:javascript
复制
int main(){
    sf::RenderWindow win(sf::VideoMode(640, 480), "SFML Test");

    sf::RectangleShape r1;
    r1.setOrigin(sf::Vector2f(25, 25));
    r1.setPosition(50, 50);
    r1.setSize(sf::Vector2f(50, 50));
    r1.setFillColor(sf::Color::Red);

    sf::RectangleShape r2;
    r2.setOrigin(sf::Vector2f(25, 25));
    r2.setPosition(400, 50);
    r2.setSize(sf::Vector2f(50, 50));
    r2.setFillColor(sf::Color::Blue);


    sf::RectangleShape updatedRegion;
    updatedRegion.setPosition(0, 0);
    updatedRegion.setSize(sf::Vector2f(320, 480));  // Half window
    updatedRegion.setFillColor(sf::Color(30,30,30));    // Dark gray just for the sake of the example

    while (win.isOpen())
    {
        sf::Event event;
        while (win.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
            {
                win.close();
            }
        }

        //win.clear();              // We skip the clearing process
        win.draw(updatedRegion);    // And do our own "clear"
        win.draw(r1);
        win.draw(r2);
        win.display();

        // Just some movement to test the concept
        r1.rotate(0.01);
        r2.rotate(0.01);

    }

    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55456355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档