Очистка фона в raylib из метода класса заставляет окно мерцать - PullRequest
1 голос
/ 20 июня 2020

Привет, я изучаю 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();
}

viewer. cpp

#include <raylib.h>

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

    }
};

viewer.h

#pragma once

class Viewer {
public:
    void draw(){}
};

Дополнительная информация, я использую Visual Studio 2019 и vckpg для управления библиотеками.

Вот что я вижу: enter image description here

1 Ответ

2 голосов
/ 10 августа 2020

Похоже, вы заново определяете свою функцию рисования. Так что, скорее всего, он вызывает определение пустой функции рисования в вашем заголовке.

viewer.h

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

Либо вы можете сохранить определение. cpp и go с void draw ( ) ;. Или вы можете просто вызвать clear в средстве просмотра заголовков. H

void draw(){ ClearBackground(DARKGRAY);}

EDIT: Кроме того, я никогда раньше не пробовал вызывать класс в моем. cpp. Поэтому, если вы используете маршрут. cpp, вам также может потребоваться изменить его на: viewer. cpp

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

void Viewer::draw()
{
    ClearBackground(DARKGRAY);
}

...