战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  250 随笔 :: 0 文章 :: 508 评论 :: 0 Trackbacks

相位技术

相位技术大规模出现在魔兽世界WLK版本, 现在应用已经广泛应用在各种MMORPG游戏中. 下面对相位技术的做法进行简单归纳汇总

表现分类

副本相位

早期副本的出现, 避免抢怪问题. 所以, 副本其实本身就是一种相位技术. 只不过实现时, 我们一般会将小队和怪物直接预分配在独立的一个副本实例中(所以副本原文也是实例的意思)

分线相位

相位技术还没有正式命名时, 同一个场景, 玩家进到不同的分线看到的玩家不一样, 也是属于相位的一种. 当然, 如果是组队玩家, 服务器默认会分配所有队伍玩家在同一个线(位面)

真相位

副本相位和分线相位其实都是静态相位, 一旦进入, 中途不会有切换或者混合查看的过程. 真相位可以在一个场景中,动态切换相位, 相位内和相位外所以不同

我们常见的真相位表现为: 相位中的角色+玩家+队伍成员

在护送任务时, 还会在上面所见角色中叠加世界中的所有角色, 也就是说, 你和队伍成员可以看到的角色, 其他人看不到, 其他人也看不到你和你的队伍成员


为了清晰的简单的描述, 我为相位创建如下概念与名词

相位客体

表现为除玩家外的角色(怪物,交互物体与相位可见场景)

私有客体

这是最常见的一种相位内角色

  • 持有变量

    取PhasingID时,为PhasingTargetID

  • 生成规则

    当玩家开启相位后, 在玩家相位内生成的角色为私有客体.

    此时, 将 PhasingTargetID设置为相位生成者的实例ID

  • 删除规则

    如果玩家退出相位, 私有客体会存在一段时间或按照需求删除

公共客体

一般指提前放置在场景中, 世界内不可见, 但是能被同相位玩家可见,且同相位玩家都可以互相可见 比如: 只要接了同一个任务的玩家, 都可以看到的NPC

  • 持有变量

    取PhasingID时,为PublicPhasingID

  • 生成规则

    通过场景编辑器, 放置角色时, 设置其可被观察到的任务ID

    角色被加载后, 将任务ID设置到StaticPhasingID

  • 删除规则

    场景删除, 角色删除

相位主体

包含玩家与同队伍玩家

  • 开启相位后, 可见私有客体+公有客体

  • 队长视为相位主体, 单人时, 自己为队长

  • 队伍其他成员共享队长的私有相位客体

  • 队伍其他成员根据自己的PublicPhasingID匹配目标对象的PublicPhasingID时可互相可见

  • 持有变量

相位开启时, 取PhasingID时, 为角色实例ID

相位关闭时, 取PhasingID时, 为0

PublicPhasingID

可见规则

当两个角色的PhasingID相等时, 主体与私有客体互相可见

当两个角色的PublicPhasingID相等时, 主体与公有客体互相可见

可以通过开关设置, 是否在可见的相位客体基础上, 叠加世界角色(护送任务)

约束

  • 玩家同时只能看见1个相位
posted on 2017-04-08 14:41 战魂小筑 阅读(1047) 评论(0)  编辑 收藏 引用 所属分类: 游戏开发技术网络 服务器技术

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理