我爱代码 - 专业游戏安全与逆向论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 4481|回复: 0

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

[复制链接]

2381

主题

53

回帖

9145

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9145
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|小黑屋|手机版|Archiver|我爱代码 - 专业游戏安全与逆向论坛 ( 陇ICP备17000105号-1 )

GMT+8, 2025-2-24 05:49 , Processed in 0.046209 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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