游戏碰撞场景(一) CoWorld构建过程
脑图
继续阅读 »
首先, 单个socket是面向玩家的, 以此展开的会有,这个玩家,也就是说这个socket,会拥有一个gameWorld, 以及在玩家login之前, 所有玩家都面向的gameHolder, Holer处理登陆, 已登陆玩家数据网络层将推送给Player类处理。
transfer和gameHoler, gameWorld, Player之间,各使用3个线程安全的数据队列m_DataQueue.
m_DataQueue的类型是 FastQueue m_DataQueue; 它的原型是:
{}
template
class FastQueue
{
struct node
{
T element;
继续阅读 »
事件调度器模块
记录下我们游戏里事件调度器模块, 用处, 代码结构。
我们用来注册一些事件到调度器, 调度器在做update的时候, 会检查容器内的事件, 事件的封装, 包含senderObj, receiveObj, id, delayFrameCount等等。 如果当前帧已经符合delayFrameCount的要求了, 就执行receiveObj.RecieveEvent()方法,将senderObj注册事件时的参数等, 带入RecieveEvent方法执行。
继续阅读 »
游戏的场景服务和数据服务整合
一直以来都觉的现在运行的游戏后台服务, 实在太多了。
1,数据服务和场景服务之间的通信, 用的是消息队列zeroMQ来做的, 无形就多了一个消息队列服务, 然后还有一个处理队列任务的mq_worker, 然后数据服务到场景服务的通信.
2, 需要在每次需要的时候都建立一次本地的socket,就2个服务之间,产生了多余的好多事情。
继续阅读 »
网络层
一个思维导图
基本模块有:
SocketBase 抽象基类, 定义所有会共性的方法, 基本都是Epoll在回调,比如OnRead, OnWrite分别处理epoll的读写事件, ListenSocket也是继承这个基类.
m_fd 保存socket的fd属性
m_readBuffer 和 m_writeBuffer 分别是一个读写的buffer, 类型就是Buffer类
继续阅读 »
游戏服务端碰撞检测
最近看了一些游戏碰撞检测相关的一些内容,然后开始读了一些我们游戏里关于碰撞检测的代码,我们游戏里现在的碰撞检测按我暂时阅读完的代码, 应该分为2块,相对来说我们基本的碰撞检测算法是比较简单的, 后面也记录一下网上看到的关于分离轴多边形的碰撞检测。
继续阅读 »
游戏里有很多事件, 可能会随玩家, 或场景内某个物品或某个生物体的状态, 来触发这些事件。比如那种跟随主人走动的宠物,可以认为随主人的状态变更为STATE_MOVE来触发宠物的某个事件, 比如跟随主人,宠物类和宠物的AI类, 以及人物类, 均是独立的, 我们需要一个观察器来连接他们之间的关联:
继续阅读 »
这里记录的是现在所在游戏的cpp代码里的, 关于事件调度和触发的源码分析.
EventDispatcher 是一个事件调度者
Event 事件基类
EventReceiver 所有需要接收世界的对象的基类, 它们都对EventReceiver做继承. 并重写RecieveEvent方法.
继续阅读 »
分析:如果n<10,则Stan一步即可轻松获胜;当n>=10时,假设Stan能获胜,那么Ollie的最后一次乘积必须在[ceil(n/9), n)之间。设:
lower = ceil(n/9), upper = n
又设在此之前Stan的乘积是p,则Stan必须保证:
继续阅读 »
游戏的cpp coding中面向对象的部分, 可能最基础的要算是状态机了, 对于一个游戏世界几乎所有物品都能看做是一个对象的实例.生物或玩家都的动作会改变自身的某些状态属性, 同时有些动作又需要玩家处于某个状态下才能进行。有限状态机是一个最基本的实现,玩家或生物等其他需求具有状态的物体都应该拥有一个自己的状态机实例。
状态机里的状态, 应该是可以互相转换的, 或者说整个状态系统, 是一个闭环。
继续阅读 »