SDL滑鼠事件

2022-04-23 15:48:53 字數 1478 閱讀 8063

滑鼠事件有這麼多種,手柄的可以忽視,sdl.sdl_keydown,sdl.sdl_keyup,sdl.sdl_mousemotion,sdl.sdl_mousebuttondown,sdl.sdl_mousebuttonup應該是常用的。

public

enum

eventtypes

滑鼠點選後的button:

public

enum

mousebutton

常用的**寫法

while (!quit) //

建立事件主迴圈

else

if (ev.button.button ==sdl.sdl_button_right)

}else

if (ev.type ==sdl.sdl_mousemotion)

else

if (ev.type ==sdl.sdl_mousebuttonup)

}else

if (ev.type ==sdl.sdl_videoresize)

else

if (ev.type ==sdl.sdl_quit)

}}

在處理sdl的事件有兩種模式,一種是等待sdl_waitevent,另一種是輪詢sdl_pollevent

目前,在網上可以查到的文章,大多數都使用了輪詢,還有人指出等待有時會導致事件處理延遲。但是我在實際coding中,使用sdl_pollevent,一執行就風扇不停的轉,用top看了下,cpu占用到了99%。

實際上,使用wait已經足夠,我不大清楚這種輪詢機制在什麼時候會用到。

以下是乙個sdl_pollevent的原型。分析一下這段程式:

在while(quit!=1)這個迴圈中,如果沒有發生任何事件,quit始終為0,那麼在使用者沒有任何操作的情況下,這裡會無限迴圈,直到event發生,進入了sdl_pollevent的迴圈中。

這就導致了cpu佔用率達到了100%. 因此,這種方法是不可取的。

在外層有迴圈時,sdl_pollevent論詢是不能用的。如果單獨使用,使用者無操作的時候,又無法進入處理事件的部分。實在不能明白它有什麼用。

我考慮是不是這個應該用在非實時處理的時候,比如while(quit!=1)迴圈中嵌入乙個sleep(1)之類。

void

waitkeyboard(subwin sw)}}

endsdl();

}

接下來是sdl_waitevent的原型

在while(quit!=1)的迴圈中,由於sdl_waitevent語句,在使用者未發生任何操作前,程式處於等待狀態,不會進入下一次迴圈,這樣就避免了cpu占用的問題。

這樣的做法才是正確處理sdl事件的方法。

void

waitkeyboard(subwin sw)

}endsdl();

}

SDL資料(六) 鍵盤事件

sdl系列教程 六 鍵盤事件 下面,我們先來看一下這段 這段 來自上面的教程 done 0 while done 在螢幕上畫圖 更新螢幕 if sdl flip screen 1 這段 說明什麼呢?首先,我們讓done 0,然後進入迴圈.done 0迴圈,done 1退出。然後設定乙個sdl eve...

滑鼠事件 跟隨滑鼠移動

案例分析 1.滑鼠不斷移動,使用滑鼠移動事件 mousemove 2.在頁面中不斷移動,給document註冊事件 3.要移動距離,而且不佔位置,我們使用絕對定位 效果 跟隨滑鼠的天使 title 6 style 7img 11style 12head 13 body 14 img src pic....

SDL學習筆記 2 事件處理

sdl事件是諸如按鍵,滑鼠移動,操縱按鈕按下之類的東西。在內部,sdl將所有等待處理的事件儲存在事件佇列中。首選方式是使用sdl pollevent 接收系統事件。它可以從主迴圈完成,並且在等待事件發布時不會掛起主迴圈。如果佇列上沒有事件,則返回0,否則返回1。定義是否退出的標誌isquit初始值設...