C#脚本实践(六): 脚本相对于C++的优势

  • 在实际使用脚本之前, 根本不知道为什么要用脚本, 直到我膝盖中了一箭
  • 在之前我也问过很多人, C++写逻辑什么的也行啊, 为什么要引入另一种语言呢? 听得最多的理由是:不用编译
  • 的确, C++的编译速度很浪费时间, 但也不是不能接受. 不过, 用过其他语言之后, 再想想, 持这种观点的人都是习惯了慢罢了
  • 当然, 还有很多其它原因, 可以参见miloyip的两篇文章: 混合语言的游戏开发系统架构, C++强大背后
  • 在用了一段时间C#脚本之后, 暂时总结一下相对C++的优势吧. 其中一些可能C++也能做到, 但是是需要花费一定的代价的. C++无所不能, 但是总有它不擅长的部分
    • 反射
      • 属性反射
        • 这个是非常有用的一个特性. 在做编辑器时跟PropertyGrid结合后, 基本上一个面板搞定所有的参数设置, 可以参考Unity的Inspector面板. 程序可以专注于程序逻辑, 不用在UI上花太多的精力
        • 放到脚本里也一样, 逻辑属性的扩充就是加一个成员变量, 策划也不用去配什么表了, 直接所见即所得的编辑实体属性, 还不怕填错, 来回折腾
      • 通过方法名字进行调用
        • 这可以改变一下编程的思路, 比如发送一个消息到一个对象, 你有叫这个名字的处理函数就执行, 没有就算了, 我通知完我就不管了
      • 能过类名创建对象
        • 相当于内置了工厂模式, 比较状态机中, 状态的扩充就不用麻烦再去改原有的代码了
    • 序列化
      • C++在文件保存方面如果不做好设计, 就会面临各种版本兼容问题. C#的序列化是默认就支持的, 我们再也不用去操心数据是保存成ChunkData还是BinaryXML什么的, 直接一个Serialize搞定
      • 还有一个比较有用的地方, 就是Save/Load, 比如脚本改了, 先Save, 重新载入脚本, 再Load, 就完成了运行时的更新, 见下面的"热更新"
    • 异常处理
      • C++虽然有异常处理, 但是很少有人用, 因为它本身就不完善. 把主要的程序逻辑放入脚本后, 相当于运行在一个沙盒里, 做好异常处理可以保证程序不崩溃
    • 垃圾回收
      • C++写出的代码安全性与稳定性非常依赖程序员的素质, 而脚本可以让你不用关心内存越界, 内存泄露, 非法内存访问等这种隐藏很深的BUG, 节省大量精力去专注于游戏逻辑
    • 热更新
      • 脚本可以在游戏运行过程中修改, 再重新载入, 游戏会继续按照新的逻辑运行. 这相对于C++的结束->修改->编译->重新运行->还原到指定场合, 可以节省大量的时间
      • 另一方面就是方面调试, 因为可以实时更改运行逻辑, 那很多时间相关的逻辑代码就可以方便的屏蔽, 修改, 输出等
    • 协程(Coroutine)
      • C++里没有这东西, 要改变编程的思维方式需要一段时间的适应, 具体可以参考这篇文章: 用C#中的yield实现Coroutine框架
      • 虽然只是语言级别的特性, 实际上并没有改变什么, 但是在做AI/技能什么的写出来的代码能简化太多了!
    • 其它都是一些语法糖什么的, 比如delegate, event, lambda, linq等. 程序库很全, 但是一般都依赖引擎底层本身提供的功能
    • 人力成本, 想招个好的C++程序员难啊, 想招C#/JS/Lua的逻辑程序员, 就很多了.
    • 想到再补
  • 工作中接触到很多游戏程序员, 都是C++一路走到死的, 不知道这是C++的幸运, 还是它的悲哀呢?

C#脚本实践(五): 调试器

WCF、WPF、Silverlight和区别() SilverLight可以看作是WPF的一个简化版本,或者一个轻量版本。 SilverLight是基于浏览器插件的,在浏览器中运行,服务器端不需要部署任何环境,客户端只需要安装Runtime浏览器插件,无须安装.net Framework 3.0。所以,SilverLight的运行环境不受操作系统和浏览器的种类限制(更准确的说,是受到较少的限制)。 WPF可以编写Web程序或者桌面应用程序,可以直接编译为独立运行的.Exe文件。WPF运行时必须安装.net Framework 3.0。这就要求WPF目前运行的操作系统必须是Windows Vista或者Windows XP SP2。 此外,SilverLight作为WPF的一个轻量级的版本,比WPF削减了很多功能。 比如,WPF支持直接在XAML中绑定触发来触发动画,而SilverLight就只能通过托管代码或者Javascript来进行。 另外,WPF直接支持3D效果和3D镜头变换,但是SilverLight就不支持这个了。 Silverlight原名WPF/E 就是WPF Everywhere 是WPF的一个子集。 由于名称的关系, WPF与WPF/E一直被认为是类似的东西。 其实两者除了呈现UI的部分使用的是共通语言 XAML 之外,两者在本质上有很大的不同。甚至,XAML对WPF与Silverlight有不同的意义,也不能算是两者间"共通的语言。 XAML对WPF来说,是一种把.NET程序语言改用XML来描述的方式。换句话说,XAML用在WPF上,像是另外一种程序语言。与C#, VB , IronPython相似。所以XAML能做的, C# , VB一样都可以做到。但是反过来, C# , VB 能做的,XAML不一定能做到,因为XAML是为了配合开发工具,特别设计出来的一种语言,本身有他的局限性,所以还是得配合正规的程序语言,才能完成一个真正有用的程序。 但是以目前XAML所具备的能力,不靠C# , VB而做到平常简单Flash可以做到的,应该是没啥问题。因此, Application = Code + Markup的作者Petzold才会把这本书的结构写成先用以C#来写WPF程序,后半部才介绍XAML。 避免大家误解 WPF = XAML。 XAML还可以用在WF上,所以并不局限于WPF。 如果用了XAML,以为这就是WPF的全部,就大错特错啰! 然而,XAML对Silverlight来说,本质比较贴近SVG。XAML用来描述构成画面的结构树,然后配合Javascript去操作这颗表示UI的树,以达到互动的效果。 所以对Silverlight来说, XAML像是用来扩充HTML/CSS原本不足的一组Tag。就像Firefox之中,一样可以用Javascript去操作SVG所描述的画面,藉以达成多媒体效果。 WCF,你就先把它想成Web Service的下一代也没什么问题。 WCF为Windows Communication Foundation,是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。从功能的角度来看,WCF完全可以看作是ASMX,.Net Remoting,Enterprise Service,WebService,MSMQ等技术的并集。 WPF是Windows Presentation Foundation,微软新发布的Vista操作系统的三大核心开发库之一,其主要负责的是图形显示,所以叫Presentation(呈现)。 WPF相对于WinForm,将美工(控件样式设置)与实现(代码的业务实现)分开,是一种新的架构方式。 VS2008新特性是.Net Framework 3.5。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值