首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis如何表示2D世界(MMO?)

Redis如何表示2D世界(MMO?)
EN

Stack Overflow用户
提问于 2012-01-15 22:56:26
回答 2查看 1.7K关注 0票数 1

我正在制作一个MMO,它将有一个2d的世界。(这是一个学习项目,所以不要试图说服我放弃它:)我想为它尝试一个新的数据存储,并且我读过关于redis的一些好东西。我已经看过这些教程了,我想我已经开始了解redis的力量了,但是我不清楚我如何去模拟这样一个世界。

以下是一些设计要求

  1. 我需要能够发送当前元素在世界上的位置。可接受将这些房间划分为地理“房间”,以供使用。
  2. 我需要能够在这个世界上“移动”一个物体,改变它的位置
  3. 我需要得到关于一个物体的信息:它的名称、类型、属性等等。
  4. 我需要能够计算基本碰撞(obj a想要移动,那里有岩石吗?)

你会怎么用redis来模拟这个?红色是个不合适的选择吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-15 23:10:18

假设2D世界被分割成已知坐标的正方形,您可能会在redis中最好地根据返回对象ID集合(或出口/路径或地形等)生成键。

一个非常简单的例子

代码语言:javascript
复制
obj:1:name = Rock
obj:1:passable = false
obj:2:name = Skeleton
obj:2:passable = true
loc:0:0:objs = {1,2} // loc:0:0 contains obj:1 and obj:2
loc:0:0:paths = {0:1, 1:0, 1:1} // three legal paths, to loc:0:1, loc:1:0, loc:1:1

我还不够专业,不知道这个领域会不会给你带来问题,所以请接受我的建议。

票数 2
EN

Stack Overflow用户

发布于 2012-01-15 23:24:42

Redis是一个键值存储,很可能不太适合这个任务,但如果我要尝试一下,我可能会阅读R-树(或另一个面向空间的数据结构),然后将这样的数据结构映射到键值存储模式上。例如,您可以在Redis中将MMO世界设置为R-树,方法是使树中的每个节点对应于Redis中的一个特定键,然后该键将包含边框(和/或其他叶数据)和指向每个子节点的键列表。

这至少允许您限制您的值大小(一个不一定由平面统一网格表示共享的属性),并按照log(n)的顺序保持任何给定操作所需的Redis查找次数。

玩得开心!听起来是个有趣的学习方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8874090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档