KBEngine官方论坛

 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 配置 开服
楼主: FirstOne

对warring示例中 U3d技术探讨汇总

[复制链接]

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2015-5-21 13:02:04 | 显示全部楼层
FirstOne 发表于 2015-5-20 19:27
Space只是个逻辑概念,在KBE底层是没有space概念的吧, 创建space的cell使用createInNewSpace  创建其他c ...

你可以这么理解。
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-5-25 20:32:42 | 显示全部楼层
warring 中 同步动作(站立还是走动)是根据position和destposition的距离来判断的
我想改为通过state来判断动作的播放,即服务端FSM进入什么状态后同步到客户端,然后执行相应的动作,不知这样是否合理,一般的MMO又是怎么做的呢?
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2015-5-25 21:14:44 | 显示全部楼层
客户端强制与服务端同步所有状态来表现,如果网络不好表现将不尽人意,一些网络延迟也会导致一些问题。
一般结合起来做会比较好, 移动根据速度来判断是走还是跑,遇到坡采用统一的处理,这样表现最同步。 但是战斗姿态、死亡、默认状态还是需要根据服务端同步来做。
特效等也是根据客户端自己来表现的。

你可以分分类,规划一下
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-5-28 10:19:27 | 显示全部楼层
服务端中要判断一个实体坐标是否在另外一个实体坐标 前方10米30弧度范围内, 该怎么判断呢。
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2015-5-28 19:51:40 | 显示全部楼层
FirstOne 发表于 2015-5-28 10:19
服务端中要判断一个实体坐标是否在另外一个实体坐标 前方10米30弧度范围内, 该怎么判断呢。 ...

服务端没有现成的算法, 有段算法你可以参考一下
  1.         def inSector( self, caster, entity, transmitDir ):

  2.                 srcPos = Math.Vector3( caster.position )
  3.                 srcPos.y = 0

  4.                 desPos = Math.Vector3( entity.position )
  5.                 desPos.y = 0

  6.                 desDir = desPos - srcPos
  7.                 desDir.y = 0
  8.                 desDir.normalise()

  9.                 an = transmitDir.dot( desDir )

  10.                 if an < -1:
  11.                         an = -1

  12.                 if an == 0:       
  13.                         an = 1

  14.                 if an > 1:
  15.                         an = 1

  16.                 angle = int( math.acos( an ) / math.pi * 180 )
  17.                 if angle <= self.angle:        # 小于或等于夹角
  18.                         return True
  19.                        
  20.                 return False
复制代码
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-5-28 23:17:18 | 显示全部楼层
kbe 发表于 2015-5-28 19:51
服务端没有现成的算法, 有段算法你可以参考一下

谢谢kbe提供的代码, 现在还遇到一个问题, 当角色进入到某个SPACE时,会立马创建avator对应的cell部分实体, 这样导致实体在服务端已经创建了, 但是客户端还在加载地图...(这是玩家是不能控制的) ,那么玩家就会被怪物攻击而不能反击。  
服务端有没有办法是先创建客户端,客户端一切OK后 在创建cell上的实体呢?
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2015-5-29 09:06:57 | 显示全部楼层
这主要是由游戏业务引起的问题

你可以从逻辑层解决
1: 跳转地图前给玩家加一个buff(隐身、禁止移动、禁止被攻击...),然后通知客户端预先加载地图, 等地图加载完毕通知服务端正式跳转到新地图然后取消buff。
2:跳转地图前给玩家加一个buff(隐身、禁止移动、禁止被攻击、禁止攻击...),服务端跳转到新地图后因为玩家受到保护而不会有任何影响,等客户端加载完地图告诉服务端取消该buff

一般用第二种,第一种在地图跳转失败时会有弊端。
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-6-1 00:51:16 | 显示全部楼层
在设计服务端逻辑时,我主要分为了AI 、Skill、MotionFSM 几个模块,我想利用MVC Event机制来解除这几个模块间复杂的耦合关联, 用Python脚本来实现 会不会有性能方面的影响呢。
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2015-6-1 14:18:38 | 显示全部楼层
很难说,看你自己取舍。
服务端往往性能耗在几个计算量大的地方,如果你的框架非高计算量的是可以使用的。
单实体高频率事件通讯、大量消息等也不推荐在脚本中做。

不过这一切都需要你根据你的游戏衡量好测试,会造成多大消耗,单机负载降低多少等等。
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|KBEngine Forum

GMT+8, 2018-12-19 14:10 , Processed in 0.030122 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表