我開始製作一個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