如何解决当速度小于 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
解决方法
由于 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 举报,一经查实,本站将立刻删除。