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 但是有些...