更多 SDL C++ Opengl 显示问题
Posted
技术标签:
【中文标题】更多 SDL C++ Opengl 显示问题【英文标题】:More SDL C++ Opengl display trouble 【发布时间】:2011-10-08 15:52:06 【问题描述】:我似乎一遍又一遍地遇到同样的麻烦,而且我的脑袋也想不通。这个程序不会像我想要(和预期的那样)在屏幕上显示桨:(-
#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
SDL_Event event;
const int paddle_width = 20;
const int paddle_height = 80;
class PlayerPaddle
private:
int xloc;
int yloc;
int yvel;
public:
PlayerPaddle()
int xloc = 20;
int yloc = 200;
int yvel = 0;
void ShowPaddle()
glTranslatef(xloc,yloc,0);
glBegin(GL_QUADS);
glColor4f(1.0,1.0,1.0,1.0);
glVertex3f(0,0,0);
glVertex3f(20,0,0);
glVertex3f(20,80,0);
glVertex3f(0,80,0);
glEnd();
glLoadIdentity();
void MovePaddle()
yloc += yvel;
void Handle_Input()
if( event.type == SDL_KEYDOWN )
switch( event.key.keysym.sym )
case SDLK_UP: yvel -= paddle_height / 2; break;
case SDLK_DOWN: yvel += paddle_height / 2; break;
else if( event.type == SDL_KEYUP )
switch( event.key.keysym.sym )
case SDLK_UP: yvel += paddle_height / 2; break;
case SDLK_DOWN: yvel -= paddle_height / 2; break;
;
void init ()
SDL_Init(SDL_INIT_EVERYTHING);
SDL_SetVideoMode(640,480,32,SDL_OPENGL);
SDL_WM_SetCaption( "Pong", NULL );
glClearColor( 0, 0, 0, 0 );
glViewport(0, 0, 640, 480);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( 0, 640 , 480 , 0, 0, 1 );
glMatrixMode( GL_MODELVIEW );
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
int main (int argc, char **argv)
init();
PlayerPaddle ppaddle;
bool quit = false;
while (quit == false)
while (SDL_PollEvent (&event))
ppaddle.Handle_Input();
if (event.type == SDL_QUIT)
quit = true;
ppaddle.MovePaddle();
glClear(GL_COLOR_BUFFER_BIT);
ppaddle.ShowPaddle();
SDL_GL_SwapBuffers();
SDL_Quit();
return 0;
我只是得到一个清晰的黑屏,直到我退出按预期返回 0 的程序。我知道代码:
ppaddle.MovePaddle();
glClear(GL_COLOR_BUFFER_BIT);
ppaddle.ShowPaddle();
SDL_GL_SwapBuffers();
至少迭代一次,就好像我插入了一个 return 1;那里的语句程序将启动并立即返回 1。
【问题讨论】:
【参考方案1】:至少你搞砸了你的构造函数。 Again.
应该是这样的:
PlayerPaddle()
xloc = 20;
yloc = 200;
yvel = 0;
您可能还想在主循环结束时加入SDL_Delay(100)
以减慢速度,直到您进行一些更复杂的物理处理。
【讨论】:
谈论不从错误中吸取教训。感谢 genpfault 反复花时间纠正我的愚蠢错误,该程序现在可以运行了。 没问题 :) 继续学习和提问,你会变得更好!以上是关于更多 SDL C++ Opengl 显示问题的主要内容,如果未能解决你的问题,请参考以下文章