Giter VIP home page Giter VIP logo

variableview's Introduction

VariableView

本代码的功能是演示一种视野处理方式,可以满足的需求有:

  1. 每个地图可以单独设置不同的格子大小,格子大小影响视野精度,也会对内存和计算量产生影响。
  2. 每个实体的单位都是游戏内的真实单位而不是格子数。
  3. 可以实现动态的更改实体的可视距离以便满足获得千里眼道具后可以看的更远等类似需求。
  4. 可以动态修改实体体积以实现变身等功能。

实现原理

  • 将地图划分成等大的格子,每个格子内存储位于当前格子内的实体对象链表和正在关注当前格子的实体链表。
  • 实体对象存储它正在关注的所有格子以及它所占据的格子,如果是非质点实体那么它将同时存在于多个格子上。
  • 格子内的实体数量发生改变时向关注此格子的所有关注者广播事件。
  • 实体移动时更改自己所在的格子,触发旧格子内的实体离开事件和新格子的实体进入事件,实体移动后更新自己的关注列表,找出不再关注的格子,把自己从对应格子反注册,找出新关注的格子,将自己注册进去(此处用了一个快速求两个集合的交集和差集的算法,见 Utils.cs)
  • 实体更改自己的视野时向变更的相关格子关注者列表注册或反注册自己。
  • 实体更改自己的体积时同时修改发生变更的占据格子和关注格子(比较耗资源)。

运行效果图

image

image

存在问题及解决方案

  • 对于大型实体,可能会出现实体的一部分进入观测者视野,而另外一部分离开观察者视野的情况,出现通知也有可能会发送多次,解决方案如下:
    • 出现协议: 服务端发送多次,客户端根据需求忽略。
    • 移动及攻击判定: 对于有离开也有出现的服务端可以根据需求直接拦截掉不处理或者酌情处理(大型实体需要确定被攻击的部位的情况)。
  • 格子数太多: 可以把正方形格子修改为六边形格子以减少格子数。

variableview's People

Contributors

misaka-mikoto-tech avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.