- 博客(22)
- 收藏
- 关注
原创 闲谈开闭原则——基于UI动画框架
本文继续聊另外一个设计原则:开闭原则。在UI动画框架中,开闭原则在“动画策略”和“移动算法”这两个类体系中均有所体现。照旧,先看一下开闭原则的定义。
2019-10-15 20:41:18 209
原创 闲谈依赖倒置原则——基于UI动画框架
前面几篇文章讨论了UI动画框架中使用的几个关键的设计模式,框架中还有一些简单的创建模式,我没有说“工厂模式”,意味着并没有严格按照“工厂模式”的定义来实现,而是简单地封装创建过程,这对于框架中的业务已经足够了。 关于设计模式的讨论就告一段落了,本文聊一聊设计模式的原则之一:“依赖倒置”原则。
2019-10-15 20:30:57 188
原创 闲谈原型模式——基于UI动画框架
前几篇文章介绍了CEGUI动画框架中主要的几个设计模式。本文接着讨论“原型模式”在动画框架中的应用。 1. 原型模式
2019-10-15 20:19:57 153
原创 闲谈策略模式——基于UI动画框架
UI动画框架中,对动画的行为进行了良好的抽象,使得动画逻辑(就是各种动画效果)和动画主体(就是承载动画的窗口,CEGUI中的Window对象)最大限度的解耦。最终,自然而然的演变出来“策略模式”。那就先看看“策略模式”的相关概念。
2019-10-15 20:16:44 154
原创 闲谈装饰模式——基于UI动画框架
本文讨论UI动画框架中应用过的一个设计模式:“装饰模式”。为什么是“应用过的”,而不是“正在用的”?原因是装饰模式在UI动画框架中的应用是一个失败的尝试,有那么点牵强,或者说“为了模式而模式”。装饰模式在框架中并没有存在多久,就被优化掉,用组合模式替代了。
2019-10-15 20:12:38 159
原创 闲谈组合模式——基于UI动画框架
前几篇文章讨论了UI动画框架中应用的最大的设计模式:“解释器模式”,本文接着讨论框架中应用了两次的设计模式:“组合模式”。
2019-10-15 20:05:14 221
原创 闲谈设计模式——基于UI动画框架
CEGUI是一个C++实现的面向对象的开源GUI库,使用CEGUI开发界面的大型RPG游戏已有不少。几年来,我参与过3个MMORPG项目,都是用CEGUI开发游戏界面。在产品的不断迭代过程中,“方便快捷地实现UI动画”一直都是一种强烈的功能性需求,比如:当玩家经验累积足够之后,需要一个跳动的箭头指向技能按钮,以提示玩家可以升级技能当农场的菜成熟之后,需要一个特效在菜品上面闪烁,以提示玩...
2019-10-15 19:24:03 264
原创 MMORPG服务器的业务钩子
很多MMORPG类游戏的开发都使用了动态语言,比如lua、python等,集成动态语言最明显的好处是可以热更新,在日常维护中,经常需要修正一个业务逻辑错误,或者修改一个配置数据项,又不想重启服务,那么动态刷新代码就成了刚需了;而动态语言解释执行代码的机制就成了刚需的不二选择。但是大部分服务器的框架甚至主要业务可能还是由静态语言编写的,比如C、C++等
2019-10-15 16:00:23 173
原创 Lua按编号拼接字符串
本文接《C++按编号拼接字符串》,给出Lua版本,具体就不详述了。直接上代码。1. 简单拼接function sprintf_x(fmt, ...) local args = {} local i = 1 local xfmt = string.gsub(fmt, "%%%s*(%d+)", function(n) ...
2019-10-12 22:16:33 992
原创 C++按编号拼接字符串
1. 前言 C/C++中用sprintf格式化拼接字符串是惯用手法,比如:char buf[1024];sprintf_s(buf, _countof(buf), "学%s,从%s到%s,只需%d天", "C++", "入门", "放弃", 21);大家都用烂了。相信也有人手误,写过这样的代码:char buf[1024];sprintf_s(buf, _countof(buf),...
2019-10-12 21:42:35 721
原创 手撸软件测试框架——lua版(二)
首先我们来实现框架中的基础组件:“用例”。但这样实现,不是很lua,简单点设计,就用Test_Node统一表示“用例”和“套件”(可以称作节点或测试节点),你已经看到了,该表名叫Test_Node,而不是Test_Case,且第一个字段type,也表达出这个思路。限于篇幅,各字段对应的Get/Set、Is等简单接口就不列举了。测试节点可以禁用/启用,单独列出CanEnableEnable和Disable。
2018-10-20 20:35:24 93 1
原创 手撸软件测试框架
CppUnit主要用于单元测试,而单元测试用例一般是由开发人员施行的,测试人员很少参与。“灰盒测试”框架主要用于功能性测试、集成测试,测试人员、开发人员皆可开发测试用例。本博介绍的“灰盒测试”框架有两个版本:lua版本和C++版本。C++版本不过是lua版本的翻译,因此C++版本暂不讨论。本博将开一个系列,从实践的角度讨论一个主要用于“灰盒测试”的框架是怎么撸出来的。这个“灰盒测试”框架的设计思想主要来源于开源的。我不是专业的软件测试人员,因此有关软件测试的理论就不多说了,你可以百度或必应一下。
2018-09-14 13:36:14 80 1
原创 代码静态检查——正则表达式集锦
有句“常在河边走,哪有不湿鞋”的老话,我们搞程序的(搞了十几年,多数都是被程序搞了),总会有走神的时候写下了这样的代码:
2018-09-03 10:01:44 673
原创 手撸软件测试框架——lua版(三)
注意:这里的Sleep不是说将框架挂起,因为本框架假设是被集成进具体的软件产品中的(比如MMORPG的客户端程序中),如果框架在独立的线程中执行,可能还可以挂起而并不影响客户端的正常运行,但仅仅是想进行自动化测试而要求被测试软件改变线程模型,对正常业务数据或逻辑增加大量无谓的锁,就有点削足适履的味道了。在最后退出之前,根据环境中的延时字段,设置定时等待下一次的迭代。用例树上,叶节点是用例节点(其它节点都是套件节点),只有用例才是可执行的,因此每一次从根节点进入时,都要(递归)找到目标用例节点以执行用例。
2018-07-31 19:54:38 81 1
原创 手撸软件测试框架——lua版(一)
不同的是,CppUnit主要用于白盒测试,需要集成源代码,本框架主要用于灰盒测试,或者集成到具体产品中,成为产品的一部分,或者独立于产品,通过协议与被测试的产品交互。点击“选择”按钮,打开“测试用例树”,选中指定的套件后,点击“运行”按钮,开始自动运行。如果某个用例没通过,则在界面上显示用例的具体信息,如上图中所示。本文仅简要介绍一下灰盒测试框架的界面和主要的功能,从用户角度展望一下测试框架的面貌。”,另外有一个“基础用例”套件,该套件放的是可以复用的用例,以避免重复开发。用例树的叶节点称为“
2018-07-23 17:22:58 80
原创 游戏UI右键菜单的实现优化
RPG类端游里面右键菜单的应用场景是随处可见,比如好友,聊天栏玩家名字连接,队友,帮会成员等,不同的应用场景,右键菜单的功能项可能不同,比如:
2018-07-20 11:15:02 706
原创 浮点数的原理简析
1. 存储格式 我平时在写浮点数相关的代码时,经常会用一些可笑的技巧来“规避”浮点数运算导致的随机误差,浮点数运算细节晦涩难懂,我确实一直对浮点数原理及其运算一知半解,写起代码来战战兢兢,本文以1为主要参考,把浮点数的原理简单梳理一遍(主要以float为例),作为笔记,以备查验。 IEEE754标准规定,浮点数由“符号”、“指数”和“尾数”3部分构成: 下表列出C++中不同...
2018-07-18 17:37:30 23028 17
原创 怎样为std::map的自定义key提供比较操作(二)
假如你为自己开发一个简单的股票投资软件,该软件系统中的核心类自然就是“股票”类(仅用于问题分析,不具有现实意义):struct Stock{ int code; // 股票代码 int id; // 行业id float price; // 股价 float pe; // 市盈率...
2018-07-11 16:45:54 1830
原创 怎样为std::map的自定义key提供比较操作(一)
stl的关联容器(map,set)的key一般要求提供 < 比较操作。假设我们有一个结构SomeKey:
2018-07-09 20:50:19 6027 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人