我有一个“食物”数组,我有一个for循环,得到食物的x和y。食物只是随机放在窗户上的一个红点。有了x和y,我如何以一定的速度把圆移动到这些坐标上?你知道吗
pygame.draw.circle(win, (0, 255, 0), (round(x), round(y)), radius)
index = 0
for index in food_list:
food_x, food_y = index[0], index[1]
distance_x, distance_y = food_x - x, food_y - y
stepx, stepy = distance_x * speed, distance_y * speed
x = x + stepx
y = y + stepy
有了这个代码,我的圆很好地移动到第一个食物项,但只移动到第二个食物项的一半,它一直移动得越来越少,直到它完全不移动为止。而且,当它接近我不想要的食物时,圆圈开始变慢。你知道吗
你必须从食物方向的圆计算出Unit vector(单位向量的长度是1)。按} 计算向量,^{} 计算单位向量:
speed
缩放单位向量,并将结果添加到圆的坐标中。在pygame中,可以使用^{
当然,这可以简化:
如果你想从食物上一步一步走到下一步,那么你不能像这样做一个循环,但你可以一个接一个地把食物列在清单上。使用索引(
food_i
)来标识要移动到的food_list
的下一个对象。当食物到达时,增加指数:在程序的主循环之前初始化下一个食物的索引:
通过应用程序循环中的.distance_to()计算从圆心到食物的距离:
将圆圈向食物移动一步。通过计算剩余距离和一步距离的最小值(
min(dist, speed)
),确保圆圈不会跨过食物:切换到下一个食物,如果到达食物:
相关问题 更多 >
编程相关推荐