自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

酱油棍的专栏

江流天地外,山色有无中

  • 博客(22)
  • 收藏
  • 关注

原创 闲谈解释器模式——基于UI动画框架

本文及后续的几篇博文将围绕UI动画框架的“框架”来讨论。就让我们从配置开始说起吧。

2019-10-20 08:27:53 222

原创 闲谈开闭原则——基于UI动画框架

本文继续聊另外一个设计原则:开闭原则。在UI动画框架中,开闭原则在“动画策略”和“移动算法”这两个类体系中均有所体现。照旧,先看一下开闭原则的定义。

2019-10-15 20:41:18 201

原创 闲谈依赖倒置原则——基于UI动画框架

前面几篇文章讨论了UI动画框架中使用的几个关键的设计模式,框架中还有一些简单的创建模式,我没有说“工厂模式”,意味着并没有严格按照“工厂模式”的定义来实现,而是简单地封装创建过程,这对于框架中的业务已经足够了。 关于设计模式的讨论就告一段落了,本文聊一聊设计模式的原则之一:“依赖倒置”原则。

2019-10-15 20:30:57 177

原创 闲谈原型模式——基于UI动画框架

前几篇文章介绍了CEGUI动画框架中主要的几个设计模式。本文接着讨论“原型模式”在动画框架中的应用。 1. 原型模式

2019-10-15 20:19:57 144

原创 闲谈策略模式——基于UI动画框架

UI动画框架中,对动画的行为进行了良好的抽象,使得动画逻辑(就是各种动画效果)和动画主体(就是承载动画的窗口,CEGUI中的Window对象)最大限度的解耦。最终,自然而然的演变出来“策略模式”。那就先看看“策略模式”的相关概念。

2019-10-15 20:16:44 144

原创 闲谈装饰模式——基于UI动画框架

本文讨论UI动画框架中应用过的一个设计模式:“装饰模式”。为什么是“应用过的”,而不是“正在用的”?原因是装饰模式在UI动画框架中的应用是一个失败的尝试,有那么点牵强,或者说“为了模式而模式”。装饰模式在框架中并没有存在多久,就被优化掉,用组合模式替代了。

2019-10-15 20:12:38 151

原创 闲谈组合模式——基于UI动画框架

前几篇文章讨论了UI动画框架中应用的最大的设计模式:“解释器模式”,本文接着讨论框架中应用了两次的设计模式:“组合模式”。

2019-10-15 20:05:14 210

原创 再谈解释器模式——基于UI动画框架

接上文,继续讨论UI动画的框架部分,并对不属于“解释器模式”的编译过程进行分析。1. 词法分析

2019-10-15 19:57:33 160

原创 闲谈设计模式——基于UI动画框架

  CEGUI是一个C++实现的面向对象的开源GUI库,使用CEGUI开发界面的大型RPG游戏已有不少。几年来,我参与过3个MMORPG项目,都是用CEGUI开发游戏界面。在产品的不断迭代过程中,“方便快捷地实现UI动画”一直都是一种强烈的功能性需求,比如:当玩家经验累积足够之后,需要一个跳动的箭头指向技能按钮,以提示玩家可以升级技能当农场的菜成熟之后,需要一个特效在菜品上面闪烁,以提示玩...

2019-10-15 19:24:03 255

原创 MMORPG服务器的业务钩子

很多MMORPG类游戏的开发都使用了动态语言,比如lua、python等,集成动态语言最明显的好处是可以热更新,在日常维护中,经常需要修正一个业务逻辑错误,或者修改一个配置数据项,又不想重启服务,那么动态刷新代码就成了刚需了;而动态语言解释执行代码的机制就成了刚需的不二选择。但是大部分服务器的框架甚至主要业务可能还是由静态语言编写的,比如C、C++等

2019-10-15 16:00:23 161

原创 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 979

原创 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 687

原创 手撸软件测试框架——lua版(二)

首先我们来实现框架中的基础组件:“用例”。但这样实现,不是很lua,简单点设计,就用Test_Node统一表示“用例”和“套件”(可以称作节点或测试节点),你已经看到了,该表名叫Test_Node,而不是Test_Case,且第一个字段type,也表达出这个思路。限于篇幅,各字段对应的Get/Set、Is等简单接口就不列举了。测试节点可以禁用/启用,单独列出CanEnableEnable和Disable。

2018-10-20 20:35:24 82 1

原创 手撸软件测试框架

CppUnit主要用于单元测试,而单元测试用例一般是由开发人员施行的,测试人员很少参与。“灰盒测试”框架主要用于功能性测试、集成测试,测试人员、开发人员皆可开发测试用例。本博介绍的“灰盒测试”框架有两个版本:lua版本和C++版本。C++版本不过是lua版本的翻译,因此C++版本暂不讨论。本博将开一个系列,从实践的角度讨论一个主要用于“灰盒测试”的框架是怎么撸出来的。这个“灰盒测试”框架的设计思想主要来源于开源的。我不是专业的软件测试人员,因此有关软件测试的理论就不多说了,你可以百度或必应一下。

2018-09-14 13:36:14 63 1

原创 代码静态检查——正则表达式集锦

有句“常在河边走,哪有不湿鞋”的老话,我们搞程序的(搞了十几年,多数都是被程序搞了),总会有走神的时候写下了这样的代码:

2018-09-03 10:01:44 662

原创 手撸软件测试框架——lua版(三)

注意:这里的Sleep不是说将框架挂起,因为本框架假设是被集成进具体的软件产品中的(比如MMORPG的客户端程序中),如果框架在独立的线程中执行,可能还可以挂起而并不影响客户端的正常运行,但仅仅是想进行自动化测试而要求被测试软件改变线程模型,对正常业务数据或逻辑增加大量无谓的锁,就有点削足适履的味道了。在最后退出之前,根据环境中的延时字段,设置定时等待下一次的迭代。用例树上,叶节点是用例节点(其它节点都是套件节点),只有用例才是可执行的,因此每一次从根节点进入时,都要(递归)找到目标用例节点以执行用例。

2018-07-31 19:54:38 68 1

原创 手撸软件测试框架——lua版(四)

本文简单介绍一下开发测试用例用到的几个关键接口。

2018-07-31 12:17:31 58 1

原创 手撸软件测试框架——lua版(一)

不同的是,CppUnit主要用于白盒测试,需要集成源代码,本框架主要用于灰盒测试,或者集成到具体产品中,成为产品的一部分,或者独立于产品,通过协议与被测试的产品交互。点击“选择”按钮,打开“测试用例树”,选中指定的套件后,点击“运行”按钮,开始自动运行。如果某个用例没通过,则在界面上显示用例的具体信息,如上图中所示。本文仅简要介绍一下灰盒测试框架的界面和主要的功能,从用户角度展望一下测试框架的面貌。”,另外有一个“基础用例”套件,该套件放的是可以复用的用例,以避免重复开发。用例树的叶节点称为“

2018-07-23 17:22:58 68

原创 游戏UI右键菜单的实现优化

RPG类端游里面右键菜单的应用场景是随处可见,比如好友,聊天栏玩家名字连接,队友,帮会成员等,不同的应用场景,右键菜单的功能项可能不同,比如:

2018-07-20 11:15:02 688

原创 浮点数的原理简析

1. 存储格式  我平时在写浮点数相关的代码时,经常会用一些可笑的技巧来“规避”浮点数运算导致的随机误差,浮点数运算细节晦涩难懂,我确实一直对浮点数原理及其运算一知半解,写起代码来战战兢兢,本文以1为主要参考,把浮点数的原理简单梳理一遍(主要以float为例),作为笔记,以备查验。   IEEE754标准规定,浮点数由“符号”、“指数”和“尾数”3部分构成:   下表列出C++中不同...

2018-07-18 17:37:30 22825 17

原创 怎样为std::map的自定义key提供比较操作(二)

  假如你为自己开发一个简单的股票投资软件,该软件系统中的核心类自然就是“股票”类(仅用于问题分析,不具有现实意义):struct Stock{ int code; // 股票代码 int id; // 行业id float price; // 股价 float pe; // 市盈率...

2018-07-11 16:45:54 1820

原创 怎样为std::map的自定义key提供比较操作(一)

stl的关联容器(map,set)的key一般要求提供 < 比较操作。假设我们有一个结构SomeKey:

2018-07-09 20:50:19 5972 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除