SDL入门教程(十一):3、做一个对话框

[复制链接]

该用户从未签到

2380

主题

2433

帖子

9139

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9139
QQ
跳转到指定楼层
楼主
发表于 2017-12-19 09:54:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

想要查看内容赶紧注册登陆吧!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
有了按钮类,我们制作对话框就很轻松了。边写程序边说明吧。
bool hand_dialog(const ScreenSurface& screen, const std::string& dialog_text, int size)
{
   
const int CENTRE_X = (screen.point()->w) / 2;
   
const int CENTRE_Y = (screen.point()->h) / 2;
   
const int HALF_SUB_BUTTON_W = 64 / 2;

先找出显示屏的中心点,然后是对话框按钮宽度的一半。这些是为了在屏幕中心的对称位置显示YES和NO

    PictureSurface quitBG("./images/dialog_bg.png", screen);
    quitBG.blit();

载入对话框的背景

    TextSurface quitDlg(dialog_text, screen, 215, 195, 122, size);
   
int quitDlg_x = CENTRE_X - ((quitDlg.point()->w)/2);
   
int quitDlg_y = CENTRE_Y - 50;
    quitDlg.blit(quitDlg_x, quitDlg_y);

载入对话框的提示文字

    const int YES_X = CENTRE_X - 40 - HALF_SUB_BUTTON_W;
   
const int YES_Y = CENTRE_Y + 30;
    Button yesButtonEffect(
"./images/h3_yes_off.png", "./images/h3_yes_over.png", screen);
    yesButtonEffect.setup(YES_X, YES_Y,
5);
    yesButtonEffect.blitOut();

构建YES按钮

    const int NO_X = CENTRE_X + 40 - HALF_SUB_BUTTON_W;
   
const int NO_Y = CENTRE_Y + 30;
    Button noButtonEffect(
"./images/h3_no_off.png", "./images/h3_no_over.png", screen);
    noButtonEffect.setup(NO_X, NO_Y,
5);
    noButtonEffect.blitOut();

构建NO按钮

    screen.flip();
显示屏幕

    SDL_Event gameEvent;
   
while( true ){
        
while ( SDL_PollEvent(&gameEvent) != 0 ){
            
if ( gameEvent.type == SDL_KEYDOWN ){
               
if ( gameEvent.key.keysym.sym == SDLK_ESCAPE ){
                    
return false;
                }
            }
            quitBG.blit();
            quitDlg.blit(quitDlg_x, quitDlg_y);
            
if ( yesButtonEffect.effectiveClick(gameEvent) == true )
               
return true;
            
if ( noButtonEffect.effectiveClick(gameEvent) == true )
               
return false;
            screen.flip();
        }
    }
}

主循环了。可以通过按下ESC或者按下NO按钮取消对话框,按下YES按钮则表示做出了选择。我们使用effectiveClick()方法,一次性的将接收事件,判断事件,显示按钮的不同状态集成性的完成了。

分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

快速回复高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表