0x02 處理視窗關閉

2021-09-11 11:38:55 字數 2055 閱讀 6315

開始之前先建立個分支,git checkout -b events

讓視窗一直顯示很好辦, 在原先**基礎上, 通過乙個死迴圈就能解決.

use sdl2::pixels::color;

fnmain

() }

複製**

rust 有乙個loop的迴圈方式,'running可以不用理會只是個生命週期標記. 現在這個程式所處的狀態算不上乙個正常的狀態, 之後要讓程式可以受使用者控制關閉.

rust-sdl2的事件控制方法在其 github 倉庫 examples 中有, 就這個樣子, 通過呼叫sdl2_contextevent_pump函式獲取 sdl2 的事件集, 再在迴圈中遍歷通過事件集的poll_iter函式獲取到的輪詢迭代器

let

mut event_pump = sdl2_context.event_pump().unwrap();

'running: loop | event::keydown => ,

_ => {}}}

}複製**

我們要處理的事件是程式quit事件和按了鍵盤的escape的事件, 現在來建立個檔案, 就叫events.rs, 放到main.rs同級目錄下

use sdl2::eventpump;

pubstruct

events

impl events

}pub

fnpump

(&mut

self) => self.quit = true,

keydown => self.key_escape = true,

_ => {}}}

}}複製**

現在結構體定義了quit,key_escape這些用來標註狀態修改的bool型別屬性, 而pump屬性是用來給內部的函式使用的, 不使用pub關鍵字來開放外部使用. 我們看到pump函式有個self的引數, 這個引數可以理解成代表結構體例項本身, 有了這個引數, 可以在結構體例項呼叫本函式時, 通過self使用例項自身的屬性, 由於我們將準備在該函式內修改例項自身的屬性值, 所以使用mut來達到可變的效果. 至於&這個符號, 如果想讓例項呼叫pump函式後還能繼續使用, 得使用借用的方式傳self.

然後在main.rs中使用一下我們的事件處理器

#![feature(uniform_paths)]

use sdl2::pixels::color;

mod events;

use events::events;

fnmain

() }

}複製**

#![feature(uniform_paths)]這一段是用來使用 rust 的新特性, 因為我想簡單點使用我們的events模組, 之後就可以直接在main函式內使用events結構體了.

後面的邏輯很簡單, 每次在迴圈中呼叫一下event.pump來根據觸發的事件修改狀態, 判斷是否停止迴圈.

這一篇我們使用乙個帶標記的loop迴圈讓程式持續可用. 通過乙個結構體, 使用impl foo的方式給結構體新增函式, 了解到函式可以通過self使用例項自身. 我們還能使用match進行模式匹配來處理資料的多種情況. 先這樣吧.

逆向工程 0x02

常用的彙編指令 指令示例 含義說明 movmov eax,ecx eax ecx 將ecx的值存入eax addadd eax,ecx eax ecx 將eax的值加上ecx的值 subsub eax,ecx eax ecx 將eax的值減去ecx的值 incinc eax eax 將eax的值加1...

招聘程式設計題0x02

python3 coding utf 8 在4x4的棋盤上擺滿了黑白棋子,黑白兩色的位置和數目隨機其中左上角座標為 1,1 右下角座標為 4,4 現在依次有一些翻轉操作,要對一些給定支點座標為中心的上下左右四個棋子的顏色進行翻轉,請計算出翻轉後的棋盤顏色。給定兩個陣列a和f,分別為初始棋盤和翻轉位置...

物聯網開發小計 0x02

自用的的家庭物聯網開發筆記 環境部署好以後就是安裝homeassistant,這裡直接用pip安裝,安裝的過程中會各種error,開 v會發現2個錯誤,乙個是setuptools的 egg info錯誤 另乙個是wheel的錯誤,對這幾個包公升級即可正常安裝了。用putty或者其他的ssh工具連上路...