ARPG游戏中,技能施放有两种处理方式:1、客户端直接施放,检测碰撞,将碰撞地点通知服务端进行校验。2、服务端判断是否可以施放,然后通知客户端。不知道技能检测是在客户端处理,还是在服务端处理的?另外,计算伤害,肯定是碰撞后才能算伤害,那么类似角色的攻击动作,共有10帧,但是只有中间的第5帧才算真实碰撞,这时候如何计算伤害呢?

2010-11-11 13:32:46

1 Answers

第一条我觉得客户端释放前,服务端判断目标是否可以受击比较好吧,因为技能一般都会有距离,也就是延迟受击,当A客户端看到正常的距离时候并释放,当技能到达触发时,可能B客户端目标已经位置已经超出了,这样A客户端目标应该看到受击还是不受击呢...
第二条我觉得可以接受,就算目标移出了攻击范围,但是因为目标已经被服务器锁定,不管前端显示跑多远,目标都会受到后端已经算好的伤害或buffer效果

计算伤害的话,可以在每种角色的攻击帧上加个事件,比如攻击帧第五针是受击事件,然后在事件中添加受击后的伤害


我看有些游戏会有加载条,比如说魔兽世界里的火球术,动画的延迟做成了进度条,我觉得就仿佛是后端的“关键帧”:计算发动此类技能需要消耗的时间,如果期间没有被打断,时间到了后端会通知客户端命中信息,火球术追踪目标,必中,瞬发技能可能不用进度条,因为延迟基本可以接受,也必中,但是在击中以后,后端会判断最终目标受击的概率,算出伤害,没看过具体代码...凭直觉

数据处理是一部分,与服务器通信是一部分,动画又是另一部分。所有的都以服务器数据为准。那一部分执行的最小条件满足了就执行。执行计算的条件达成时就算,动画根据画面要求播放。比如,玩家按键后,如果不考虑子弹速度,已经满足计算碰撞、伤害等条件了,则计算,同时通知各玩家,动画还没播放时,子弹还没真正命中时,所有的数据已经到齐了。这样就算有延迟,也可大致保持同步,最次数据上不会出差错。

如果是考虑比较多的,比如子弹有速度,技能可能会被打断,同样维持这个原则,计算的最小条件达成后就算,动画是另一回事。

还有Miss不一定非得是对攻击进行判定后做出反应的,如果是网络丢包等问题,也可以不厚道地给出个Miss。

还有,游戏上有个很重要的预测算法,就是客户端会预测每个角色的下一个动作,网络不好时,中间丢掉的动作会被客户端自动补上。网络延迟大,预测错误就会发生瞬移效果了,

2010-11-11 15:49:47
您不能回答该问题或者回答已经关闭!

相关文章推荐

  • C#中using指令的几种用法

    using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到

  • C#实例解析适配器设计模式

    将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作

  • C#开发高性能Log Help类设计开发

    项目中要在操作数据库的异常处理中加入写Log日志,对于商业上有要求,写log时对其它操作尽可能影响小,不能因为加入log导致耗时太多

  • 使用托管C++粘合C#和C++代码(二)

    本文实现一下C++代码调用C#代码的过程。我构造一个简单并且直观的例子:通过C++ UI 触发C# UI.

  • Async和Await使异步编程更简单

    C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作

  • C#开发中的反射机制

    反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等

  • C#运行时相互关系

    C#运行时相互关系,包括运行时类型、对象、线程栈和托管堆之间的相互关系,静态方法、实例方法和虚方法的区别等等

  • C#协变和逆变

    “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型,“逆变”则是指能够使用派生程度更小的类型

  • C#基础概念之延迟加载

    延迟加载(lazy load)是Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作

  • C#中的索引器的简单理解和用法

    C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作

  • 使用托管C++粘合C#和C++代码(一)

    C#在xml读写,数据库操纵,界面构造等很多方面性能卓越;C++的效率高,是底层开发的必备武器

  • 深入C# 序列化(Serialize)、反序列化(Deserialize)

    C#中的序列化和反序列化,序列化是.NET运行时环境用来支持用户定义类型的流化的机制