- 博客(33)
- 资源 (6)
- 收藏
- 关注
原创 设计模式在游戏中的应用--观察者模式(十)
观察者模式看似很陌生,其实可以说观察者模式是游戏中使用最多的一种模式,甚至比单例模式还要使用频繁,而且想要写好游戏的代码必须了解游戏中的那些地方使用了观察者模式,每个观察者的订阅者是谁。大多数MMORPG游戏主体就是一个while循环,通过这些while循环来更新订阅者,从而来更新观察者。例如我们有个玩家的订阅者,每个玩家就是一个观察者,我只需要更新订阅者来更新每个观察者。我们每个玩家身上有很多的b
2015-08-29 23:39:38 3292
原创 设计模式在游戏中的应用--建造者模式(九)
建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。通过这个定义,我们可以得出建造者是一种创建型模式,也就是说建造者模式的输出是一个对象,也就是UML类图中的product。 我们先看看建造者模式的UML类图: UML类图中我们可以看出,建造者模式使用了聚合、继承和依赖三种关系。第一个疑问就是为什
2015-08-26 23:59:47 1624
原创 设计模式在游戏中的应用--外观模式(八)
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。外观模式相当于KFC里面的套餐,大多数人去FKC吃中饭,本质其实就是为了填饱肚子,消费者需要主食、饮料和小吃,有了各种套餐之后,消费者去KFC可以选择各种套餐就能满足自己的需要,不至于由于自己不会点餐都点主食而造成口渴和难以下咽的情况。套餐可以满足大多数人的需求。 MMORPG游
2015-08-26 00:30:11 1797
原创 C++调用Lua的性能测试
游戏服务器经典的架构就是C++和Lua的结合,C++开发主体框架,Lua实现一些复杂的逻辑。我们都知道Lua是一种非常快的语言,但是到底有多块,我们测试下看看。C++调用Lua的性能测试,发现不对的地方望提出。实验一:我们使用C++调用Lua带8个以上参数的函数,而这个函数里面什么也没有做。我们通过这个实验能够简单地测试出:使用Lua虚拟机和向调用栈当中传入8+个参数和Lua取出这些参数的时间。
2015-08-13 22:38:59 2236
原创 设计模式在游戏中的应用--模板方法(七)
模板方法这个名字看着很陌生,其实在游戏中大量使用了模板方法,因为游戏中玩家、NPC和静态物体等不同的对象,使用多态特性能很好地进行区分。模板方法的定义是:模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。举个最简单的玩家和NPC死亡时的逻辑:流程图如下:代码如下// MVC.cpp : 定义控制台应用
2015-08-10 22:43:13 860
原创 游戏log格式的优化<<代替%d、%s
游戏log是非常关键的,对于追踪bug和查看一些信息,所以游戏里面是大量的log输出,sprintf的格式非常难用,而且对格式有较高的要求。 下面一种优化方案如下:// MVC.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <string>#include <sstream>using names
2015-08-07 23:24:43 1816 1
原创 设计模式在游戏中的应用--原型模式(六)
Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。 上面是原型模式的UML结构图。 下面是原型模式的代码:#include "stdafx.h"#include <iostream>#i
2015-07-29 22:07:34 1057
原创 设计模式在游戏中的应用--工厂方法(五)
概述:工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
2015-07-27 22:30:40 1271
原创 设计模式在游戏中的应用--代理模式(四)
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式的类图如下:代理模式是个比较有意思的设计模式。因为如果我们只是想限制对另一个对象的函数的调用,我们完全可以用一个接口,让另外一个对象继承这个接口。代理模式关键的一种关系就是Proxy与RealSubje
2015-05-15 18:59:38 1475
原创 设计模式在游戏中的应用--装饰模式(三)
装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。装饰模式有点像烤羊肉串,你可以用一个金属的物体来串各种羊肉串,也可以用竹签来串羊肉串。其中金属物体和竹签就是不同的组件,羊肉、猪肉和鸡肉等就是不同的装饰,我们可以在一个竹签或者金属杆子上按各种顺序串各种肉。装饰模式的类图如下:装饰模式的主要关键
2015-05-14 19:06:01 1635
原创 设计模式在游戏中的应用--策略模式(二)
自己接触MMORPG游戏的服务器也有段时间了,自己也从中学习了许多。Dota是我比较熟悉和喜欢的游戏,Dota里面的技能种类确实很繁多。Dota里面的技能伤害区域有很多,火女可以打出圆形的的伤害,向前冲的伤害,沙王可以打出以自己为中心的伤害。如果是我们设计游戏的话,如何来完成这些需求呢?
2015-02-04 19:10:35 1275
原创 设计模式在游戏中的应用--简单工厂模式(一)
上面是复制的简单工厂模式的一个类图。下面言归正传自己作为一个刚毕业的菜鸟,有幸能够和牛人们一起工作很开心。当时策划提出一个需求,需要针对每个职业进行不同的能量恢复。我当时接到这个需求,心中暗喜,这还不简单,把每个职业的恢复率放到一个数组里面,然后接着各种if...else...。
2015-02-03 18:19:42 1442
原创 TensorFlow学习(一)
import tensorflow.examples.tutorials.mnist.input_data as input_dataimport tensorflow as tfmnist = input_data.read_data_sets("MNIST_data/", one_hot=True)x = tf.placeholder(tf.float32, [None, 784])W
2018-01-11 10:08:29 223
转载 linux grep命令详解
转载http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html简介grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的
2015-11-15 18:48:48 524
转载 基本掌握了 make 的用法,能在Linux系统上编程
目的: 基本掌握了 make 的用法,能在Linux系统上编程。环境: Linux系统,或者有一台Linux服务器,通过终端连接。一句话:有Linux编译环境。准备: 准备三个文件:file1.c, file2.c, file2.h file1.c: #include
2015-03-11 18:46:02 443
转载 linux下的c/c++调试器gdb
gdbLinux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的一些功能:* 设置断点;* 监视程序变量的值;* 程序的单步执行;* 修改变量的值。 gdb支持下列语言C, C++ ,FORTRAN, PACA
2015-03-11 13:05:58 567
原创 多线程教程之二---线程间同步
当多个线程无限制的在同一段时间内访问同一资源时,有可能导致错误的结果的发生,例:[cpp] view plaincopy#include #include long g_iNum1,g_iNum2; DWORD WINAPI SubThread(LPVOID lpParam) { for(in
2015-03-10 18:41:35 520
转载 windows进程间通信
摘 要: 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求。编写多进程/多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的。Microsoft Win32 API提供了多种进程间通信的方法,全面地阐述了这些方法的特点,并加以比较和分析,希望能给读者选择通信方法提供参考。关键词 进程 进程通信 IPC Win32 API
2015-03-10 18:35:47 530
原创 游戏服务器开发问题(一)
最近在做游戏里面的公会,由于自己是新手,遇到两个基础的问题。一、对于用户频繁请求的操作,服务器需要加时间限制吗?在前辈们的指点下,终于明白了,服务器需要加限制,这个限制不是限制时间,其实是限制请求的频率,过滤不必要的操作。二、服务器和客户端需要保持数据的一致性,有两种做法:(1)服务器每次把更新数据发给客户端.(2)客户端每次请求。我先分析下两种做法的特点:(1)如果更新信息很多的
2014-12-12 18:50:03 651
转载 TCP/IP详解学习笔记
TCP/IP详解学习笔记 这位仁兄写得太好了TCP/IP详解学习笔记 这位仁兄写得太好了.http://blog.csdn.net/goodboy1881/category/204448.aspxTCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器TCP/IP详解学习笔记(12)-TCP的超时与重传TCP/IP详解
2014-12-05 19:19:42 860
转载 深入理解include预编译原理
你了解 #include 某个 .h 文件后,编译器做了哪些操作么? 你清楚为什么在 .h文件中定义函数实现的话需要在函数前面加上 static 修饰么?你知道 #ifndef……#define……#endif 这种防止头文件重复包含的精髓所在么?本文就是来探讨这些问题,并给出我的理解和思考,欢迎大家留言交流。1. #include 命令的作用1.1 什么情况不使用 inclu
2014-11-21 16:27:38 624
转载 boost高并发网络框架+线程池
boost的官方例子,有单线程的网络框架,httpserver2是线程池的。下面参照网上某人的代码修改了一点(忘了哪位大仙的代码了)测试工具,适用stressmark,测试效果非常好, 9000个/s#include #include "AuthenHandle.h"#include "configure.h"#ifdef WIN32 //for windows
2014-11-21 10:39:10 537
转载 Lua的类实现继承、多态以及setmetatable方法
1,Lua类实现从网上搜了几个类实现,自己照猫画老虎的弄个如下:[cpp] view plaincopyClassYM = {x=0,y=0} --这句是重定义元表的索引,必须要有, ClassYM.__index = ClassYM --模拟构造体,一般名称为new() function Class
2014-11-14 20:52:50 835
转载 MMORPG服务器架构
一.摘要1.网络游戏MMORPG整体服务器框架,包括早期,中期,当前的一些主流架构2.网络游戏网络层,包括网络协议,IO模型,网络框架,消息编码等。3.网络游戏的场景管理,AI,脚本的应用等。4.开源的网络服务器引擎5.参考书籍,博客二.关键词网络协议 网络IO 消息 广播 同步 CS TCP/UDP IP 集群 负载均衡 分布式 网关服务器
2014-11-13 18:51:09 649
转载 Lua function
第五章 Lua学习笔记之函数 函数有两个用途1. 完成指定功能,函数作为调用语句使用2. 计算并返回值,函数作为赋值语句的表达式使用function unpack(t,i) i = i or 1 if t[i] then return t[i],unpack(t,i +
2014-11-05 20:19:40 601
转载 BOOST库的thread
一、创建一个线程创建线程 boost::thread myThread(threadFun); 需要注意的是:参数可以是函数对象或者函数指针。并且这个函数无参数,并返回void类型。 当一个thread执行完成时,这个子线程就会消失。注意这个线程对象不会消失,它仍然是一个还处在它的生存期的C++对象。同理,当对一个堆上的线程对象的指针调用delet
2014-10-30 16:43:14 675
转载 module
2008年12月9日今天下午调试程序的时候,遇到了一件非常奇怪的事。弄清楚了之后,才发现原来是Lua中Module中自有环境的问题。大体情况是这样的,我在主程序中设定的全局变量,在模块文件中可以访问到,并修改了这个全局变量的值,但是在模块调用返回后,再次使用这个全局变量的值,发现它没有被赋值,没有被改变。究其原因,发现是因为Lua的模块里面,采用了自己的全局环境(这个全局环境会将主
2014-10-29 10:36:13 559
原创 Lua优先级
Lua脚本管理器详解是本文要介绍的内容,这不是一个文本编辑器或者ide之类的东东,实际上它只是一个dll,lua是胶水语言,这个管理器的目的是为了让C/C++更好的支持lua。通常项目里管理脚本的方法都是分开文件存放,lua里没有工程的概念,所以文件是最小单位,这样一来脚本文件数量的增长会带来一个问题,名字污染。lua里定义的变量默认是全局的,只有使用了local定义的才是本地的,这样一来
2014-10-17 17:43:46 1050
原创 autoptr
#ifndef AUTO_PTR_H#define AUTO_PTR_Htemplateclass auto_ptr{ public : //使用explicit关键字避免隐式转换 explicit auto_ptr(T* p=0); ~auto_ptr(); //使用另一个类
2014-10-10 14:44:27 606
转载 window编程-作业
概念介绍:作业类似于沙箱,限制进程的操作.(典型的例子是chrome,Google的浏览器,个人感觉chrome的沙箱和这个作业差不多,让木马在一个进程里面运行,不影响其他进程,提高安全性) 这章后面看不大明白HANDLE CreateJobObject(PSECURITY_ATTRIBUTES psa,PCTSTR pszName);第一个参数是安全性,最后一个参
2014-06-27 14:04:34 486
Unreal Engine 4.2 正式版源码
2015-10-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人