嗨,我已经在 sdl 上编码了几个月,我正在尝试一个小游戏,我可以管理状态,我有一个介绍屏幕,一个带有播放按钮和游戏状态的主屏幕,我加载了一张地图并专注于我控制的角色(实体)和另一个进行碰撞测试,我可以让相机专注于我的角色并跟随他在地图上,问题是我想在游戏菜单中尝试(提供更多速度,健康,对角色的力量和类似的东西)所以我创建了一个新类,它在屏幕上呈现一个菜单,其中包含一个覆盖整个屏幕的图像和一个关闭菜单的按钮,但是当我激活菜单时(whit一个按键事件)菜单显示,但按钮不做任何事情,过了一会儿菜单不再显示,“创建菜单”的事件不起作用。
我在屏幕上绘图的代码是这样的:
bool Draw::OnDraw(SDL_Surface* screen, SDL_Surface* image_draw, int x, int y)
{
if(screen == NULL || image_draw == NULL)
{
return false;
}
SDL_Rect drawing;
drawing.x = x;
drawing.y = y;
SDL_BlitSurface(screen, NULL, image_draw, &drawing);
return true;
}
我也用这个创建屏幕:
if((screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF)) == NULL)
{
return false;
}
我试过 SDL_Flip(screen) 但没有,我认为问题是在屏幕上绘制,但我可以用什么其他方式来制作菜单。更多代码:
我正在激活这样的菜单:
case SDLK_h: {
hero_menu = true;
break;
}
在我的渲染功能上,我这样做:
if(hero_menu)
{
MenuHero call_menu;
call_menu.Activate_Menu(screen);
}
void MenuHero::Activate_Menu(SDL_Surface* screen)
{
menu_back = Draw::OnLoad("./image/hero_screen.png");
close_button = Draw::OnLoad("./image/close.png");
Draw::OnDraw(screen, menu_back, 0, 0);
编辑:11/7/03 我终于找到了我的错误,并且能够解决它,但是我现在有一个新问题,我这样调用我的菜单:
case SDLK_h: {
MenuHero activate;
activate.Activate_Menu();
break;
}
在 MenuHero 类的 Activate_Menu() 函数中,我有这个:
void MenuHero::Activate_Menu()
{
SDL_Surface* screen;
menu_back = Draw::OnLoad("./image/hero_screen.png");
Draw::OnDraw(screen, menu_back, 0, 0);
现在它不会在屏幕上绘制任何内容,我一直在我的整个代码中使用 SDL_Surface* 屏幕。我不是指着屏幕吗?或此范围内的屏幕为空?我该如何解决这个问题?