我正在用SDL2制作一款游戏,很快在游戏中占用了太多内存甚至关闭。我删除了代码,发现即使这个毫无意义,一个文件程序也会使用100%的CPU和一大笔RAM。
#include "SDL.h"
#include "SDL_image.h"
#include <cassert>
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
SDL_Renderer* gRenderer;
SDL_Window* gWindow;
void init();
void close();
int main()
{
init();
SDL_Event e;
bool quit;
while( !quit )
{
while( SDL_PollEvent( &e ) != 0 )
{
if( e.type == SDL_QUIT )
quit = true;
}
}
close();
}
void init()
{
assert( SDL_Init( SDL_INIT_EVERYTHING ) >= 0 );
gWindow = SDL_CreateWindow( "Space", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH,
SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
assert( gWindow );
gRenderer = SDL_CreateRenderer( gWindow, -1, SDL_RENDERER_ACCELERATED );
assert( gRenderer );
int imgFlags = IMG_INIT_PNG;
assert( IMG_Init( imgFlags ) & imgFlags );
SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF );
}
void close()
{
SDL_DestroyRenderer( gRenderer );
SDL_DestroyWindow( gWindow );
IMG_Quit();
SDL_Quit();
}
答案 0 :(得分:2)
正如Ivan已经提到的,你应该尝试限制程序的FPS。
一种方法是使用SDL_GetTicks
来衡量持续时间,然后使用SDL_Delay
(如果足够快)。这样,现代计算机大部分时间都会睡眠,而坏计算机仍会获得良好的帧速率:
while(running) {
auto time = SDL_GetTicks();
// Rendering and event handling
if ((SDL_GetTicks() - time) < 10) {
SDL_Delay(10);
}
}
您应该使用数字(示例中的10和10)稍微玩一下,以查看您的程序需要多少FPS。
答案 1 :(得分:1)
您正在尽快运行以进行编程,因此它会使用它可以获得的所有资源。
尝试限制FPS。
答案 2 :(得分:0)
使用assert可以使用很多RAM,也许你应该考虑不使用它们。尝试一下简单的if来测试你的初始化。
编辑:似乎RAM问题并非来自此问题。抱歉,答案不错