当前课程知识点:游戏程序设计 >  第十七章 《游戏逻辑服务器和反外挂》 >  17.1 游戏逻辑服务器(下) >  17.1 游戏逻辑服务器(下)

返回《游戏程序设计》慕课在线视频课程列表

17.1 游戏逻辑服务器(下)在线视频

下一节:17.2 外挂与反外挂(上)

返回《游戏程序设计》慕课在线视频列表

17.1 游戏逻辑服务器(下)课程教案、知识点、字幕

然后第二个问题我要讲一下

就是地图的一个描述

其实在游戏里面

我们在客户端里面看到了一个地图

那可能有不同不同的建筑物

不同的颜色

不同的纹理之类的

但是其实在服务器端

这些东西都是不需要的

在服务器端

我们用地图的一个重要的信息就是

这个地方到底能不能走最关键的一点

如果我们就是用来判断它到底能不能走

所以我们一般的一个做法

是这样我们把一个地图

按照一米乘一米的间隔

一米乘以一米间隔

把一个地图分割成很多的小格

一米乘一米的间隔

然后把这个间隔把每个格上的

那个高度存下来

我们只要求它那个高度那么

我们可以这样认为吗

其实我们就存了一个地表的高度

或者如果有建筑有个城墙

我们存了这个那这高度就城墙的高度

那么其实我们就可以判断的了

走到这里

这高度太高

我们就我们就上不去了是吧

这个这里就不能走了

骑行或者飞行

我飞到这里就撞到墙了

是吧这个

其实我们用到这个信息就可以了

但是其实在对于地面行走来说

每一期都要判断一下

这个和这个高度差

其实是很浪费时间

很浪费CPU的

所以我们一般会提前预处理好

就是看看哪些能走了

我们就提前把地图预处理好那些能走了

就打上1

哪些不能走了就打上0

这样我们就直接保存

这个01的一个数组就可以了

其实在计算机的里面

我们可以把01录入

0用黑色表示1用白色表示

那么这个地图

这个地图其实就是

就是变成

就会变成这样

他就会变成这样

你可以认为计算机只知道这个

只知道这个就够了

白色就能走

黑色就是不能走

我知道这个就可以了

就这么一个

然后

我再说一下

这个地图上玩家的一个管理

刚才上节课

朱老师有说到九宫格

其实这个就是为九宫格而做准备了

就是一般的

不会把一个地图例如一个地图

因为我们在一个地图里面

我们关注的都是我周围的

周围区域的NPC

或者我周围区域的的玩家

太远的区域我不会关注的

所以就会用把地图分块

进行分块管理的方式

来提高一下游戏的一些运行效率

是我们一般做法是这样

以32米乘以32米的方式

把地图划成一个个的小格子

然后一个一个的小格子

然后每个

每个块就维护在它上面的所有的

player就是英雄或者NPC的一个链表

在mmo里面

为什么需要视野管理呢

主要是因为一现在的mmo

很多都是无阻挡的

比如说一块小区域

它可以聚集很多很多的人

可能上千个人

但是我们平时你在mmo大世界里面

你换个衣服

换把武器或者走路

你都要需要广播告诉给其他人

每个人都做个操作都需要广播出去

那么它这个广播量

或是N乘N的就是N的平方的一个数量级

所以随着这个N的变大

这个最后广播的一个量

其实就会导致一个服务器的流量

和CPU就会吃不消

会把流量下行流量给撑爆

CPU也受不住

而且最关键是你客户端

你客户端我现在我拿手机

你给我渲染几十个人还可以

但是你如果不做视野管理

你上几百个人全都统计下来

我客户端全都渲染几百个人

我客户端只能说崩了

或者要卡死了什么都做不了

所以我们只能说我们要进行视野管理

另外就是因为我们在游戏中

其实我们只是关注以附近的某些区域

而且如果附近很多人的话

我几关

一般我只关注和自己有社交关系的其他玩家

其他玩家例如我的好友

我的家族在里面其他成员之类的话

和我有敌对关系的人之类的

所以而其他和我

没太多社交关系的人

它存不存在

我其实并不在意

所以这一点也是为视野管理

提供了一个可能性

视野管理

我想现在说一下一般是怎么做的

首先第一步视野管理刚才我说到N

那你视野管理

你要确定这个N是多大

大家一般N是多大了

这个N其实真不确定

你肯定我们肯定觉得你人越多

我肯定越热闹

这个游戏看起来越热闹

但是你人越多

不知道你客户端顶不住

你服务器也顶不住是吧

但是N太小了

我就觉得这个找人打都找不到那么这个N

所以这个N的确定就是一个

就是挺困难的一个

但大家依然觉得这个N

应该应该怎样确定呢

这个N因为你大了

你服务器和客户端都都承受不住

小了这个游戏就不好玩了

只看到那么两三个人

或者四五个人找个人打他们都找不到

所以

越多越好

所以我们一般都是这样的

这个N

我们去把你看行业了

行业的别的竞品

你别的某个游戏能从类型游戏能做到五十

我们只能做三十

那么这游戏肯定要你要

肯定要改良嘛

肯定要优化了

你肯定你不能超过它能力

起码要和他一样

第一要看行业

第二我们一般的一个做法就是用机器人

就是压一堆机器人上去就是在上面跑

看看测客户端性测服务器性能

看看我们最大能承受到多大

其实一般一般都是这样

起码你要出一款产品

你不能比同类产品要差

首先这点是一个前提

第二的一个做法就是九宫格

就是以我为圆心

以九宫格为范围

去搜索上面那些NPC

或者搜索英雄

让它进入到我的视野里面去

首先

我们一般会这样收的

首先收社会关系

这是我的好友啊

我的队友

我的帮会成员

先把这些人加到我的队伍里面去

然后再根据亲密度仇恨度

我在旁边再收一圈

把这些人再放到里面去

然后再根据距离

再根据距离可能

我近一点的例如离我零到三十米了

我要随机的要几个三十到五十米

直接要要几个这个距离在放点进去

还有就是还要考虑一个行走方向就是例如

我朝这个方向走

可能我重点就是往这个方向去多挑点人

我后面啦

我这边啦

这些方向不太留意可能就少挑

可能就一般会基于这个考虑来收

来收视野

夹到这个我们视野列表里面去

然后注意关键

最关键的一点就是视野对称性

就是我能看到你 你就要能看到我

否则大家就会PK的时候就会不公平

我再给大家看看效果图

这个就是我当我们游戏里面的一个

我们用的是25宫格

150人

150人其实看的

基本上你基本上打架

你也感觉足够了

在打架足够了密密麻麻的一堆人了

这个这是一张我们的做出来的

一个优化的一个效果

但是底下是做了挺久的

再说一下移动

移动分两种

就是第一就是飞行飞身在空中飞行

第二就是在地图行走这个例如打开这个地图

这个小小地图客户端

点从这里说点

这里那个客户端会先寻路

那客户端寻路

要先从这里走到这里

这这种寻路呢

客户端寻路一般的我们现有的库

但是一般用的算法都是A*

A*算法就是由这个到这里这样

但是客户端上报给我服务器

说我有这里要走到这里

它并不是说这个点都给上报上来

其实客户端只需要把它的原点

当前点和这个转折点转折点和这个目标点

这几个转折点三个点上报上来就可以了

那么我们服务器就可以开始这样了

(最底下这一行)是表示玩家本人,(中间这行)是服务器,(最顶上那行)是其他玩家

那首先客户端上报上来

只会A到B

B到C

C到D 这些都是我刚才说的(路径的)转折点

A到B

B到C这样转折点

然后到服务器中

服务器校验

校验一下这个A点

和我的A点就是当前点吧

和我的这个点和我当前位置一点

是不是一致或者有一点点误差也没关系

如果不一致

那就不要走了

再看A到B

A到B这条直线能不能走的过去

B到CC到D

因为能不能走的过就这样了

就像这个A到B

A到B

B到C

C到D

是吧

我刚才说地图描述的地方的时候

不是已经说的了

服务器这边是记录了

有一张黑白图

可以认为服务器是有张黑白图了

它就已经知道了哪个点

哪些地方可走哪些地方不可走了

然后

如果它校验是通过的话

就是这下整个路径通过的话

他就会通知两边通知客户端

以及周围视野的人

客户端就是这个玩家视野的人说它走了

那么你们就可以看他表现了

自己走以及周围的人

看到他可正常开始走了

然后每个时间隔

大家还还记得吗

我刚才说到那个服务器的工作模式里面

有个时间驱动吗

每一百毫秒驱动一次

每天一百毫秒驱动一次

每100毫秒服务器这边呢

它去就是这样每一百毫秒

他就根据这个速度和移动方向

它会更新更新它自己的一个位置

然后每个转折点或者每过一段时间

客户端也会上报一下

这个客户端也会上报一下我这几个

我说我刚想走到哪里啊

这是为了一个修正一个错误的

客户端说我来到A点

我来到B点了

快点我来到C点了

客户端会上报上来

由服务器看一看

如果因为一般来说我们网络都会有些波动

延迟之类的肯定会有一点的误差了

如果那个误差不会太大

服务器就容忍它了

如果误差太大的话

服务器就会通知客户端拉扯回来(服务器的位置)

拉扯回来就担心它是有外挂

走的快了

或者如果有时候误差不是很大

服务器发现自己快了

那就服务器就会计算自己

就会通知客户端让你

那我现在快了一点

你比后面的要快一点

快点跟上我的速度吧

这样就两边协调一下大家的

就让大家的是位置尽量达成一致

然后它(服务器)就会通知到(玩家的)客户端

玩家本人和视野周围的人

现在你的客户端(的移动)是快了还是慢了

那你就走快一点或走慢一点

这样就进行运动补偿一下

然后再是另外一种情况

就是如果它走着走着

他(玩家)在原路径上走着

它还没走到B

它突然就转方向了

因为它突然转到这边去了

转到E点去了

那么它其实就来到这里就B1点

它突然那么它突然改变方向

那么如果这时候

客户端会把重新上报一个新的点

那么其实也是一样

那么就是

那么就是在这时候服务器看看

我的现在走到这个位置

这个位置和你B1点误差大不大

如果不大

我就认为它就OK了

然后我就开始修正一下

以后就开始路径校验

然后就重复刚才的事情就开始往前走了

然后就通知行走

这就是就是这样

就是CS之间行走就是怎样同步

就是这样同步起来的了

玩家之间的相互攻击

相互攻击就是首先这个攻击者

就是攻击者的客户端

它会对B

对B要做技能的话

它会把B的一个目标ID

这是B的ID一个这个技能

我要用A技能把技能ID发给服务器

然后它一般来说的是客户端先预表现

想做动作先想做动作预表现

然后服务器收到收到它的请求之后

首先定义会判断一下这个技能

有没有学习 是不是已经学习过了

要学过的技能才能用

然后看他的技能点

因为可能做这个技能

要扣多少技能点

看技能点够不够扣

以及看一下你打那个目标B

是不是在我的视野内

双方互在对方视野内

不要说你看不到它

但是你用外挂发个包上来把他打了

这样视野是不是在视野内

是不是有敌对关系

这种关系距离

两个距离是不是在这技能一个允许范围内

可能距离配的可能施法技能可能是五米

但是你和他是十米

你打不了他了

如果OK的话

全都检查通过的话就会计算伤害

把这个伤害这些伤害然后就

(计算伤害的结果)发给这个攻击者的客户端,说施法成功

让玩家客户端表现扣多少血

然后双方客户端表现冒血效果

然后通知玩家周围视野里的人

把攻击者ID

目标ID和技能ID和伤害值通知下去

那么其他人就可以看到他(被攻击的玩家)开始冒血。

当然这个是最简陋的一个做技能的流程

但是一般现在的做技能都不会说

是这么简单的技能都是分段技能

怎么说呢

就是首先有个预备预警

首先有个预警阶段 我起手有个什么效果表现

你还可以躲

然后预警了之后

然后再挑再挑目标

再挑了目标之后再发给服务器

服务器再校验

然后再开始抓技能的伤害

然后再开启广播

其实一般这些都会分成多段了

但是我今天就讲课

就拿一个最简单的一个例子来讲讲

这可是最简单的一个技能的一个流程

最后就讲一下

就是这个物品的掉落和拾取

首先

这个刚才是刚才看到A把B打死的时候

B就会随机掉点东西出来让别人捡

人家就是如果玩家死亡的时候

他就会在玩家的一个背包里面

这个背包里面

根据条件和概率随机挑选一下

背包里面有什么东西

挑选出要掉落了一个物品

然后首先我要把这批物品从玩家的身上

删除掉先删除掉

然后我刚才说过了吗

有个Box

就是用来专门是用来做掉落用的

就是会创建Box的一个对象

然后把一些物品放进去

并且把备选记录可吸取的玩家的一个ID

然后就视野广播广播给可吸取的玩家

大家就视野广播下去

大家就可以看到这个东西掉下来了

我可以捡了

我就跑过去捡

然后玩家在附近看到掉落的箱子之后

首先就点开请求

就看到有物品啦

请求捡里面的物品啦

然后把包发给服务器

服务器会检查这个box的归属就是这里

设置了一个ID

可吸取的玩家ID捡了个归属物品ID等

看看请求正不正确

如果正确的话

又看看这个玩家的包裹里面

是不是有这足够的位置可以放这个

可吸取的这个东西

如果足够的位置OK

那就从这个Box里面

这个box的面把这个物品删掉

然后把它夹到玩家的背包里面

这样就完成了整个吸取的一个流程了

游戏程序设计课程列表:

第一章 《游戏开发导论》

-1. 1什么是游戏(上)

--1.1 什么是游戏(上)

--选择题

-1.2 什么是游戏(下)

--1.2 什么是游戏(下)

--选择题

-1.3 游戏是如何开发出来的

--1.3 游戏是如何开发出来的

-1.4 游戏引擎(上)

--1.4 游戏引擎(上)

-1.5 游戏引擎(下)

--1.5 游戏引擎(下)

--单选题

-1.6 如何成为一个游戏开发者

--1.6 如何成为一个游戏开发者

--多选题

第二章 《游戏服务器概述 》

-2.1 什么是游戏服务器

--2.1 什么是游戏服务器

--单选题

-2.2 游戏服务器的和分类发展

--2.2 游戏服务器的和分类发展

--单选题

-2.3 核心技术和实现难点

--2.3 核心技术和实现难点

--单选题

-2.4 设计原理与方法论

--2.4 设计原理与方法论

--单选题

第三章 《《三维几何学基础》 》

-3.1 三维坐标系统

--3.1 三维坐标系统

--多选题

-3.2 向量与运算

--3.2 向量与运算

--单选题

-3.3 矩阵与线性变换

--3.3 矩阵与线性变换

--双选题

-3.4 四元数

--3.4 四元数

--多选题

第四章 《游戏循环及实时模拟》

-4.1 游戏循环概述(上)

--4.1 游戏循环概述(上)

--多选题

-4.2 游戏循环概述(下)

--4.2 游戏循环概述(下)

--单选题

-4.3 《无尽之路》的实现

--4.3 《无尽之路》的实现

--单选题

-4.4 支撑游戏的功能

--4.4 支撑游戏的功能

--选择题

-4.5 支撑游戏的机制与系统

--4.5 支撑游戏的机制与系统

--多选题

第五章 《随机数在游戏中的应用》

-5.1 基本介绍

--5.1 基本介绍

--单选题

-5.2 随机数生成器

--5.2 随机数生成器

--单选题

-5.3 随机数分布与应用

--5.3 随机数分布与应用

--单选题

第六章 《游戏性系统》

-6.1 什么是游戏玩法开发

--6.1 什么是游戏玩法开发

--单选题

-6.2 建立愿景 Vision

--6.2 建立愿景 Vision

--单选题

-6.3 划定边界 Scope

--6.3 划定边界 Scope

-6.4 迭代 Iteration

--6.4 迭代 Iteration

--单选题

-6.5 迭代 Iteration+抛光Polish

--6.5 迭代 Iteration+抛光Polish

--单选题

第七章 《实时图形渲染管道》

-7.1实时图形渲染管道 宏观渲染系统

--7.1实时图形渲染管道 宏观渲染系统

--单选题

-7.2实时图形渲染管道 应用阶段

--7.2实时图形渲染管道 应用阶段

--单选题

-7.3实时图形渲染管道 几何阶段

--7.3实时图形渲染管道 几何阶段

--单选题

-7.4实时图形渲染管道 光栅化阶段

--7.4实时图形渲染管道 光栅化阶段

--单选题

-7.5实时图形渲染管道 总结 参考

--7.5实时图形渲染管道 总结 参考

第八章 《材质着色与光照》

-8.1 物理回顾1

--8.1 物理回顾1

--单选题

-8.2 物理回顾2

--8.2 物理回顾2

--单选题

-8.3 材质 1

--8.3 材质 1

-8.4 材质 2

--8.4 材质 2

-8.5 材质3

--8.5 材质3

-8.6局部光照

--8.6局部光照

--单选题

-8.7 全局光照

--8.7 全局光照

--单选题

第九章 《游戏动画》

-9.1 动画介绍

--9.1 动画介绍

--多选题

-9.2 游戏动画介绍

--9.2 游戏动画介绍

-9.3 动画技术类型

--9.3 动画技术类型

--多选题

-9.4 骨骼蒙皮动画

--9.4 骨骼蒙皮动画

--多选题

-9.5 动画流水线

--9.5 动画流水线

--多选题

-9.6 动画前沿趋势

--9.6 动画前沿趋势

--多选题

第十章 《网络同步技术》

-10.1 .基本概念

--10.1 .基本概念

--多选题

-10.2 设计目标

--10.2 设计目标

--多选题

-10.3 传输数据分析

--10.3 传输数据分析

--多选题

-10.4 常用同步方案 1

--10.4 常用同步方案 1

-10.4 常用同步方案 2

--10.4 常用同步方案 2

-10.4 常用同步方案 3

--10.4 常用同步方案 3

-10.4 常用同步方案 4

--10.4 常用同步方案 4

--多选题

-10.5 方案对比

--10.5 方案对比

--多选题

第十一章 《游戏常用几何学》

-11.1 基本图元

--11.1 基本图元

--单选题

-11.2 图元距离(上)

--11.2 图元距离(上)

--单选题

-11.2 图元距离(下)

--11.2 图元距离(下)

--单选题

-11.3 图元相交测试+ 其他几何方法

--11.3 图元相交测试+ 其他几何方法

--单选题

第十二章 《游戏物理模拟》

-12.1 著名物理引擎介绍

--12.1 著名物理引擎介绍

--单选题

-12.2 物理引擎原理(上)

--12.2 物理引擎原理(上)

--单选题

-12.3 物理引擎原理(下)

--12.3 物理引擎原理(下)

--单选题

-12.4 游戏中的物理体

--12.4 游戏中的物理体

--单选题

-12.5 物理引擎使用入门

--12.5 物理引擎使用入门

--单选题

第十三章 《开发工具 》

-13.1开发语言

--13.1开发语言

--单选题

-13.2 开发环境

--13.2 开发环境

--单选题

-13.3 腾讯开发组件介绍

--13.3 腾讯开发组件介绍

--单选题

-13.4 网络通信+业务框架介绍

--13.4 网络通信+业务框架介绍

--多选题

第十四章 《分布式系统设计 》

-14.1 进程间通信(上)

--14.1 进程间通信(上)

-14.2 进程间通信(下)

--14.2 进程间通信(下)

-14.3 通信格式

--14.3 通信格式

-14.4 并发模型

--14.4 并发模型

-14.5 超时处理

--14.5 超时处理

-14.6 大系统小做(上)

--14.6 大系统小做(上)

--多选题

-14.7 大系统小做(下)

--14.7 大系统小做(下)

-14.8 架构层面的技术支持(上)

--14.8 架构层面的技术支持(上)

--单选题

-14.9 架构层面的技术支持(下)

--14.9 架构层面的技术支持(下)

-14.10 分布系统的关键能力

--14.10 分布系统的关键能力

--多选题

第十五章 《游戏人工智能》

-15.1 游戏人工智能综述

--15.1 游戏人工智能综述

-15.2 人工智能在游戏中主要方法 上

--15.2 人工智能在游戏中主要方法 上

--多选题

-15.3人工智能在游戏中主要方法 (下)

--15.3人工智能在游戏中主要方法 (下)

-15.4 人工智能在游戏制作中的应用领域1

--15.4 人工智能在游戏制作中的应用领域1

--多选题

-15.5 人工智能在游戏制作中的应用领域2

--15.5 人工智能在游戏制作中的应用领域2

-15.6 人工智能在游戏制作中的应用领域3

--15.6 人工智能在游戏制作中的应用领域3

--多选题

-15.7 人工智能在游戏运营中的应用实践(上)

--15.7 人工智能在游戏运营中的应用实践(上)

-15.8 人工智能在游戏运营中的应用实践(下)

--15.8 人工智能在游戏运营中的应用实践(下)

--多选题

第十六章 《游戏支撑系统 》

-16.1 游戏支撑系统(1)

--16.1 游戏支撑系统(1)

--单选题

-16.2 游戏支撑系统(2)

--16.2 游戏支撑系统(2)

--单选题

-16.3 游戏支撑系统(3)

--16.3 游戏支撑系统(3)

--单选题

-16.4 游戏支撑系统(4)

--16.4 游戏支撑系统(4)

--单选题

-16.5 游戏支撑系统(5)

--16.5 游戏支撑系统(5)

第十七章 《游戏逻辑服务器和反外挂》

-17.1 游戏逻辑服务器(上)

--17.1 游戏逻辑服务器(上)

--单选题

-17.1 游戏逻辑服务器(下)

--17.1 游戏逻辑服务器(下)

-17.2 外挂与反外挂(上)

--17.2 外挂与反外挂(上)

-17.2 外挂与反外挂(下)

--17.2 外挂与反外挂(下)

--多选题

第十八章 《运行环境和运维 》

-18.1运行环境

--18.1运行环境

--多选题

-18.2物理部署

--18.2物理部署

--多选题

-18.3系统的可运维性

--18.3系统的可运维性

--多选题

-18.4运维案列分析

--18.4运维案列分析

--多选题

17.1 游戏逻辑服务器(下)笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。