創作內容

5 GP

[程式設計] C#視窗(Form)單位控制方法 - 進階篇

作者:夜下月│2014-06-20 13:03:06│巴幣:10│人氣:2175

同步發表於Ptt.cc C_Sharp版
https://www.ptt.cc/bbs/C_Sharp/M.1403239991.A.74B.html

使用 .NET Framework 4.5
http://www.microsoft.com/zh-tw/download/details.aspx?id=30653

進階篇

Q: 為什麼切換移動方向會卡卡的?
A: 因為Form1_KeyDown的事件處理,一次只能處理一個按鍵,
所以要解決這個問題,必須自己監聽按鍵。

以最基本的畫面更新速度FPS 30.0來說,這代表的是
每秒有30張禎數在跑(Frame Per Second),
也就是每秒處理30次畫面動作。

所以需要產一個Thread,每秒工作30次。
(可以試試把 FPS_PAGE 改成10看看)


而在C#中,若產生控制項的Thread與進行操作的Thread不同,會發生錯誤。
所以自訂一個控制項的委派方法去進行控制項操作(InvokeIfRequired)


另外在這個程式中,會用到兩個數學式
1. 求兩點距離
2. 單位移動位置


程式碼





註:
Keyboard.IsKeyDown 需要增加參考
1. PresentationCore.dll
2. WindowsBase.dll

並 using namesapce
System.Windows.Input


完成檔(僅exe)
http://ppt.cc/YuOr
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2481765
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:C#|程式設計|遊戲開發

留言共 2 篇留言

ays.
不好意思~
想問一下 Require() => ProcessKeyDwon() 的意思是?
是比較數值嗎?不過ProcessKeyDwon()是void?

06-21 04:27

夜下月
InvokeIfRequired() 這是自己寫的擴充方法,是用來處理 控制項(controller) 執行續(thread)問題的

所以在程式碼中的this.InvokeIfRequired(()=> ProcessKeyDown());
this 指的是Form1這個元件,去呼叫InvokeIfRequired這個擴充方法
後面那段是委派delegate 或者可以想程funcPointer函式指標

而為什麼ProcessKeyDown()要使用這樣的機制去處理,因為Keyboard.IsKeyDown()
這個方法使用的執行續與this不同,如果不使用委派機制,就會發生錯誤

可以試著把this.InvokeIfRequired() 這個委派機制拿掉看看,就會知道有什麼錯誤
06-21 10:41
ays.
InvokeIfRequired()這部分是沒有貼出來嗎? 因為好像沒有看到...
另外委派的部分拿掉結果就變成只能處理單一事件的意思?(像是按上跟右只會有往上移或右移的可能?

06-21 15:24

夜下月
文章內有喔,程式碼最下面
如果把委派拿掉,就會發生錯誤

可以試著自己打Code練習06-21 17:17
我要留言提醒:您尚未登入,請先登入再留言

5喜歡★ponderzs 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:[程式設計] C#視窗(... 後一篇:[程式設計][OpenS...

追蹤私訊切換新版閱覽

作品資料夾

monppg巴哈的各位
本人血癌活不過今年底 希望大家年底前能順順利利 幫我多看看2025年之後的世界 哈哈阿看更多我要大聲說昨天23:49


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】