我正在写一个游戏环境,其中一个人(工人)应在区域内随机移动,直到与绿色障碍物(定义为pygame.draw.rect(screen, GREEN, [510,150,75,52])
和{{1} }。
直到现在我仍可以模拟工人的随机运动,但是它以某种不规则且不平滑的方式运动,在相同区域周围跳跃并缓慢移至右下角。
如何更新功能pygame.draw.rect(screen, GREEN, [450,250,68,40])
,以支持工作人员在屏幕区域内更真实地平稳移动?我试图将刻度线的大小增加到70或更多(create_randomPATH
),如其中一个线程所示,但这似乎无法解决问题。
clock.tick(70)
答案 0 :(得分:1)
您可以在代码中使用额外的direction
变量,该变量说明播放器当前的移动方向。四个值之一:上,右,下或左。偶尔更新该方向变量。同时一次只能沿该方向移动一个坐标。
def create_randomPATH(self, x, y, dir):
if random.uniform(0,1)>0.8:
# there is a 20% chance every time that direction is changed
dir = random.randInt(1,4)
if dir == 1:
return x, y+1, dir # up
if dir == 2:
return x+1, y, dir # right
if dir == 3:
return x, y-1, dir # down
if dir == 4:
return x-1, y, dir # left
在您的代码中,您还需要一个全局方向变量,最初它也应该具有值1、2、3或4:
w_x,w_y,w_dir = worker.create_randomPATH(w_x,w_y,w_dir)
通过在每次迭代中只移动一个步骤,我们可以确保移动速度始终恒定。在您的代码中,它从1步到5步不等。同样,如果您沿给定的方向笔直移动几步,那似乎比经常突然改变方向更自然。尝试尝试改变方向的频率(目前有20%的机会),并查看它是否使运动更加平滑。
由于移动的随机性,最终移动的对象将到达游戏的边界并可能离开屏幕。每次移动后调整位置:
w_x,w_y,w_dir = worker.create_randomPATH(w_x,w_y,w_dir)
if (w_x + worker.rect.width > SCREENWIDTH): w_x = SCREENWIDTH - worker.rect.width
if (w_x < 0): w_x = 0
if (w_y + worker.rect.height > SCREENHEIGHT): w_y = SCREENHEIGHT - worker.rect.height
if (w_y < 0): w_y = 0
然后,该对象将不会退出屏幕,最终将再次随机向其他方向移动。由于每个方向的可能性均等,因此它将在屏幕上正常移动。
答案 1 :(得分:1)
采用screen.blit(worker.image, (w_x,w_y))
并将其放入自己的方法中。然后,您可以创建一个循环,从oldX
和oldY
到create_randomPATH
找到的新位置,甚至可以使它们在{{1 }}或x
的方向。
下面是一个粗糙的示例,但您可能必须对其进行修改以匹配您的代码。
y