好吧,我的问题是我正在尝试重新创建一个蛇游戏克隆,但是在开始时我遇到了一个问题,在屏幕中央显示一个简单的矩形。我不知道是什么问题我使用了与我在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;
}
答案 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)
好的,多么愚蠢,我刚刚创建了一个新项目并再次尝试,现在它用相同的代码显示我需要的一切,很好。