如果你想拿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)相关推荐

  1. 会议签到二维码怎么做?30秒快速完成扫码签到

    当参加企业大型会议时,一般情况下都会要求参会人员在到现场时进行签到,传统的方式是在门口进行手写签名,但是这种方式会造成代签或者占用非常多的时间.为了解决传统方式的弊端,通过扫描二维码来进行会议签到是现 ...

  2. 获取朋友圈照片_朋友圈可以发 30 秒视频啦!用微视这个新功能就能办到

    对于许多热爱分享生活中所见所闻的朋友来说,在发朋友圈时可能都会有这样的感觉:只能分享 15 秒以内的视频,完全不够用啊. 如果你也有同样的困扰,今天,A 君就给你介绍一个实用新功能,让你能够在朋友圈中 ...

  3. 微视内测新功能:可发30秒视频到朋友圈

    据悉,微视近日内测新功能,用户在获取到内测资格后,可用微视发视频同步到朋友圈,时长最高可达30秒. 据悉,用户打开微视之后,可在拍摄界面右下角看到"朋友圈30秒资格"的字样,点击后 ...

  4. [Teaching] [Silverlight] 用 Silverlight 一起開發Kuso小遊戲《捏氣泡》- 設計人員篇

    楔子 當程式人員完成遊戲的骨架後,就交給設計人員,將介面的部分一鼓作氣地製作完成吧! 我們採用的技術平台及工具如下: 1. Silverlight 4 2. Visual Studio 2010 3. ...

  5. 經典IP華麗回歸,NFT遊戲《開心農場物語》将於2022年5月30日13:30正式公測

    在多年前爆火的游戲IP中,一定有開心網旗下的<開心農場>的一席之地.<開心農場>是由Five Minutes開發機發行,於2008年開布的一款以種植為主的社交網頁游戲,玩家可以 ...

  6. DeepMind推出首个商业产品,30秒内准确诊断眼疾!

    来源:Financial Times.智东西编译 摘要:这个设备能像最好的医学专家一样,准确地诊断各种眼部疾病. 4月1日,谷歌母公司Alphabet旗下位于伦敦的AI部门DeepMind已打造出了可 ...

  7. 遊戲是這樣寫成的 (第三篇: 簡單的遊戲框架)

    遊戲是這樣寫成的 (第三篇: 簡單的遊戲框架) 通過上一篇, 我們已有個基本的畫圖功能, 這次讓我們弄一個簡單的遊戲框架吧! 其實一般的遊戲, 大至有兩個主要的函數就可以了: update 和 ren ...

  8. visualboyadvance滤镜_VisualBoyAdvance-M v2.14 – 最新版!免費用電腦玩 GBA/GBC 遊戲的經典模擬器...

    有在電腦玩 GBA/GBC 遊戲的玩家,一定對 VisualBoyAdvance(VBA) 這款知名的模擬器不陌生,只不過 VBA 已經很久沒有更新版本,上一版還停留在 2004 年的 v1.7.2 ...

  9. 服务器销售开场白30秒,精准开场白,拒绝被秒杀 ——终端门店销售开场话术的三段式设计...

    顾客"跑不跑",就看30秒,在开场的前30秒,顾客会对销售人员做出预判:这个人是谁?这个人想干嘛?这里有没有我想要的东西?这里的环境会不会让我不舒服?在这里我会不会有存在感-- 实 ...

最新文章

  1. http请求 get 与 post 区别
  2. CISP/CISA 每日一题 11
  3. 3、Spring配置类
  4. 微软的python开发工具_面向 Python 开发人员的 Azure 工具
  5. 【云计算的1024种玩法】云端打造家庭文件备份中心
  6. html5做在线音乐,html5实现在线响应式音乐播放器
  7. LeetCode 68. Text Justification
  8. 有序表的索引顺序结构查找次数分析
  9. 【月径流预测】基于matlab人工生态系统算法优化BP神经网络月径流预测【含Matlab源码 2000期】
  10. php大小写转换,php中字母大小写转换函数
  11. 主板检测卡c5_主板测试卡代码及解决方法
  12. 3904三极管是什么功能_新方法讲解三极管工作原理
  13. b站python_python学习 —— B站抢楼原理
  14. mysql数据库修改初始密码
  15. 卡尔曼滤波估计导弹位置Python代码
  16. linux php zlib,Linux查询zlib版本
  17. 什么是网站结构,为什么它很重要?
  18. 【古琴】初学者选择练习琴的六条准则
  19. 【鼠标移动到上面自动显示提示信息文字】
  20. STM32学习之智能灯的实现 (STM32F103C8)

热门文章

  1. 赚小钱,靠学一门技术没问题,那想赚大钱该怎么做呢?
  2. 小米会在芯片产业异军突起吗?
  3. DropBlock正则化
  4. 为什么很多人不跑滴滴了?
  5. sql加载配置文件时出错:_SQL复制:基本设置和配置
  6. sql2012 ssrs_SQL Server Reporting Services(SSRS)共享数据集
  7. C++中去掉string字符串中的\r\n等
  8. Java之正則表達式【使用语法】
  9. mongodb由于目标计算机积极拒绝无法连接失败
  10. Jmeter入门1 官网下载及安装