视野列表的更新方法及装置与流程

文档序号:11286485阅读:238来源:国知局
视野列表的更新方法及装置与流程
本公开涉及计算机应用
技术领域
,尤其涉及一种视野列表的更新方法及装置。
背景技术
:对于地图类应用程序,服务器通常会为每一个用户维护对应的视野列表,以通过视野列表指示每一个用户在地图中可见的对象。该对象可以是用户,还可以是物品。以对象为用户为例,对于用户a而言,用户a的视野列表中包含了其他10个用户,则表示地图中该其他10个用户是用户a可见的。应当理解,用户在地图中的位置经常发生变化,相应地,用户可见的对象也将随之变化。例如,某一时刻用户b被用户a可见,而下一时刻用户b离开,而导致用户a看不见用户b,由此,用户的视野列表将需要频繁地更新。目前,无论是采用双向链表方法对视野列表进行的更新,还是采用平衡二叉树方法对视野列表进行的更新,视野列表更新的时间复杂度均为o(logn),即更新的时间复杂度将随着用户可见的对象数量的增长而增长,这必将导致服务器的压力远远超过其所能承受的范围。技术实现要素:基于此,为了解决上述技术问题,本公开的一个目的在于提供一种视野列表的更新方法及装置。其中,本公开所采用的技术方案为:一种视野列表的更新方法,包括:当用户的视野列表需要更新时,通过地图中进行的视野搜索获取待更新对象的对象信息;获取预先存储的索引信息,所述索引信息用于表示所述视野列表中位置的索引;在所述视野列表中根据获取到的索引信息查找对应的位置;通过分配或者回收查找得到的位置,对所述待更新对象的对象信息进行相应的更新处理。一种视野列表的更新装置,包括:对象信息获取模块,用于当用户的视野列表需要更新时,通过地图中进行的视野搜索获取待更新对象的对象信息;索引信息获取模块,用于获取预先存储的索引信息,所述索引信息用于表示所述视野列表中位置的索引;位置查找模块,用于在所述视野列表中根据获取到的索引信息查找对应的位置;更新处理模块,用于通过分配或者回收查找得到的位置,对所述待更新对象的对象信息进行相应的更新处理。与现有技术相比,本公开具有以下有益效果:在用户的视野列表需要更新时,利用预先存储的索引信息,能够快速地查找到视野列表中的对应位置,进而通过对该位置进行分配或者回收实现视野列表的更新,大大加快了视野列表的更新速度,并使得视野列表更新的时间复杂度降低至o(1),即无论对象数量是否增长均为一常数,从而有效地减轻了服务器的压力。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。附图说明此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并于说明书一起用于解释本公开的原理。图1是根据本公开所涉及的实施环境的示意图;图2是根据一示例性实施例示出的一种服务器的硬件结构框图;图3是根据一示例性实施例示出的一种视野列表的更新方法的流程图;图4是图3对应实施例所涉及的九宫格的示意图;图5是根据一示例性实施例示出的另一种视野列表的更新方法的流程图;图6是根据一示例性实施例示出的另一种视野列表的更新方法的流程图;图7是图3对应实施例中步骤370在一个实施例的流程图;图8是图3对应实施例中步骤370在另一个实施例的流程图;图9是图8对应实施例中步骤370在另一个实施例的流程图;图10是一应用场景中一种视野列表的更新方法的具体实现示意图;图11是根据一示例性实施例示出的一种视野列表的更新装置的框图;图12是根据一示例性实施例示出的另一种视野列表的更新装置的框图;图13是根据一示例性实施例示出的一种视野列表的更新装置的框图;图14是图11对应实施例中更新处理模块770在一个实施例的框图;图15是图11对应实施例中更新处理模块770在另一个实施例的框图;图16是图15对应实施例中更新处理模块770在另一个实施例的框图。通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述,这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。具体实施方式这里将详细地对示例性实施例执行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。请参阅图1,图1为一种视野列表的更新方法所涉及的实施环境的示意图。该实施环境包括终端100和服务器200。其中,终端100可以是智能手机、平板电脑、掌上电脑、笔记本电脑、计算机或者其它可供地图类应用程序运行的电子设备,在此并未加以限定。对于终端100而言,实时上报用户在地图中的位置,以供服务器200中生成用户的视野列表以及判断用户的视野列表是否需要更新。对于服务器200而言,在用户的视野列表需要更新时,通过地图中进行的视野搜索获取待更新对象的对象信息,并在视野列表中根据预先存储的索引信息进行对应位置的查找,通过分配或者回收查找得到的位置对待更新对象的对象信息进行相应的更新处理,以此完成视野列表的更新。由于索引信息用于表示视野列表中位置的索引,使得视野列表中的位置能够被快速地查找到,无论视野列表中对象数量是否增长,视野列表更新的时间复杂度均为o(1),即一常数,以此大大降低了服务器的压力。请参阅图2,图2是根据一示例性实施例示出的一种服务器200的硬件结构框图。该硬件结构只是一个适用于本公开的示例,不能认为是提供了对本公开的使用范围的任何限制,也不能解释为本公开需要依赖于或者必须具有图2中示出的示例性的服务器200中的一个或者多个部件。该服务器200可因配置或者性能的不同而产生较大的差异,如图2所示,服务器200包括:电源210、接口230、至少一存储介质250、以及至少一中央处理器(cpu,centralprocessingunits)270。可以理解,图2所示的结构仅为示意,服务器200还可以包括比图2中所示更多或着更少的部件,或者具有与图2所示不同的部件。其中,电源210用于为服务器200上的各硬件设备提供工作电压。接口230包括至少一有线或无线网络接口231、至少一串并转换接口233、至少一输入输出接口235以及至少一usb接口237等,用于与外部设备通信。存储介质250作为资源存储的载体,可以是随机存储介质、磁盘或者光盘等,其上所存储的资源包括操作系统251、应用程序253及数据255等,存储方式可以是短暂存储或者永久存储。其中,操作系统251用于管理与控制服务器200上的各硬件设备以及应用程序253,以实现中央处理器270对海量数据255的计算与处理,其可以是windowsservertm、macosxtm、unixtm、linuxtm、freebsdtm等。应用程序253是基于操作系统251之上完成至少一项特定工作的计算机程序,其可以包括至少一模块(图示未示出),每个模块都可以分别包含有对服务器200的一系列操作指令。数据255可以是存储于磁盘中的照片、图片等等。中央处理器270可以包括一个或多个以上的处理器,并设置为通过总线与存储介质250通信,用于运算与处理存储介质250中的海量数据255。如上面所详细描述的,适用本公开的服务器200将对用户的视野列表进行更新,即通过中央处理器270读取存储介质250中存储的一系列操作指令的形式来根据预先存储的索引信息,分配或者回收视野列表中该索引信息对应的位置,对待更新对象的对象信息进行相应的更新处理,以此更新用户的视野列表。此外,通过硬件电路或者硬件电路结合软件指令也能同样实现本公开,因此,实现本公开并不限于任何特定硬件电路、软件以及两者的组合。请参阅图3,在一示例性实施例中,一种视野列表的更新方法适用于图1所示实施环境的服务器200,该种视野列表的更新方法可以由服务器200执行,可以包括以下步骤:步骤310,当用户的视野列表需要更新时,通过地图中进行的视野搜索获取待更新对象的对象信息。地图类应用程序是指基于地图来为用户提供相关服务的应用程序,例如,相关服务包括浏览地图、搜索地图中的位置、查看地图中用户周边信息等等。当地图类应用程序运行于用户所在终端,用户可以通过账户注册的形式获取地图类应用程序所提供的各种服务。为了便于注册用户之间能够相互联系,服务器通常会为每一个用户存储对应的用户列表,该用户列表中包含了可供注册用户联系的用户。可以理解,访问地图类应用程序的用户不止一个,而是海量的,因此,为了减轻服务器的存储压力,同时也是为了提高用户的访问体验,用户列表中将仅包含地图中用户的视野范围内可见的用户,即用户的视野列表。随着用户需求的多元化,根据不同的应用场景,用户的视野列表中包含的不仅仅局限于用户,还可以是物品,或者其他地图中显示的对象。例如,在虚拟交互场景中,视野列表中既可以包含游戏玩家,还可以包含掉落的玩家装备等等,又或者,在地图导航场景中,视野列表中还可以包含车辆、车主携带的通信设备等等。基于运行在用户所在终端的地图类应用程序,用户的视野范围是指终端中所能显示的地图中的场景范围,例如,终端配置的显示屏的分辨率为1024*768,则终端中所能显示的地图不超过1024*768像素,相应地,用户的视野范围不超过1024*768像素。以对象为用户为例,对于用户a而言,用户a的视野列表中包含了其他10个用户,则表示该其他10个用户是在用户a的视野范围内可见的。对于终端而言,则是将该其他10个用户显示在终端中所能显示的地图中。进一步地,每一个对象在地图中的显示均是通过该每一个对象的对象信息进行标识的。例如,对象信息可以是用户的注册信息,例如用户名,或者,对象信息还可以是设备识别码等等。相应地,地图中将通过显示用户名或者设备识别码来唯一地标识对象。更进一步地,用户的视野列表用于存储地图中用户的视野范围内可见对象的对象信息。其中,视野列表中对象信息的存储方式可以是数组的形式,也可以是存储器的形式,在此并未加以限定。当用户的视野列表需要更新,即表示用户的视野范围内可见的对象发生了变化,要么是有新进入用户视野范围内的新增对象,要么是有离开用户视野范围内的离开对象。基于此,为了对用户的视野列表进行更新,需要获取待更新对象的对象信息。其中,待更新对象包括新增对象和离开对象。本实施例中,待更新对象的对象信息是通过地图中进行的视野搜索实现的。如图4所示,以用户的视野范围为九宫格为例,对地图中进行的视野搜索过程加以描述。地图中,当用户从位置a移动至位置b,用户的视野范围也随之发生了变化,即最右边的三个小格(如图中虚线所示)将取代最左边的三个小格,重新构成九宫格。此时,通过地图中进行的视野搜索,判定位于最左边的三个小格中的对象离开了用户的视野范围,则该些对象的对象信息为离开对象的对象信息,相对的,判定位于最右边的三个小格中的对象新进入用户的视野范围,则该些对象的对象信息为新增对象的对象信息。在获取到待更新对象的对象信息之后,后续便可对待更新对象的对象信息进行相应的更新处理。即,将新增对象的对象信息存储至视野列表中某一位置,将离开对象的对象信息由视野列表中某一位置删除。值得一提的是,视野具有对称性,例如,服务器更新用户a的视野列表时,将用户b新增或者删除,同时,也对用户b的视野列表进行更新,将用户a新增或者删除。又例如,在虚拟交互场景中,服务器更新游戏玩家c的视野列表时,将游戏玩家c拾起的玩家装备e新增至视野列表中,则对于其他游戏玩家而言,该玩家装备e已不属于掉落的玩家装备,将相应地从其他游戏玩家的视野列表中删除。由此,本实施例中,在进行视野搜索的时候,并未考虑中间六个小格内对象的变化,避免视野列表的重复更新,以此减轻服务器的压力。步骤330,获取预先存储的索引信息。如上所述,对待更新对象的对象信息进行相应的更新处理即为:将新增对象的对象信息存储至视野列表中某一位置中,将离开对象的对象信息由视野列表中某一位置删除。换而言之,欲对待更新对象的对象信息进行相应的更新处理,服务器需要获知用户的视野列表中哪个位置可以用于存储新增对象的对象信息,以及哪个位置中存储了离开对象的对象信息。本实施例中,视野列表中位置的索引将通过预先存储形成索引信息。即,索引信息用于表示视野列表中位置的索引。例如,视野列表中所有位置的索引都可以存储至存储器,即存储器中存储的数据便是索引信息。又或者,若视野列表中的位置被分配给某个用户,则该视野列表中的该位置的索引还可以存储至该某个用户的用户信息中,以此形成的索引信息即表示该某个用户的用户信息存储在视野列表中位置的索引。相应地,由预先存储的索引信息中便可获取到索引信息,以使服务器获知与更新相关的视野列表中的位置,进而对该位置进行分配或者回收。步骤350,在视野列表中根据获取到的索引信息查找对应的位置。由于索引信息用于表示视野列表中位置的索引,为此,在得到索引信息之后,便可按照该索引信息所表示的视野列表中位置的索引,查找得到视野列表中的位置,进而使得服务器获知与更新相关的该位置,即该位置可以被用于存储新增对象的对象信息,或者,该位置中存储了离开对象的对象信息。步骤370,通过分配或者回收查找得到的位置,对待更新对象的对象信息进行相应的更新处理。在查找得到位置之后,服务器便可对该位置进行分配或者回收,即分配该位置给新增对象,以将新增对象的对象信息存储至该位置,或者,将该位置回收,以删除该位置中存储的离开对象的对象信息,以此完成对待更新对象的对象信息进行的相应更新处理。通过如上所述的过程,实现了根据预先存储的索引信息快速查找视野列表中的位置,大大加快了视野列表的更新速度,并使得视野列表更新的时间复杂度降低至o(1),显著减轻了服务器的压力。请参阅图5,在一示例性实施例中,步骤310之前,如上所述的方法还可以包括以下步骤:步骤410,获取用户对应的位置消息。如前所述,用户的视野列表需要频繁地更新,是由于用户在地图中的位置会经常地发生变化,即用户移动了其在地图中的位置,使得用户可见的对象也将随之变化,例如,某一时刻用户b对用户a可见,而下一时刻用户a又看不见用户b了。由此,为了后续对用户的视野列表进行更新,需要得到用户在地图中的位置。本实施例中,用户在地图中的位置是通过位置消息由用户所在的终端上报至服务器中的。即,位置消息包含地图中用户的位置。相对于服务器而言,在接收到用户所在终端上报的位置消息之后,即可获知地图中用户的位置,进而根据该用户的位置是否发生了变化进行是否更新用户视野列表的判断。步骤430,根据地图中的预设区域判断用户的位置是否离开了预设区域。可以理解,如果是只要用户移动了其在地图中的位置就更新用户的视野列表,则视野列表的更新频率势必过于频繁,而不利于减轻服务器的压力。为此,本实施例中,预先将地图划分成若干大小相等的预设区域,以根据该预设区域和用户的位置,判断是否更新用户的视野列表。具体而言,当用户的位置离开了当前所在的预设区域,而移动至区别于当前所在的预设区域的其他任何预设区域时,用户可见的对象将发生变化,此时,即判定用户的视野列表需要进行更新。相应地,在用户的视野列表需要进行更新时,服务器将在地图中进行视野搜索,以此获知哪些用户可见的对象发生了变化,进而对用户的视野列表进行更新。进一步地,为了控制视野列表的更新频率,预设区域的划分可以灵活地调整。例如,把1024*1024像素的地图划分成4096个16*16像素的预设区域,只有用户的位置越过了当前所在的16*16像素的预设区域,才进行视野列表的更新。在一示例性实施例中,待更新对象包括新增对象。该新增对象指的是新进入用户视野范围内的对象。相应地,步骤330可以包括以下步骤:通过预先设置的辅助更新数组的头指针访问辅助更新数组中的数组元素,得到头指针指向的数组元素中的索引信息。本实施例中,索引信息作为数组元素被预先存储在辅助更新数组中。同时,为该辅助更新数组设置可供访问的头指针,以通过头指针对辅助更新数组中的索引信息进行访问,即通过头指针访问辅助更新数组中的数组元素,便可得到头指针指向的索引信息。进一步地,头指针所指向的索引信息与位置分配相关,即头指针指向的索引信息用于表示视野列表中待分配给新增对象的位置的索引。通过如此设置,实现了待分配位置的快速查找,即该待分配位置的索引是通过头指针指向的索引信息表示的,从而有利于加快视野列表更新的速度,有利于降低视野列表的更新复杂度,减轻服务器的压力。请参阅图6,在一示例性实施例中,步骤370之前,如上所述的方法还可以包括以下步骤:步骤510,根据访问得到的索引信息由辅助更新数组中获取对应的分配信息。可以理解,在视野列表中根据索引信息查找得到对应的位置之后,该位置可能没有存储任何对象的对象信息,也可能已经存储了某个对象的对象信息。如果将新增对象的对象信息直接存储至该位置,则可能导致之前存储的某个对象的对象信息被覆盖,而造成视野列表错误的更新。为此,在对查找得到的位置进行分配之前,需要获取该查找得到的位置的分配状态。分配状态包括空闲状态和使用状态,若位置的分配状态为空闲状态,则表示该位置中没有存储任何对象的对象信息,即该位置可以被分配给新增对象,相对的,若位置的分配状态为使用状态,则表示该位置中已经存储了对象的对象信息,即该位置不可以进行二次分配。基于上述,本实施例中,分配信息作为数组元素的一部分被预先存储在辅助更新数组中。其中,分配信息用于指示视野列表中位置的分配状态,分配状态包括空闲状态和使用状态。进一步地,分配信息所在的数组位置与索引信息对应。例如,索引信息表示的索引为2,便可在辅助更新数组索引为2的数组位置上获取对应的分配信息。在得到分配信息之后,服务器即获知了查找得到的位置的分配状态,进而能够根据该位置的分配状态对该位置进行分配,即进入步骤530。步骤530,按照分配信息指示的位置的分配状态进行位置的分配。若分配信息指示的位置的分配状态为空闲状态,则分配该位置给新增对象,即进入步骤370。否则,若分配信息指示的位置的分配状态为使用状态,则继续获取索引信息,以根据索引信息在视野列表中进行对应位置的查找,即返回步骤330,直至得到分配状态为空闲状态的位置。通过如上所述的过程,以分配信息对位置的分配状态进行判断,避免了分配状态为使用状态的位置被错误地分配,从而有利于提高视野列表更新的准确率。请参阅图7,在一示例性实施例中,步骤370可以包括以下步骤:步骤371,在分配信息指示位置的分配状态为空闲状态时,将新增对象的对象信息存储至位置。若分配信息指示位置的分配状态为空闲状态,表示该位置中没有存储任何对象的对象信息,则将该位置分配给新增对象,即存储新增对象的对象信息至该位置中。进一步地,当位置被分配给新增对象时,该位置对应的索引即已确定,此时,还可以将该位置对应的索引作为索引信息添加至新增对象的对象信息中,以表示该新增对象的对象信息存储在视野列表中位置的索引,以便于后续查询该新增对象的对象信息在视野列表中的位置。步骤373,更改分配信息,使得分配信息指示的位置的分配状态切换为使用状态。待新增对象的对象信息被存储至该位置之后,该位置即已经存储有新增对象的对象信息,此时,该位置的分配状态将由空闲状态变更为使用状态。由此,分配信息需要更改,即更改后的分配信息指示的位置的分配状态为使用状态。步骤375,沿指定方向移动头指针,使得头指针指向辅助更新数组的下一个数组元素。如前所述,索引信息所对应查找到的位置将被用于分配或者回收,以实现对待更新对象相应的更新处理。应当理解,在新增对象的对象信息已经被存储至该位置中,该位置即已经完成了分配。若还有其他的新增对象,则需要重新获取索引信息,以根据重新获取的索引信息进行对应位置的再一次查找,方可将再一次查找到的位置分配给其他新增对象。由此,在该位置完成分配之后,令头指针沿指定方向移动,将头指针指向辅助更新数组的下一个数组元素,即使得在下一次通过头指针访问辅助更新数组时,将得到下一个数组元素中的索引信息,并通过该索引信息进行后续的位置分配。也就是说,当位置被分配,头指针将沿指定方向移动至下一个数组元素,进而使得服务器获知可供分配的位置有所减少。通过如上所述的过程,实现了空闲状态的位置的动态分配,同时,实现了位置的分配状态的及时更新,避免已分配的位置被错误地分配,进一步有利于提高视野列表更新的准确率。此外,当视野列表中位置全部分配完毕时,头指针将重新指向辅助更新数组的第一个数组元素,通过结合分配信息即可避免已分配的位置被二次分配,进而有效地提高了视野列表更新的准确率。在一示例性实施例中,待更新对象包括离开对象。该离开对象指的是离开用户视野范围内的对象。相应地,步骤330可以包括以下步骤:由离开对象的对象信息中提取得到索引信息。如前所述,新增对象的对象信息在进行位置分配时,可以将分配到的位置对应的索引作为索引信息添加至对象信息中,以供查询该新增对象的对象信息在视野列表中的位置。可以理解,新增对象和离开对象是可以相互转化的,即离开用户视野范围内的新增对象即成为离开对象,而离开对象在进入另一用户视野范围内又转化为新增对象。因此,离开对象的对象信息中将包含有其存储在视野列表中位置的索引,即索引信息。相应地,对离开对象的对象信息进行索引信息的提取,便可得到索引信息。其中,该索引信息用于表示离开对象的对象信息存储在视野列表中位置的索引。请参阅图8,在一示例性实施例中,步骤370可以包括以下步骤:步骤471,删除存储在查找得到的位置中离开对象的对象信息。在视野列表中查找得到离开对象的对象信息所存储的位置之后,便可回收该位置,即由该位置中删除离开对象的对象信息。步骤473,通过预先设置的辅助更新数组的尾指针访问辅助更新数组中的数组元素,得到尾指针指向的数组元素中的索引信息,并将该索引信息更改为提取得到的索引信息。由于此时离开对象的对象信息已经由视野列表中的该位置删除,即该位置中没有存储任何对象的对象信息,由此,在完成索引信息更改之后,尾指针指向的索引信息即用于表示视野列表中可供分配位置的索引。步骤475,沿指定方向移动尾指针,使得尾指针指向辅助更新数组的下一个数组元素。应当理解,若还有其他的离开对象待更新,相应地,将会有其他位置中存储的离开对象的对象信息被删除,此时,需要尾指针指向其他的索引信息来表示视野列表中该些可供分配位置的索引。具体地,令尾指针沿指定方向移动,将尾指针指向辅助更新数组的下一个数组元素,即使得在下一次通过尾指针访问辅助更新数组时,进行索引信息更改的将是下一个数组元素中的索引信息。也就是说,当位置被回收,尾指针指向的索引信息进行更改,且尾指针将沿指定方向移动至下一个数组元素,使得服务器获知视野列表中可供分配的位置有所增加。通过如上所述的过程,实现了位置的动态回收,避免未存储任何对象信息的位置不能及时地被分配,从而有利于提高视野列表更新的及时率。此外,通过辅助更新数组设置的两个数组指针,使得服务器能够快速地获知视野列表中可供分配的位置,即头指针与尾指针之间数组元素中的索引信息对应于视野列表中可供分配的位置,从而有利于加快视野列表更新的速度,有利于降低视野列表的更新复杂度,减轻服务器的压力。请参阅图9,在一示例性实施例中,步骤370还可以包括以下步骤:步骤477,根据提取得到的索引信息由辅助更新数组中获取对应的分配信息。本实施例中,分配信息作为数组元素的一部分被预先存储在辅助更新数组中。其中,分配信息用于指示视野列表中位置的分配状态,分配状态包括空闲状态和使用状态。进一步地,分配信息所在的数组位置与索引信息对应。例如,索引信息表示的索引为2,便可在辅助更新数组的索引为2的数组位置上获取对应的分配信息。在得到分配信息之后,服务器便可对该位置的分配状态进行更改,即进入步骤479。步骤479,更改分配信息,使得分配信息指示的位置的分配状态由使用状态切换为空闲状态。由于离开对象的对象信息已经由该位置删除,即该位置已经未存储任何对象的对象信息,此时,该位置的分配状态将由使用状态变更为空间状态。由此,分配信息需要更改,即更改后的分配信息指示的位置的分配状态为空闲状态。通过如上所述的过程,实现了位置的分配状态的及时更新,避免未分配的位置无法及时地得到分配,进一步有利于提高视野列表更新的及时率。在一示例性实施例中,步骤471之后,如上所述的方法还可以包括以下步骤:当离开对象的对象信息由视野列表中删除,清除离开对象的对象信息中的索引信息。在视野列表中删除离开对象的对象信息,表明该离开对象的对象信息已经不再存储于视野列表中之前的位置,相应地,离开对象的对象信息中也不必再存储索引信息,以使该索引信息不必再用于表示之前位置的索引。为此,将该索引信息由离开对象的对象信息中清除,以便于后续该离开对象被其他用户可见时,再重新进行索引信息的添加,即,该索引信息将表示该离开对象的对象信息存储在其他用户的视野列表中位置的索引。图10是一应用场景中一种视野列表的更新方法的具体实现示意图。如图10所示,游戏服务器中,通过执行步骤501,监听到游戏玩家的视野范围发生了变化,则通过执行步骤502至步骤507,从视野列表中删除离开视野的游戏玩家,通过执行步骤508至512,将新进入视野的游戏玩家存储至视野列表中,以此实现视野列表的更新,有效地减轻服务器的压力。下面以表格的形式对上述视野列表的更新流程进行演示。假设视野列表以a数组的形式进行玩家信息的存储,该a数组的长度为5。辅助更新数组即b数组,该b数组的长度与a数组保持一致,也为5。该b数组的每个数组元素均为二元组,该二元组包括索引信息emptyindex和分配信息state。其中,索引信息emptyindex用于表示a数组中位置的索引。分配信息state用于指示a数组中位置的分配状态。若值为e,表示a数组中位置的分配状态为空闲状态,即可在该位置存储新进入视野范围的游戏玩家。若值为u,表示a数组中位置的分配状态为使用状态,即该位置已经存储了视野范围中的游戏玩家。此外,b数组还设置了可供访问的两个数组指针pointer:头指针head和尾指针tail,该两个数组指针pointer可在b数组上移动,以通过移动指向b数组中的下一个数组元素。下面展示在对a数组进行分配和回收位置时,b数组对应的结果状态。如表1所示,a数组为空时,即视野列表中各位置未存储任何游戏玩家的玩家信息,即视野列表中各位置的分配状态均为空闲状态。相应地,b数组中预先存储的索引信息emptyindex为0、1、2、3、4,表示a数组中位置的索引。b数组中对应索引信息预先存储的分配信息state的值全部为e,用于指示a数组中全部位置(0~4)的分配状态均为空闲状态。需要说明的是,如表1所示,arrayindex表示的是b数组中数组元素位置的索引,只是为了方便于查看分配信息state在b数组中的位置。此时,b数组中的两个数组指针均指向第一个数组元素,该两个数组指针之间数组元素中的索引信息对应于a数组中可供分配的位置为0~4。表1a数组为空时,b数组的结果状态arrayindex01234emptyindex01234stateeeeeepointerhead、tail假设获取到三个新进入视野范围的游戏玩家的玩家信息,即有三个游戏玩家待新增,则需要对a数组中三个分配状态为空闲状态的位置进行分配。相应地,通过头指针head访问b数组中的数组元素,得到头指针head指向的第一个数组元素中的索引信息emptyindex为0,该索引0表示视野列表中待分配给第一个游戏玩家的位置的索引为0,如表1第二列第二行所示,则根据该索引0查找得到a数组的第一个位置。进一步根据索引信息emptyindex表示的索引0(如表1第二列第二行所示),得到存储在该索引0对应位置中的分配信息的值为e,如表1第二列第三行所示。根据分配信息的值为e,表示a数组的第一个位置的分配状态为空闲状态,则将第一个游戏玩家的玩家信息存储至该第一个位置,并更改分配信息的值为u,使得该第一个位置的分配状态切换为使用状态,如表2第二列第三行所示。向右移动头指针head,使其指向第二个数组元素,以此类推,待完成三个游戏玩家的更新处理,头指针将指向第四个数组元素,如表2第五列第四行所示。此时,两个数组指针之间数组元素中的索引信息对应于a数组中可供分配的位置为3~4。表2分配a数组中的三个位置给新进入视野范围的游戏玩家时,b数组的结果状态假设获取到一个离开视野范围的游戏玩家的玩家信息,即有一个游戏玩家待删除,则需要将a数组中存储该游戏玩家的玩家信息的位置回收。相应地,先由该游戏玩家的玩家信息中提取得到索引信息为2,表示该游戏玩家的玩家信息存储在a数组中位置的索引为2,则根据该索引2查找得到a数组的第三个位置,并删除该第三个位置中存储的游戏玩家的玩家信息。通过尾指针tail访问b数组中的数组元素,得到尾指针tail指向的第一个数组元素中的索引信息emptyindex为0,如表2第二列第二行所示,并将该索引信息emptyindex更改为2,即提取得到的索引信息,如表3第二列第二行所示,并将该游戏玩家的玩家信息中的索引信息清除。进一步根据索引信息emptyindex表示的索引2(如表2第四列第二行所示),得到存储在该索引2对应位置中的分配信息的值为u,如表2第四列第三行所示,更改该分配信息的值为e,使得a数组第三个位置的分配状态切换为空闲状态,如表3第四列第三行所示。向右移动尾指针tail,使其指向第二个数组元素,如表3第三列第四行所示。此时,两个数组指针之间数组元素中的索引信息对应于a数组中可供分配的位置为3~4、2。表3回收a数组中的一个位置时,b数组的结果状态arrayindex01234emptyindex21234stateuueeepointertailhead再假设有二个游戏玩家待新增,则将a数组中二个分配状态为空闲状态的位置分配给该二个游戏玩家,具体过程与上述新增三个游戏玩家的过程一致,在此不再赘述。此时,两个数组指针之间数组元素中的索引信息对应于a数组中可供分配的位置仅为2,如表4所示。表4分配a数组中的两个位置给新进入视野范围的游戏玩家时,b数组的结果状态arrayindex01234emptyindex21234stateuueuupointerheadtail最后,假设清空a数组中所有游戏玩家,则将a数组中存储所有游戏玩家的玩家信息的位置回收,具体过程与上述删除一个游戏玩家的过程一致,在此不再赘述。此时,两个数组指针均重新指向第一个数组元素,该两个数组元素之间数组指针中的索引信息对应于a数组中可供分配的位置为0~4,如表5所示。表5回收a数组中的所有位置时,b数组的结果状态arrayindex01234emptyindex20134stateeeeeepointerhead、tail下述为本公开装置实施例,可以用于执行本公开所涉及的视野列表的更新方法。对于本公开装置实施例中未披露的细节,请参照本公开所涉及的视野列表的更新方法实施例。请参阅图11,在一示例性实施例中,一种视野列表的更新装置700包括但不限于:对象信息获取模块710、索引信息获取模块730、位置查找模块750和更新处理模块770。其中,对象信息获取模块710用于当用户的视野列表需要更新时,通过地图中进行的视野搜索获取待更新对象的对象信息。索引信息获取模块730用于获取预先存储的索引信息,索引信息用于表示视野列表中位置的索引。位置查找模块750用于在视野列表中根据获取到的索引信息查找对应的位置。更新处理模块770用于通过分配或者回收查找得到的位置,对待更新对象的对象信息进行相应的更新处理。请参阅图12,在一示例性实施例中,如上所述的装置700还包括但不限于:位置消息获取模块810和更新判断模块830。其中,位置消息获取模块810用于获取用户对应的位置消息,位置消息包含地图中用户的位置。更新判断模块830用于根据地图中的预设区域判断用户的位置是否离开了预设区域。若为是,则判定用户的视野列表需要更新。在一示例性实施例中,待更新对象包括新增对象。相应地,索引信息获取模块730包括但不限于:头指针访问单元。其中,头指针访问单元用于通过预先设置的辅助更新数组的头指针访问辅助更新数组中的数组元素,得到头指针指向的数组元素中的索引信息,该索引信息用于表示视野列表中待分配给新增对象的位置的索引。请参阅图13,在一示例性实施例中,如上所述的装置700还包括但不限于:第一分配信息获取模块910和位置分配模块930。其中,第一分配信息获取模块910用于根据访问得到的索引信息由辅助更新数组中获取对应的分配信息,分配信息用于指示视野列表中位置的分配状态,分配状态包括空闲状态和使用状态。位置分配模块930用于按照分配信息指示的位置的分配状态进行位置的分配。请参阅图14,在一示例性实施例中,更新处理模块770包括但不限于:新增对象存储单元771、第一分配信息更改单元773和头指针移动单元775。其中,新增对象存储单元771用于在分配信息指示位置的分配状态为空闲状态时,将新增对象的对象信息存储至位置。第一分配信息更改单元773用于更改分配信息,使得分配信息指示的位置的分配状态切换为使用状态。头指针移动单元775用于沿指定方向移动头指针,使得头指针指向辅助更新数组的下一个数组元素。在一示例性实施例中,待更新对象包括离开对象。相应地,索引信息获取模块730包括但不限于:索引信息提取单元。其中,索引信息提取单元用于由离开对象的对象信息中提取得到索引信息,该索引信息用于表示离开对象的对象信息存储在视野列表中位置索引。请参阅图15,在一示例性实施例中,更新处理模块770包括但不限于:离开对象删除单元1071、尾指针访问单元1073和尾指针移动单元1075。其中,离开对象删除单元1071用于删除存储在查找得到的位置中离开对象的对象信息。尾指针访问单元1073用于通过预先设置的辅助更新数组的尾指针访问辅助更新数组中的数组元素,得到尾指针指向的数组元素中的索引信息,并将该索引信息更改为提取得到的索引信息。尾指针移动单元1075用于沿指定方向移动尾指针,使得尾指针指向辅助更新数组的下一个数组元素。请参阅图16,在一示例性实施例中,更新处理模块770还包括但不限于:第二分配信息获取模块1077和第二分配信息更改模块1079。其中,第二分配信息获取模块1077用于根据提取得到的索引信息由辅助更新数组中获取对应的分配信息,分配信息用于指示视野列表中位置的分配状态,分配状态包括空闲状态和使用状态。第二分配信息更改模块1079用于更改分配信息,使得分配信息指示的位置的分配状态由使用状态切换为空闲状态。在一示例性实施例中,如上所述的装置还包括但不限于:索引信息清除模块。其中,索引信息清除模块用于当离开对象的对象信息由视野列表中删除,清除离开对象的对象信息中的索引信息。需要说明的是,上述实施例所提供的视野列表的更新装置在进行用户的视野列表更新时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即视野列表的更新装置的内部结构将划分为不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例所提供的视野列表的更新装置与视野列表的更新方法的实施例属于同一构思,其中各个模块执行操作的具体方式已经在方法实施例中进行了详细描述,此处不再赘述。上述内容,仅为本公开的较佳示例性实施例,并非用于限制本公开的实施方案,本领域普通技术人员根据本公开的主要构思和精神,可以十分方便地进行相应的变通或修改,故本公开的保护范围应以权利要求书所要求的保护范围为准。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1