SDL資料(六) 鍵盤事件

2021-06-02 01:39:31 字數 1582 閱讀 3787

sdl系列教程(六):鍵盤事件

下面,我們先來看一下這段**,這段**來自上面的教程:

done = 0;

while (!done)

} /*在螢幕上畫圖*/  

//更新螢幕

if( sdl_flip( screen ) == -1 )

} 這段**說明什麼呢?首先,我們讓done=0,然後進入迴圈.done=0迴圈,done=1退出。然後設定乙個sdl_event事件event,用於偵聽視窗事件,如果事件為sdl_keydown,什麼事也不做,而當我們的事件為sdl_quit時,設定done為1,然後退出。

如果沒有視窗事件,那麼就在螢幕上畫圖,然後更新螢幕,如果done不為1,繼續檢測。

現在,我們要在遊戲迴圈中加入鍵盤事件。

我們要如何加呢?

在視窗事件之後,畫圖函式之前加入下列**:

uint8 *keystates = sdl_getkeystate( null );

//如果向上鍵被按下

if( keystates[ sdlk_up ] )

//如果向下鍵被按下

if( keystates[ sdlk_down ] )

//如果向左鍵被按下

if( keystates[ sdlk_left ] )

//如果向右鍵被按下

if( keystates[ sdlk_right ] )

sdl_getkeystate函式用於得到按鍵資訊,然後儲存在keystates陣列中。keystates陣列是乙個專門用於儲存按鍵狀態的陣列。然後用sdlk_up,sdlk_left,sdlk_right來表示上,左,和右等鍵的狀態。還有其它的按鍵表示,祥見下圖:

在上面的**中,我們是這樣定義的,如果按向上鍵,y座標減1,相反加1;按向左鍵,x座標減1,相反加1。

這時,我們就能控制圖象的移動了,看下面的截圖:

細心的你也許發現,我們拖**象的時候,在它的後面留下了軌跡。顯然,這是不行的。

為什麼有這種現象呢?

那是因為sdl畫好圖象之後,並不會去清空螢幕,它只是更新圖象,所以才留下了這些軌跡。

要如何消除這些軌跡呢?

我的想法是這樣,在顯示一幅圖象之前,先用一幅圖象去覆蓋那些因我們拖動而留下的軌跡,然後再來顯示它。

利用這個辦法,首先,我們需要再定義一張圖象,並且這張圖象最好和螢幕一樣大。

先定義一張圖象:

sdl_su***ce *background=null;

然後匯入它:

background=load_image("background.png");

最後在顯示我們需要的圖象前顯示它:

/*在螢幕上畫圖*/  

測試的結果如下,我們發現軌跡消失了:

)遊戲開發欄目,如果你需要遊戲開發方面的書籍請參考金橋書城遊戲頻道(

)。 如果你在閱讀本篇文章時有什麼好的建議請來信給我,我的e_mail: [email protected]. 如果你在使用sdl時有什麼問題,請到金橋科普**(

)遊戲開發欄目,我將詳細地為你解答。

在下一節中,我們將根據前面所學的內容做乙個簡單的遊戲――推箱子。

(六)鍵盤事件

keys 類提供了鍵盤上幾乎所有按鍵的方法。前面了解到,send keys 方法可以用來模擬鍵盤輸入,除此 之外,我們還可以用它來輸入鍵盤上的按鍵,甚至是組合鍵,如 ctrl a ctrl c 等。from selenium import webdriver 引入 keys 模組 from sele...

SDL滑鼠事件

滑鼠事件有這麼多種,手柄的可以忽視,sdl.sdl keydown,sdl.sdl keyup,sdl.sdl mousemotion,sdl.sdl mousebuttondown,sdl.sdl mousebuttonup應該是常用的。public enum eventtypes 滑鼠點選後的b...

js鍵盤事件以及鍵盤事件攔截

寫乙個舉例其他都類似 比如ctrl c window.onkeydown function e 一般簡寫 window.onkeydown function e 資源搜尋 大全 廣州vi設計公司 比如攔截ctrl h事件 window.onkeydown function e script 但是有些...