我开始制作一个SDL版本的康威生命游戏。我之前使用过SDL,但从未直接访问像素。我写了下面的代码,它的表现很慢。我试过使用UpdateRect而不是Flip,两者之间没有区别。我用SWSURFACE初始化了SDL。我能做些什么来改善它吗?我有解决方法(对更大的像素使用bmp等)。 plot数组是640x480的Cell对象,它只包含一个可以通过getter/setter访问的'alive'成员。我想要做的就是让鼠标高效地绘制像素。我需要使用OpenGL来做到这一点吗?我想澄清一下,我意识到现代硬件不适用于每像素访问。但看到这就是我需要的,我正在寻找解决方案。SDL的每像素访问速度加快
while (quit == false)
{
int pX = 0;
int pY = 0;
bool did_set = false;
if (SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_MOUSEBUTTONDOWN:
plot[event.button.y][event.button.x].setAlive(true);
pX = event.button.x;
pY = event.button.y;
did_set = true;
break;
case SDL_QUIT:
quit = true;
break;
}
}
if (did_set)
{
SDL_LockSurface(screen);
Uint32 p = SDL_MapRGB(screen->format, 255,255,255);
putpixel(screen, pX, pY, p);
SDL_UnlockSurface(screen);
}
SDL_Flip(screen);
}
chhe鼠标移动一个容器,并在一个地方做所有的绘图。即一个render()函数。此外,您进行的比较次数,switch语句到if ...将您的代码分解成函数或对象成员函数,以处理您需要的任何事件。并尽可能少地保留循环内的实际处理。做到这一切,你应该看到执行速度的显着提高。目前通过代码,你发布了更新屏幕的循环,当你真正需要做的只是更新屏幕 – johnathon 2012-07-16 17:33:50
在战略时代,比如鼠标移动时,以及窗口需要重新绘制时(调整大小,模糊等) – johnathon 2012-07-16 17:35:52