C#脚本实践(六): 脚本相对于C++的优势
来源:互联网 发布:淘宝客合作协议 编辑:程序博客网 时间:2024/05/15 23:44
- 在实际使用脚本之前, 根本不知道为什么要用脚本, 直到我膝盖中了一箭
- 在之前我也问过很多人, 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#脚本实践(五): 调试器
- C#脚本实践(六): 脚本相对于C++的优势
- 事务脚本的优势
- C#脚本实践(一)
- 线程相对于进程的优势
- epoll 相对于select的优势
- epoll 相对于select的优势
- Linux相对于VxWorks的优势
- Hbase相对于Mysql的优势
- mybatis相对于ibatis的优势
- Spark相对于MapReduce的优势
- 【步兵 lua】利用脚本的优势
- 延云YDB相对于Mdrill的优势
- C#脚本实践(二): Unity脚本机制分析
- C#脚本实践(二): Unity脚本机制分析
- C#脚本实践(三): 集成到游戏
- C#脚本实践(五): 调试器
- C#脚本实践(三): 集成到游戏
- C#的脚本编译
- 连续子序列最大和的各种算法
- Linux C/C++环境配置
- 韩语初级网站
- EXCEL 控制技巧
- java IO (四) 字节流与字符流之间的转换
- C#脚本实践(六): 脚本相对于C++的优势
- TIPS
- 十个小故事
- Fireworks常用的快捷键大集合
- [转]不要告诉我你懂margin(标题好嚣张啊)
- dedecms调用文章排行榜的方法
- 基于REST架构的Web Service设计
- Linux中常用C/C++一些头文件的作用
- REST WebService与SOAP WebService的比较(转)