[Teaching] [Silverlight] 30秒快速建立遊戲迴圈 (Game Loop)
如果你想拿Silverlight開發遊戲,不管是在PC上採用Silverlight 3、4,或是Windows phone 7上採用Silverlight for windows phone,都離不開先建立一個遊戲迴圈 (Game Loop)。
一般開發應用程式,通常都是採用事件驅動,當有任何按鈕被按下,或是資料被更新時,觸發相對應的程式,開始進行處理。
而遊戲的開發,則採用了時間驅動,在固定的時間內,自動觸發程式碼,來處理各項工作。
這是由於遊戲必須不斷偵測及改變畫面上的各項物件變化,因此必須要在固定的時間內,重新針對所有畫面上的元素,以及使用者輸入的訊號,做一次檢核。
那為什麼遊戲不能採用事件驅動來開發呢? 事實上,並不是不能採用事件驅動來開發,而是得看的遊戲類型和規模是不是適合不必建立遊戲迴圈 (Game Loop)。
簡單來說,如果你的遊戲並沒有不斷變動位置或是狀態的AI角色,或是需要即時偵測的輸入指令,例如你想做一個丟骰子的遊戲,或是抽牌比大小的遊戲,是可以考慮不建立任何額外的遊戲迴圈 (Game Loop)。
那甚麼時候該使用遊戲迴圈 (Game Loop)呢? 假使有50個NPC需要同時移動到不同的位置,產生不同的動作,並且除了該NPC被消滅,否則他都會一直隨機的變換位置和隨機動作,這時候你就需要一個遊戲迴圈 (Game Loop),來處理這些NPC了。
Silverlight 中建立遊戲迴圈 (Game Loop)的方式有非常多種,可參考下列文章:
http://blogs.msdn.com/b/nikola/archive/2009/08/19/exposed-5-methods-to-create-game-loop-which-is-the-best.aspx
今天,我將介紹兩個非常簡單的方式,透過StoryBoard和Silverlight 4中的新行為CallMethodAction建立遊戲迴圈 (Game Loop)
Silverlight 3、Windows phone 7
在Silverlight 3和Windows phone 7中,我們將建立一個StoryBoard當作計時器,透過Duration來設定每一個迴圈執行的時間,通常遊戲會以每秒能處理多少張數或是格數來計算,在Silverlight 中由於並不是真正每次都重新繪製圖型,所以並沒有很明確的張數或格數的概念,但我們不妨還是採用這樣的概念來進行設計,假設是要每秒30的fps,那Duration就必須設定為0.033秒更新一次。
而StoryBoard中有一個Completed事件,當Completed時執行程式碼,就可以透過StoryBoard來達成遊戲迴圈 (Game Loop)的效果,實作方式如下。
1. 首先透過Blend建立一個StoryBoard
2. 建立完成後,可以先不作任何動作,就按下關閉。
3. 建立ControlStoryboardAction行為
4. 設定ControlStoryboardAction。透過ControlStoryboardAction行為,讓StoryBoard在載入後可以自動Begin
5. 透過xaml碼,設定StoryBoard的Duration和Completed
6. 在.cs中,會出現對應的方法,在這裡頭就可以寫入遊戲的更新邏輯。
Silverlight 4
在Silverlight 4中多了一個CallMethodAction行為。我們可以透過這個行為,搭配TimerTrigger,同樣可以達到遊戲迴圈 (Game Loop)的效果,實作方式如下。
1. 先在.cs內寫一個方法。
2. 設定CallMethodAction行為
3. CallMethodAction預設的Triggertype是eventTrigger,我們需要將它變更為TimerTrigger
4. 設定TimerTrigger
5. 設定TimerTrigger的MillisecondsPerTick,也就是多少毫秒要觸發,以每秒30fps來說,就是每隔0.033秒要觸發,換算為毫秒則是33毫秒。
6. 最後設定MethodName和TargetObject,TargetObject請設為該Usercontrol。
Copyright © 2010 B+ Studio.
转载于:https://www.cnblogs.com/bplus/archive/2010/08/30/1812416.html
[Teaching] [Silverlight] 30秒快速建立遊戲迴圈 (Game Loop)相关推荐
- 会议签到二维码怎么做?30秒快速完成扫码签到
当参加企业大型会议时,一般情况下都会要求参会人员在到现场时进行签到,传统的方式是在门口进行手写签名,但是这种方式会造成代签或者占用非常多的时间.为了解决传统方式的弊端,通过扫描二维码来进行会议签到是现 ...
- 获取朋友圈照片_朋友圈可以发 30 秒视频啦!用微视这个新功能就能办到
对于许多热爱分享生活中所见所闻的朋友来说,在发朋友圈时可能都会有这样的感觉:只能分享 15 秒以内的视频,完全不够用啊. 如果你也有同样的困扰,今天,A 君就给你介绍一个实用新功能,让你能够在朋友圈中 ...
- 微视内测新功能:可发30秒视频到朋友圈
据悉,微视近日内测新功能,用户在获取到内测资格后,可用微视发视频同步到朋友圈,时长最高可达30秒. 据悉,用户打开微视之后,可在拍摄界面右下角看到"朋友圈30秒资格"的字样,点击后 ...
- [Teaching] [Silverlight] 用 Silverlight 一起開發Kuso小遊戲《捏氣泡》- 設計人員篇
楔子 當程式人員完成遊戲的骨架後,就交給設計人員,將介面的部分一鼓作氣地製作完成吧! 我們採用的技術平台及工具如下: 1. Silverlight 4 2. Visual Studio 2010 3. ...
- 經典IP華麗回歸,NFT遊戲《開心農場物語》将於2022年5月30日13:30正式公測
在多年前爆火的游戲IP中,一定有開心網旗下的<開心農場>的一席之地.<開心農場>是由Five Minutes開發機發行,於2008年開布的一款以種植為主的社交網頁游戲,玩家可以 ...
- DeepMind推出首个商业产品,30秒内准确诊断眼疾!
来源:Financial Times.智东西编译 摘要:这个设备能像最好的医学专家一样,准确地诊断各种眼部疾病. 4月1日,谷歌母公司Alphabet旗下位于伦敦的AI部门DeepMind已打造出了可 ...
- 遊戲是這樣寫成的 (第三篇: 簡單的遊戲框架)
遊戲是這樣寫成的 (第三篇: 簡單的遊戲框架) 通過上一篇, 我們已有個基本的畫圖功能, 這次讓我們弄一個簡單的遊戲框架吧! 其實一般的遊戲, 大至有兩個主要的函數就可以了: update 和 ren ...
- visualboyadvance滤镜_VisualBoyAdvance-M v2.14 – 最新版!免費用電腦玩 GBA/GBC 遊戲的經典模擬器...
有在電腦玩 GBA/GBC 遊戲的玩家,一定對 VisualBoyAdvance(VBA) 這款知名的模擬器不陌生,只不過 VBA 已經很久沒有更新版本,上一版還停留在 2004 年的 v1.7.2 ...
- 服务器销售开场白30秒,精准开场白,拒绝被秒杀 ——终端门店销售开场话术的三段式设计...
顾客"跑不跑",就看30秒,在开场的前30秒,顾客会对销售人员做出预判:这个人是谁?这个人想干嘛?这里有没有我想要的东西?这里的环境会不会让我不舒服?在这里我会不会有存在感-- 实 ...
最新文章
- http请求 get 与 post 区别
- CISP/CISA 每日一题 11
- 3、Spring配置类
- 微软的python开发工具_面向 Python 开发人员的 Azure 工具
- 【云计算的1024种玩法】云端打造家庭文件备份中心
- html5做在线音乐,html5实现在线响应式音乐播放器
- LeetCode 68. Text Justification
- 有序表的索引顺序结构查找次数分析
- 【月径流预测】基于matlab人工生态系统算法优化BP神经网络月径流预测【含Matlab源码 2000期】
- php大小写转换,php中字母大小写转换函数
- 主板检测卡c5_主板测试卡代码及解决方法
- 3904三极管是什么功能_新方法讲解三极管工作原理
- b站python_python学习 —— B站抢楼原理
- mysql数据库修改初始密码
- 卡尔曼滤波估计导弹位置Python代码
- linux php zlib,Linux查询zlib版本
- 什么是网站结构,为什么它很重要?
- 【古琴】初学者选择练习琴的六条准则
- 【鼠标移动到上面自动显示提示信息文字】
- STM32学习之智能灯的实现 (STM32F103C8)