【问题标题】:How to keep direction of sprites?如何保持精灵的方向?
【发布时间】:2019-12-14 12:22:13
【问题描述】:

我正在尝试进行模拟。

我的兔子应该随机移动,但我希望它们在同一方向移动更长时间,因此,为什么我使用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

【问题讨论】:

    标签: python random pygame simulation


    【解决方案1】:

    这是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坐标仍然可以更新)。李>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多