在基于 pygame 的模拟中,如何移动物体最好 represented/implemented?
How are moving objects best represented/implemented in a pygame-based simulation?
我目前正在尝试为大学做一个蜜蜂模拟,我已经开始研究如何做的基础知识。
最初的想法是使用 PyGame 并在屏幕上向用户展示蜜蜂,但现在我只是先完成基本功能。
我遇到问题的功能是蜜蜂会寻找未使用的细胞然后去使用它们的功能。这是每个新帧上的 运行 和每个蜜蜂对象上的 运行,因此每只蜜蜂都会检查每个单元格。
我为此使用此代码:
for i in range (0,len(hiveCells)):
if hiveCells[i] == "":
print("Not taken")
hiveCells[i] = "B"
else:
print("Taken")
但是这个问题当然是它在几秒钟内就完成了,蜜蜂已经用完了整个蜂巢,但我需要一种方法来慢慢地做到这一点,包括前往那个蜂房所花费的时间,然后是它所花费的时间实际使用它?
最好的方法是什么?我正在考虑使用坐标,它会在每个循环中靠近那些坐标并检查它是否已经到达它们。
为了包括每只蜜蜂的旅行时间,您首先需要定义某种距离度量。一个简单的选择是使用欧几里得距离。
为了将其合并到您的模型中,您需要添加以下内容
- 为每只蜜蜂和每个蜂巢(单元)添加一个位置 (x,y) 和可能的位置 (z)
- 定义每次帧更新经过的时间(以秒为单位)。
- 定义蜜蜂的速度(根据m/s)。
- 现在每帧更新您都知道自上次更新以来经过了多少时间,并且您可以(使用蜜蜂速度和位置)计算蜜蜂的新位置。
- 帧的更新频率现在与模型中经过的时间直接相关。
请注意,为了使其正常工作,您需要某种类型的 ID,它将蜜蜂与其声称的蜂巢单元相关联。我建议给每只蜜蜂一个唯一的 ID。
然后,一旦蜜蜂认领了一个蜂巢单元,您就将唯一的蜜蜂 ID 存储在蜂巢单元中,这样在每次帧更新时,您就可以计算每只蜜蜂相对于它正在飞行的蜂巢单元的新位置到。
另外请注意,为了使该方案起作用,蜂巢单元需要一个位置(您可以将其存储在类似大小的数组中。但是为每个蜂巢(单元)创建一个对象可能是最干净的,它存储它的坐标和声称它的蜜蜂 ID。这还允许您通过向蜂巢(细胞)/蜜蜂添加额外信息(即蜂蜜存在或其他)来进一步改进您的模型。
我目前正在尝试为大学做一个蜜蜂模拟,我已经开始研究如何做的基础知识。
最初的想法是使用 PyGame 并在屏幕上向用户展示蜜蜂,但现在我只是先完成基本功能。
我遇到问题的功能是蜜蜂会寻找未使用的细胞然后去使用它们的功能。这是每个新帧上的 运行 和每个蜜蜂对象上的 运行,因此每只蜜蜂都会检查每个单元格。
我为此使用此代码:
for i in range (0,len(hiveCells)):
if hiveCells[i] == "":
print("Not taken")
hiveCells[i] = "B"
else:
print("Taken")
但是这个问题当然是它在几秒钟内就完成了,蜜蜂已经用完了整个蜂巢,但我需要一种方法来慢慢地做到这一点,包括前往那个蜂房所花费的时间,然后是它所花费的时间实际使用它?
最好的方法是什么?我正在考虑使用坐标,它会在每个循环中靠近那些坐标并检查它是否已经到达它们。
为了包括每只蜜蜂的旅行时间,您首先需要定义某种距离度量。一个简单的选择是使用欧几里得距离。
为了将其合并到您的模型中,您需要添加以下内容
- 为每只蜜蜂和每个蜂巢(单元)添加一个位置 (x,y) 和可能的位置 (z)
- 定义每次帧更新经过的时间(以秒为单位)。
- 定义蜜蜂的速度(根据m/s)。
- 现在每帧更新您都知道自上次更新以来经过了多少时间,并且您可以(使用蜜蜂速度和位置)计算蜜蜂的新位置。
- 帧的更新频率现在与模型中经过的时间直接相关。
请注意,为了使其正常工作,您需要某种类型的 ID,它将蜜蜂与其声称的蜂巢单元相关联。我建议给每只蜜蜂一个唯一的 ID。
然后,一旦蜜蜂认领了一个蜂巢单元,您就将唯一的蜜蜂 ID 存储在蜂巢单元中,这样在每次帧更新时,您就可以计算每只蜜蜂相对于它正在飞行的蜂巢单元的新位置到。
另外请注意,为了使该方案起作用,蜂巢单元需要一个位置(您可以将其存储在类似大小的数组中。但是为每个蜂巢(单元)创建一个对象可能是最干净的,它存储它的坐标和声称它的蜜蜂 ID。这还允许您通过向蜂巢(细胞)/蜜蜂添加额外信息(即蜂蜜存在或其他)来进一步改进您的模型。