微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当速度小于 1 时,精灵卡在窗口的边界上

如何解决当速度小于 1 时,精灵卡在窗口的边界上

我正在尝试为我的游戏制作移动的云,但是当我将云的速度设置为小于 1 时,云的精灵会粘在边界上。如果云的一部分已经在屏幕之外,我希望该云继续移动. 我发现如果 rect 的 x 等于 0,精灵就会卡住。如何解决

我的代码

class Cloud(pygame.sprite.Sprite):
    def __init__(self):
        super(Cloud,self).__init__()
        images = [load_image(f"cloud{i}.png") for i in range(1,5)]
        self.image = random.choice(images)
        self.rect = self.image.get_rect()

        self.rect.x = random.randrange(WIDTH - self.rect.w)
        self.rect.y = random.randrange(HEIGHT - self.rect.h)

        self.vel = 10 / FPS  # It returns value less then 1

    def update(self,event=None):
        if not event:
            self.rect.x -= self.vel

enter image description here

解决方法

由于 pygame.Rect 应该代表屏幕上的一个区域,因此 self.rect.x -= self.vel 对象只能存储整数数据。

Rect 对象的坐标都是整数。 [...]

当对象的新位置设置为 Rect 对象时,坐标的小数部分丢失:

pygame.Rect

如果要以浮点精度存储对象位置,则必须将对象的位置分别存储在单独的变量和属性中,并同步 .topleft 对象。 round 坐标并将其分配给矩形的位置(例如 class Cloud(pygame.sprite.Sprite): def __init__(self): super(Cloud,self).__init__() images = [load_image(f"cloud{i}.png") for i in range(1,5)] self.image = random.choice(images) self.rect = self.image.get_rect() self.rect.x = random.randrange(WIDTH - self.rect.w) self.rect.y = random.randrange(HEIGHT - self.rect.h) self.x,self.y = self.rect.topleft self.vel = 10 / FPS # It returns value less then 1 def update(self,event=None): if not event: self.x -= self.vel self.rect.topleft = round(self.x),round(self.y) ):

n = 75
guess = 70
if guess == n:
   print(guess)

   left = 0
   right = n

   while left <= right:
       mid = left + right //2

        if guess > mid:
            left = mid
            print(left)

        elif guess < mid:
            right = mid
            print(right)

        else:
            print(mid)
            break

if left > right:
    print("Cannot be correct")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。