请选择 进入手机版 | 继续访问电脑版

NoahFrame

 找回密码
 Register Now
搜索
热搜: redis mysql tutorial
查看: 1362|回复: 6

关于服务端计算战斗和寻路

[复制链接]

4

主题

9

帖子

70

积分

Registered member

Rank: 2

积分
70
发表于 2017-4-18 19:13:56 | 显示全部楼层 |阅读模式
本帖最后由 愉快 于 2017-4-19 09:39 编辑

已经把navigation整合进了NF,现在有个疑惑,在服务端进行大量战斗计算和寻路(服务端行走和搜索攻击目标)的时候如果用NF的帧循环会不会导致计算量大卡帧影响到NF帧循环,我计算了下在GameServer里debug模式(没有业务逻辑)只有980-1000帧貌似不高
在NF里应该怎么做比较合理?求解惑..或者可以用Actor来处理这种需求吗?
回复

使用道具 举报

3

主题

4

帖子

31

积分

Newbie

Rank: 1

积分
31
QQ
发表于 2017-4-19 11:25:43 | 显示全部楼层
std::this_thread::sleep_for(std::chrono::milliseconds(1));  默认设置的是 1ms
回复 支持 反对

使用道具 举报

30

主题

111

帖子

652

积分

Administrator

Rank: 9Rank: 9Rank: 9

积分
652
发表于 2017-4-19 16:19:05 | 显示全部楼层

while(1)主循环中, std::this_thread::sleep_for(std::chrono::milliseconds(1));  默认设置的是 1ms,因此980-1000帧空跑是正常的;
AI和寻路,如果是在主循环中可能会严重影响速度,其实可以单独放到actor中去计算,因为如果你带了这些功能,肯定占用不少;
战斗放主循环倒无所谓,这个我实际测过,占用不了多少,当然具体和你的战斗复杂度有关系(大部分实际是代码写复杂了,与放哪没关系)。
回复 支持 反对

使用道具 举报

4

主题

9

帖子

70

积分

Registered member

Rank: 2

积分
70
 楼主| 发表于 2017-4-20 09:46:25 | 显示全部楼层
Ketoo 发表于 2017-4-19 16:19
while(1)主循环中, std::this_thread::sleep_for(std::chrono::milliseconds(1));  默认设置的是 1ms,因 ...

所有继承NFIModule(NFCKernelModule,NFCSceneAOIModule,NFCNetModule....)的模块是否线程安全,毕竟在actor存在多线程的问题,我想在actor中单独开个帧循环处理,一个房间一个actor,轻竞技游戏
回复 支持 反对

使用道具 举报

4

主题

9

帖子

70

积分

Registered member

Rank: 2

积分
70
 楼主| 发表于 2017-4-20 10:00:14 | 显示全部楼层
themoder 发表于 2017-4-19 11:25
std::this_thread::sleep_for(std::chrono::milliseconds(1));  默认设置的是 1ms

有空帮看下,下面回复的问题
回复 支持 反对

使用道具 举报

30

主题

111

帖子

652

积分

Administrator

Rank: 9Rank: 9Rank: 9

积分
652
发表于 2017-4-20 18:57:33 | 显示全部楼层
愉快 发表于 2017-4-20 09:46
所有继承NFIModule(NFCKernelModule,NFCSceneAOIModule,NFCNetModule....)的模块是否线程安全,毕竟在act ...

NF的主循环是单线程的,目前来说所有继承NFIModule的module都是运行在同一个线程;
但是actor那边有部分多线程处理的机制,平常使用不会收到影响。

Actor内部不能直接使用module,否则会有线程安全问题。
轻竞技游戏,其实直接所有的内容走主循环就好了,如果压力扛不住,可以多开gameserver来解决,开房间类的游戏,NF支持完美水平扩展容量。
回复 支持 反对

使用道具 举报

4

主题

9

帖子

70

积分

Registered member

Rank: 2

积分
70
 楼主| 发表于 2017-4-21 09:59:30 | 显示全部楼层
Ketoo 发表于 2017-4-20 18:57
NF的主循环是单线程的,目前来说所有继承NFIModule的module都是运行在同一个线程;
但是actor那边有部分多 ...

好的,谢谢回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | Register Now

本版积分规则

 

GMT+8, 2018-10-21 08:18 , Processed in 0.076714 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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