博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
F# 游戏编程与WPF
阅读量:6894 次
发布时间:2019-06-27

本文共 1624 字,大约阅读时间需要 5 分钟。

Ryan Cavanaugh,不是那个著名的,而是在VSPro Tools组的一位同事,他帮助我做成了一个叫做BurnedLand的。(假如您可以从中捕捉到细微的参考,那是我的荣幸。)为了玩这个游戏,当您开火的时候,您需要调整你的力量、角度,和炮弹的质量,这样会很有希望命中红罐。

替换图片

在这篇文章中,我想强调这个工程如何充分利用了下面三个方面的优势:

•F# 工程系统

•度量单位

•WPF 和数据绑定

F# 工程系统

并不是把所有的代码汇集成一个单一的工程,我把游戏的逻辑分离到一个F#库,剩下所有的UI用C# WPF应用程序来实现。由于现在的F#工程系统支持项目到项目的引用,所有的都如您期望的那样。如果您曾经在以前的MSR Research releases 尝试过多项目开发,你知道过去是多么的痛苦。

另外,检查下面美丽的新F#图标!

替换图片

 

度量单位

为了计算这些加农炮弹的弹道轨迹, 你需要把重力、速率、位置、时间等元素包含进去。

使用F# 中的度量单位来确保在编译时就能仔细检查出数学运算中的逻辑错误。(详细信息请参考的博客)

替换图片

下面是一个简单的示例。请注意一个单位为<m/s^2>的值乘以一个单位为<s>*<s>的值将得到一个单位为<m>的值。

替换图片

Windows Presentation Foundation(也就是WPF)

WPF中一个重要的功能是数据绑定。当游戏逻辑模块中的值发生变化时,您可以使用WPF中数据绑定的功能,而不是通过编程来实现更新UI,这样UI将在无人工干预的情况下实现数据同步。

举个例子,用F#编写的游戏逻辑模块,为Wind添加三个简单的属性来更全面的描述它。

// ----- Wind -----

member this.Wind with get   =m_wind
                 and  set x = m_wind <- x
                             m_PropertyChanged.Trigger(this, new PropertyChangedEventArgs( "Wind" ))
                             m_PropertyChanged.Trigger(this, new PropertyChangedEventArgs( "WindSpeed" ))
                             m_PropertyChanged.Trigger(this, new PropertyChangedEventArgs( "WindAngle" ))

member this.WindAngle = Math.Atan2(float this.Wind.Y,float this.Wind.X) * (180.0 / Math.PI)

member this.WindSpeed = String.Format( "{0:0.0} m/s" , this.Wind.Length)

通过使用WPF中的数据绑定,这些数据会被自动的更新。事实上,一旦Wind的属性发生变化,位于游戏逻辑类中的PropertyChanged事件会被触发,从而更新UI元素。

 

因此在WPF中这个“{BindingWindSpeed}”值确实是在调用F#的代码.

免责声明:以上所有提供的示例代码均没有任何形式的担保,不管是显示地还是隐示地,包括但不仅限于针对特定用途的适销性和/或适用性的暗示担保。所以换句话说,如果链接的源文件给你带来任何的不便或痛苦,我或Microsoft均无责任。

 

原文链接:

 

转载于:https://www.cnblogs.com/tryfsharp/archive/2011/12/30/2307055.html

你可能感兴趣的文章
bandersnatch建立本地pip源
查看>>
nginx禁止指定user_agent
查看>>
userdel 命令
查看>>
Oracle 12c DataGuard 出现GAP 增量恢复的处理方法
查看>>
前端js判断访问站点设备(手机还是PC)实现自动跳转代码
查看>>
mysql双主模式
查看>>
rpm 安装lamp
查看>>
区块链真的有这么厉害吗?--初识区块链后的感想(一)
查看>>
mongodb Profiling 通过慢查询日志分析查询慢的原因 相应优化
查看>>
Memcached管理与监控工具 MemAdmin
查看>>
mysql 主从复制读写分离
查看>>
在百花之中干掉一个杂草连接...
查看>>
redmine全记录(更新)
查看>>
5、HTML分组元素
查看>>
HTML文档基本格式
查看>>
for 循环的关键字 break和continue
查看>>
Map集合的四种遍历方式
查看>>
前端工程师和设计师必读文章推荐【系列三十五】
查看>>
linux系统日常管理的命令
查看>>
一小时内175个国家和地区在天猫上产生交易 香港独占鳌头
查看>>