【发布时间】:2012-02-04 05:03:20
【问题描述】:
根据我在应用程序窗口周围绘制和移动正方形的程序的代码,我在调整应用程序窗口大小时遇到了问题。当我相应地处理调整大小并更改状态时,屏幕上应该绘制并且在调整大小之前的所有内容都消失了。我不知道为什么,因为在调整窗口大小期间没有任何对象内部坐标发生变化。
我的问题是谁能指出我正确的方向来解决我的问题。(代码编译得很好)
void ResizeWindow()
{
screen_width = event.resize.w;
screen_height = event.resize.h;
SDL_SetVideoMode(screen_width, screen_height, bpp, SDL_OPENGL | SDL_RESIZABLE | SDL_DOUBLEBUF);
glViewport(0, 0, screen_width, screen_height);
glMatrixMode(GL_PROJECTION);
glOrtho(0, screen_width, 0, screen_height, -1, 1);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
}
主循环:
while (running == true)
{
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_VIDEORESIZE: ResizeWindow(); break; // resizing called here
case SDL_QUIT: running = false; break;
case SDL_KEYDOWN: square.Handle_Input(down); break;
case SDL_KEYUP: square.Handle_Input(up); break;
}
}
square.Move();
square.Check_Collision();
glClear(GL_COLOR_BUFFER_BIT);
square.Draw();
SDL_GL_SwapBuffers();
}
在调整窗口大小之前,一切都运行良好。
【问题讨论】:
-
我看到了您之前的问题,但当时无法指出所有问题。我相信你还没有解决你之前的问题。您可能应该发布您所做的更改以使其作为您自己的答案并关闭问题。
-
我的建议是否解决了问题?
-
自从我发布这个问题以来我一直在睡觉,你的回答很有道理,尤其是关于 SDL_SetVideoMode 的那一点,回头看,这似乎是我的一个愚蠢的错误。我之前发布的问题确实有一个问题,这是我的另一个大错误;我是凭记忆工作的,没有查找 glOrtho 参数。我认为它从左到右为 0-0。我现在就试试你的建议
-
在 sdl 2.0 中 resize 事件被称为
SDL_WINDOWEVENT_RESIZED