You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SFML绘制两个矩形异常:仅显示黑屏且显卡满载问题求助

解决SFML中仅显示黑屏且显卡满载的问题

嘿,我来帮你搞定这个问题!你遇到的黑屏和显卡满载问题其实有两个核心原因,咱们一步步拆解解决:

一、黑屏问题的根源

你设置的两个矩形颜色透明度(alpha值)太低了:

  • background的alpha是3,water的alpha是1,这两个值几乎接近完全透明,而window.clear()默认会把窗口清成黑色,所以画出来的矩形根本看不见,看起来就是黑屏。
  • 另外你绘制顺序搞反了:如果想做出淡蓝色背景,应该先画底层的蓝色water,再画上层的淡白色background,这样叠加出来才是自然的淡蓝色效果。

二、显卡满载的原因

你的主循环没有限制帧率,SFML会让显卡全速渲染每一帧,自然会导致显卡满载。另外窗口 resize 时没有更新视图和矩形尺寸,也可能加重不必要的渲染负担。

修改后的完整代码

#include <SFML/Graphics.hpp>
#include <ctime>

int main() { 
    srand(time(NULL)); 
    sf::RenderWindow window(sf::VideoMode(500, 500), "Fish!", sf::Style::Close|sf::Style::Resize); 
    // 限制帧率,解决显卡满载问题
    window.setFramerateLimit(60);

    sf::RectangleShape water(sf::Vector2f(500,500)); 
    sf::RectangleShape background(sf::Vector2f(500,500)); 
    // 调整颜色透明度,这里改成半透明淡白色,和蓝色叠加出淡蓝色背景
    background.setFillColor(sf::Color(255,255,255,100)); 
    water.setFillColor(sf::Color(5,45,255,255)); 

    while (window.isOpen()) { 
        sf::Event event; 
        while (window.pollEvent(event)) { 
            switch (event.type) { 
                case sf::Event::Resized: {
                    // 更新视图,适配窗口大小变化
                    sf::FloatRect visibleArea(0, 0, event.size.width, event.size.height);
                    window.setView(sf::View(visibleArea));
                    // 调整矩形尺寸,适配窗口resize
                    water.setSize(sf::Vector2f(event.size.width, event.size.height));
                    background.setSize(sf::Vector2f(event.size.width, event.size.height));
                    break;
                }
                case sf::Event::Closed: 
                    window.close(); 
                    break; 
            } 
        } 
        window.clear(); 
        // 先画底层蓝色water,再画上层淡白色background
        window.draw(water);
        window.draw(background); 
        window.display(); 
    }
    return 0;
}

关键修改点总结

  • 调高了颜色的alpha值,让矩形可见,同时调整绘制顺序实现淡蓝色背景
  • 添加window.setFramerateLimit(60)限制帧率,避免显卡满载
  • 处理Resized事件时更新视图和矩形尺寸,适配窗口大小变化,同时优化渲染效率

内容的提问来源于stack exchange,提问作者sashat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:37:46