作者:龍飛
有了按鈕類,我們制作對話框就很輕松了。邊寫程序邊說明吧。
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()方法,一次性的將接收事件,判斷事件,顯示按鈕的不同狀態集成性的完成了。
posted on 2008-04-19 12:32
lf426 閱讀(3804)
評論(2) 編輯 收藏 引用 所屬分類:
SDL入門教程