首页 > 解决方案 > 如何保持精灵的方向?

问题描述

我正在尝试进行模拟。

我的兔子应该是随机移动的,但我希望它们保持相同的方向移动更长时间,因此,为什么我使用if randomnum == 1, 只改变方向 1/10 次。

但是当我运行代码时,兔子似乎每一步都会改变方向。我究竟做错了什么?

兔子构造函数

class Rabbit(pygame.sprite.Sprite):
    def __init__(self,x,y):
        super().__init__()

        self.image = pygame.Surface([10,10])
        self.image.fill(BLUE)

        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.xchange = 0
        self.ychange = 0
        self.hp = 100

兔子搬运工

    for rabbit in rabbits:
        randomnum = random.randint(1,10)
        if randomnum == 1:
            xdir = random.randint(-5,5)
            ydir = random.randint(-5,5)
            rabbit.xchange = xdir
            rabbit.ychange = ydir
        else:
            continue
        if rabbit.rect.x+xdir > 10 and rabbit.rect.x+xdir < 390 and rabbit.rect.y+ydir > 10 and rabbit.rect.y+ydir < 390:
                rabbit.rect.x += rabbit.xchange
                rabbit.rect.y += rabbit.ychange
        else:
            continue

标签: pythonrandompygamesimulation

解决方案


这是continue. 他们跳过了循环体的其余部分,这里不需要:

  • 在第一个中,if只要兔子的方向没有改变,它也不会移动,continue跳过第二个if并继续下一个兔子
  • 在第二个if中, continue 只是让循环继续到下一个兔子,无论如何它都会这样做

修复:删除它们。

for rabbit in rabbits:
    randomnum = random.randint(1,10)
    if randomnum == 1:
        xdir = random.randint(-5,5)
        ydir = random.randint(-5,5)
        rabbit.xchange = xdir
        rabbit.ychange = ydir
    if rabbit.rect.x+xdir > 10 and rabbit.rect.x+xdir < 390 and rabbit.rect.y+ydir > 10 and rabbit.rect.y+ydir < 390:
        rabbit.rect.x += rabbit.xchange
        rabbit.rect.y += rabbit.ychange

评论:

  • 兔子可能会在场地边界停留更长时间,如果这看起来很奇怪,您可以扩展随机化部分并检查兔子是否在边界处,并生成 -5...0 或 0...5 之间的方向只要
  • 更新这两个位置可以分为两个if-s:仅仅因为兔子到达屏幕的左侧,它不必完全停止移动(y坐标仍然可以更新)。

推荐阅读