从类方法中清除 raylib 中的背景会使窗口闪烁

Posted

技术标签:

【中文标题】从类方法中清除 raylib 中的背景会使窗口闪烁【英文标题】:Clearing background in raylib from class method makes window flicker 【发布时间】:2020-06-20 05:09:21 【问题描述】:

您好,我正在学习 c++,所以我不确定这是否是我的愚蠢错误。我正在尝试使用 raylib 做一些简单的事情,我试图通过调用类中的方法来简单地清除背景。当我在课堂上尝试这样做时,窗口会可怕地闪烁,有时会冻结。但是当它在 main 内部被调用时,它运行得非常好并且表现得像预期的那样。我以前用很多其他语言编程过,我不太确定为什么它应该表现不同。

代码如下: main.cpp:

#include <iostream>
#include <string>
#include <array>
#include "Viewer.h"
#include <raylib.h>

using namespace std;

#define log(x) std::cout << x << std::endl


int main() 
    int screenWidth = 800;
    int screenHeight = 450;

    InitWindow(screenWidth, screenHeight, "test");

    Viewer* viewer = new Viewer();

    while (!WindowShouldClose()) 
        BeginDrawing();
        //ClearBackground(DARKGRAY);
        //DrawText("Congrats!", 190, 200, 20, LIGHTGRAY);
        //DrawLine

        viewer->draw();
        EndDrawing();
    

    delete viewer;
    CloseWindow();

    //cin.get();

查看器.cpp

#include <raylib.h>

class Viewer 
public:
    void draw() 
        ClearBackground(DARKGRAY);

    
;

查看器.h

#pragma once

class Viewer 
public:
    void draw()
;

额外信息,我正在使用 Visual Studio 2019 和 vckpg 来管理库。

这就是我所看到的:

【问题讨论】:

【参考方案1】:

看起来您正在重新定义您的绘图功能。所以它最有可能在你的标题中调用空的绘制函数定义。

查看器.h

void draw() //This is most likely what is being called.
void draw(); //Use this if you want to define it in .cpp

您可以保留 .cpp 定义并使用 void draw();。或者你可以在标题中调用 clear 查看器.h

void draw() ClearBackground(DARKGRAY);

编辑: 另外,我以前从未尝试过在我的 .cpp 中调用类。因此,如果您执行 .cpp 路由,那么您可能还需要将其更改为: 查看器.cpp

#include "viewer.h"
#include <raylib.h>

void Viewer::draw()

    ClearBackground(DARKGRAY);


【讨论】:

以上是关于从类方法中清除 raylib 中的背景会使窗口闪烁的主要内容,如果未能解决你的问题,请参考以下文章

使用 raylib 渲染核 GUI 失败

C#图片闪烁

Raylib 项目停止运行

当触发 iOS Safari 中的虚拟键盘时,它会使我的 CSS 过渡闪烁。如何解决这个问题?

Java中如何设置文字闪烁效果

在didHighlightItemAt上更改UICollectionViewCell中的背景并且在滚动时didUnhighlightItemAt闪烁