以在背包、仓库中操作物品为例
维护到一份代码看到如下的流程:
假设现在我在背包中把物品从A格子移动到B鸽子
已经有的关键字:
物品类型:普通,特殊,消耗。。。等等
放入函数:使用物品类型掩码判断
(1,2表示步骤)
C1:从落点范围判断是否合法(比如背包格子是1-20,仓库是40-60)。如果满足,发送要移动的包给服务器。这时候UI不做更新,即不执行实际的更新函数
S1:收到包进行校验,比如是否能存放,如果是装备则如何如何(放入函数)。同步计算完后,发送确认包给C
C2:收到后执行实际的更换操作,更新(放入函数)
维护的需求如下,任务物品不能放入仓库,并且给玩家提示。两套方案
1:维持旧的结构,放的时候发一个包,靠服务器返回的一个包来说明是否可以放入。后来发现交换协议包中没有这个成功的字段
2:不发包。服务器的校验直接返回,客户端做本地判断,条件不符合就不发包。比较别扭的地方来。如果不发包,那么服务器就不会发确认包,没法执行客户端的实际"放入函数"。所以只好在C1的坐标中判断这个物品来自哪里,然后直接操作。
另人感到很不快的是,为什么要通过落点判断呢?物品本身不是有物品类型的设置吗?只要在容器和物品间设置好掩码不就行了?现在就好比有两套的资源结构,又可以落点判断,又可以物品实际属性判断。
想起以前工作中碰到的物品操作流程:
C1:本地做一份操作(实际操作),成功后发给服务器一份通知信息,鼠标锁定
S1:收到后做一份同样操作,发一个解锁命令
C2:解锁
这两套方案中,我本来还比较排斥第二种,现在反而喜欢了。操作物品的时候最本质的需求是两边要同步,
从代码维护上来说:
一号方案是让服务器先做,然后自己再做。如果是这样那中间就无所谓在判断是否合法了。但是一些基本的判断你又不得不做。
二号方案中是直接做,也不要预判断什么。因为一件物品是否能放入,怎么放入,这两个逻辑应该是内聚在一起的。比如通过掩码的方式。然后通过一个解锁命令来同步。如果再通过一些额外的点范围判断,实在是费解
很多人会说锁会不会影响了操作?其实一样的,一号方案也要在等待服务包的更新通知。(不知道大家有没在游戏中拿起一件物品放一个位置,卡住的时候老放不下。)重要的本质是什么,是同步。即使你这个时候让玩家继续操作(影响到他刚才移物品的),也是无效的。而在实际的表现过程中,网络顺畅时(60-120MS响应),0.15-0.2秒很快就解掉锁了。
写到这,想起其实可以对一号方案进行改进,C1中直接进行一个放入的步骤预判断,如果成功发消息请求。服务器成功后发送确认,C1再执行最终的放入。还是一分为二的做法。这样的代码你敢重用吗?
分享到:
相关推荐
在"冒险岛079同步124物品发型XML"中,"同步"意味着这些XML文件可能是游戏服务器和客户端之间的数据同步工具,确保玩家的物品和发型信息在游戏世界中保持一致。"124物品发型"可能指的是游戏内的124种不同发型,每种...
CryEngine引擎社交游戏开发:虚拟物品与交易系统_(10).交易系统的用户界面设计.docx CryEngine引擎社交游戏开发:虚拟物品与交易系统_(11).交易系统的网络同步与优化.docx CryEngine引擎社交游戏开发:虚拟物品...
游戏中的对象可以包括角色、物品、环境元素等,它们的状态变化必须及时、准确地反映到所有参与者,以保证游戏的公平性和沉浸感。本资料主要探讨了用于实现这一目标的方法和系统。 首先,我们要理解游戏对象状态同步...
如果数据不同步,可能会导致玩家看到的游戏状态与实际状态不符,例如物品丢失、角色位置错乱等,严重影响游戏体验。因此,高效且准确的数据同步方法是网络游戏设计的核心部分。 三、数据同步方法 1. 准确同步:所有...
"物品ID查询器"是一款专为游戏爱好者设计的实用工具,主要用于查找和识别游戏中各种物品的唯一标识符,即ID。在许多游戏中,物品ID是玩家进行数据挖掘、修改或编程交互的重要参考依据。这款软件可以帮助用户快速定位...
Unity帧同步Demo是一个用于实现多人在线游戏中的实时交互技术的示例项目,特别针对ARPG(动作角色扮演游戏)类型的游戏。帧同步是网络游戏中一种重要的数据同步策略,它确保所有玩家在同一帧内看到相同的游戏状态,...
网络游戏中的网络同步是确保玩家在同一虚拟环境中获得一致游戏体验的关键技术。它涉及到多个玩家通过互联网进行实时交互,如角色移动、攻击、道具交换等,所有这些动作必须在所有参与者之间同步,以创建一个无缝的...
基于JavaFX和MyBatis的游戏物品管理系统 内容概要 本项目是一个基于JavaFX和MyBatis的游戏物品管理系统,主要功能包括物品的存储、出售、使用、移除和购买操作。系统还引入了玩家的生命值、法力值、金币和攻击力等...
Godot引擎社交游戏开发:虚拟物品与交易系统_(10).性能优化与测试.docx Godot引擎社交游戏开发:虚拟物品与交易系统_(11).案例分析与实践项目.docx Godot引擎社交游戏开发:虚拟物品与交易系统_(1).Godot引擎...
6. **XML数据存储**:游戏物品信息可能以XML格式存储,利用Flex的XML类进行读取和解析,便于数据管理。 7. **用户交互设计**:良好的用户体验是游戏成功的关键。Flex提供丰富的样式表和皮肤定制,以创建吸引人的...
这种技术主要利用现代无线通信技术,如Wi-Fi、蓝牙或移动网络,实现在游戏世界中的物品交换和共享,使得游戏内的资源分布更加动态和多元化。 在基于无线网络的物品共享方法中,首先需要理解的是无线通信的基本原理...
3. **交易和事件同步**:物品交易、角色状态的改变以及游戏事件的发生都需要精确的时间戳,以防止作弊和不公正的情况。 4. **多人合作**:团队协作游戏需要精确的时间同步,以便玩家可以协调行动,如开启宝箱、启动...
3. **网络同步**:多人在线游戏的关键在于网络同步,uMOBA的源码中应包含网络通信协议和状态同步机制。 4. **用户界面(UI)**:包括英雄选择界面、游戏计分板、聊天系统等,都需要用Unity的UI系统来实现。 5. **...
Godot引擎开发:物品与装备系统_(15).Godot引擎网络同步在物品与装备系统中的应用.docx Godot引擎开发:物品与装备系统_(1).Godot引擎基础与环境搭建.docx Godot引擎开发:物品与装备系统_(2).物品系统的概念...
通过研究这个项目源码,你可以学习到如何在Unity中构建RPG游戏的各个方面,包括角色创建、地图导航、战斗系统、物品管理、角色升级、对话系统等。此外,它还能帮助你了解如何组织和结构化大型项目,以及如何优化性能...
多人游戏网络同步.docx Unity引擎开发:生存游戏角色控制器开发_(15).声音与特效设计.docx Unity引擎开发:生存游戏角色控制器开发_(16).优化与性能提升.docx Unity引擎开发:生存游戏角色控制器开发_(17)....
多人游戏中的UI与网络同步.docx Godot引擎开发:生存游戏UI和用户交互_(14).适配不同设备与屏幕分辨率的UI设计.docx Godot引擎开发:生存游戏UI和用户交互_(15).Godot引擎中的本地化与国际化支持.docx Godot引擎...
11. **网络同步与状态同步**:在网络游戏中,玩家动作的同步是核心问题。开发者可能使用各种同步策略,如锁定步(Lockstep)、增量同步、状态同步等,以减少延迟并保证游戏体验的一致性。 以上就是基于Unity3D引擎...
专为 Unity 开发的网络同步解决方案,能够与 Opsive Character Controllers 和 Photon PUN 2 协同工作,实现角色和物品在网络游戏中的同步。 该插件的主要特点包括: 能够同步角色和物品的状态,确保所有玩家都能...
Cocos Creator引擎开发:物品与装备系统_(10).物品与装备的数据配置.docx ...游戏开发中的物品系统设计.docx Cocos Creator引擎开发:物品与装备系统_(2).游戏开发工具与环境搭建.docx Cocos Creator