SDL_RenderFillRect不显示任何内容

时间:2018-01-20 15:08:04

标签: c++14 sdl-2

好吧,我的问题是我正在尝试重新创建一个蛇游戏克隆,但是在开始时我遇到了一个问题,在屏幕中央显示一个简单的矩形。我不知道是什么问题我使用了与我在pong clone中使用的代码相同的代码来显示paddle但是在这里它不起作用。这是代码:

#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>

bool run = true;

class Game
{
    private:
    SDL_Window* window = NULL;
    SDL_Renderer* render = NULL;
    SDL_Rect snake;

    public:
    Game()
    {
        window = SDL_CreateWindow("Snake Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 800, SDL_WINDOW_RESIZABLE);
        render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
        snake.x = 400;
        snake.y = 400;
        snake.w = 50;
        snake.h = 50;
        SDL_SetRenderDrawColor(render, 0, 0, 0, 255);
        SDL_RenderClear(render);
        SDL_RenderPresent(render);
    }

    void Event()
    {
        SDL_Event close;
        if(SDL_PollEvent(&close)){
            if(close.type == SDL_QUIT){
                run = false;
            }
        }
    }

    void InitSnake()
    {
        SDL_SetRenderDrawColor(render, 255, 255, 255, 255);
        SDL_RenderFillRect(render, &snake);
        SDL_RenderClear(render);
        SDL_RenderPresent(render);
    }
};

int main( int argc, char *argv[] )
{
    SDL_Init(SDL_INIT_EVERYTHING);
    Game game;
    while(run)
    {
        game.Event();
        game.InitSnake();
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

SDL_SetRenderDrawColor(render, 255, 255, 255, 255);
SDL_RenderFillRect(render, &snake);
SDL_RenderClear(render);
SDL_RenderPresent(render);

此代码将颜色设置为白色,绘制&#39; snake&#39;矩形,然后用当前颜色填充整个屏幕(清除)。通常的显示功能是:设置清晰的颜色,清晰,显示所有游戏内容,呈现。

此外,您的Event函数使用if(SDL_PollEvent(&close)),但如果您在帧之间累积了多个事件 - 您仍然只处理每个帧一个,这将导致不断增加的延迟并最终在队列将丢弃事件时变得太大了。使用while代替每帧读取所有事件。

答案 1 :(得分:0)

好的,多么愚蠢,我刚刚创建了一个新项目并再次尝试,现在它用相同的代码显示我需要的一切,很好。