找回密码
 立即注册
虾米引擎源代码Delphi3KM2引擎源码20121218CQFIR飞尔引擎20120918源码文字广告位置4
APPLEM2引擎源代码传奇引擎delphi源代码DELPHI视频教程
GSQL_6.5.2.1源代码Delphi即时通讯Delphi源码文字广告位置11
文字广告位置12
文字广告位置13
文字广告位置14
文字广告位置15
文字广告位置16
UC845刺客引擎飞龙3delphi源码文字广告位置18
文字广告位置19
文字广告位置20
文字广告位置21文字广告位置22
文字广告位置23
文字广告位置24
文字广告位置25
文字广告位置26文字广告位置27文字广告位置28
查看: 739|回复: 0

角色卡与抖动 77M2 飞尔20120918分析

[复制链接]

798

主题

42

回帖

4781

积分

管理员

积分
4781

最佳新人活跃会员热心会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2018-4-23 07:17:21 | 显示全部楼层 |阅读模式
角色卡与抖动
传奇为什么会很卡?掉线时这种效果最明显
  人物起跑“走一动,卡一步”
  那是因为传奇这种网络游戏的客户端和服务端是基于消息通讯的.Grobal2.pas,客户端和服务端通用的文件,定义了一些消息标识,数据结构,消息操作函数,当网卡或掉线时人物起跑,走动都在客户端和服务端存在着基于消息标识的交互客户端不能及时向服务器发送消息或得不到服务器的反馈消息就会卡(服务器当然不会卡)

  传奇服务器不是在线电影服务器,吞吐量不大,但是线程繁多,复杂。线程再传奇内部已经得到一定处理(m2server.exe和rungate之间的数据分析)。但是,一个玩家造成的线程是持续的2条,一条进一条出。
如果一个大型网站可以牺牲相应率来保证质量的话,他可以提高1倍以上的浏览量,但是传奇不行,稍微有差错,就是用户断线,容不得有半点不持续,而且这个持续时间是几个小时甚至10几个小时,而且这条线程是占用独立的跑到的,一旦确认除非客户断线,或者服务器断线,否则是不会撤销的,甚至客户不是安全下线,服务器仍旧会在一段时间里面持续这条线程。
会抖动是因为为了【移动加速】

移动是在PlayScene.run里面 根据上次移动时间来决定角色是不是能执行move,之前不抖动是因为不管其他人的角色速度如何变化

始终是用100毫秒间隔去判断对方是否可以移动(3k是94毫秒) 这种情况下本地玩家和其他玩家的m_shiftX Y m_nRx值是同步更新的。

就不会出现抖动问题。但是有个很大的弊端就是不同步, 如果两个号的移动速度不一样,本地玩家是跑的很快, 但是在其他人的客户端上绘制位置变更时间会被延长,所以就会出现两个号同样机器显示位置慢了很多,像开外挂一样。

而FIR这种使用了个人角色加速, 他的m_shiftX Y m_nRx 不是同步更新的,所以其他玩家的速度位置可以被更快速的绘制出来。

但是也导致了抖动的出现:其他Actor都是参照本地Actor绘制在屏幕上,当其他Actor的位置变了,本地Actor位置没有同步变的话,就会导致抖动。

目前的解决方案 :本地玩家m_nCurraction = 0 加速其他Actor 使用它们的Actor速度去移动。

否则统一同步绘制。

最佳方法 地图移动改为像素帧移动。但是这个非常麻烦。

回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|Delphi源代码

GMT+8, 2025-4-5 01:39 , Processed in 0.123068 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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