游戏算法-AOI十字链表入门简单版python

本文介绍了使用Python实现AOI(AreaofInterest)十字链表的基本原理,通常AOI链表用C++实现。文章中展示了如何维护两个按坐标排序的实体链表,并在实体位置改变时更新其在链表中的位置。十字链表在计算AOI范围内的对象时效率高,但对象移动频繁时计算量较大。示例代码包括添加、删除、更新位置和获取AOI范围内的实体等操作。

AOI十字链表python简单实现,仅用作学习,理解基本原理

AOI一般是C++去实现,本文章python写仅用来入门了解

场景内维护两个实体链表

 list_x和list_y

所有实体根据x坐标大小排序,在list_x上
所有实体根据y坐标大小排序,在list_y上
 

实体位置改变时候,需要改变实体在list_x,list_x的位置

实体的AOI范围, 根据AOI半径 在list_x,list_x上遍历即可

十字链表发在计算AOI范围内对象时,计算量非常小,且跟空间大小无关,因此省去大量无效的遍历过程。十字链表法也有一些需要注意的地方,因为在两条链表中都必须按照大小顺序进行排列,因此对象在不停的移动,会带来比较大量的计算。

 python版本:2.7

# coding: utf-8


class Entity(object):
	def __init__(self, eid, x, y):
		self.id = eid

		self.x = x
		self.y = y
		self.radius = 5  # AOI半径

	def __str__(self):
		return "<{0},{1}-{2}>".format(self.id, self.x, self.y)
	
	def enter(self, pobj):
		print("{0} enter {1} view".format(pobj, self))

	def leave(self, pobj):
		print("{0} leave {1} view".format(pobj, self))

	def move(self, pobj):
		print("{0} move in {1} view".format(pobj, self))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值