首页 > 解决方案 > 每次我调整我的汽车的大小时,Pygame 的零件都会丢失,我该如何解决这个问题?

问题描述

最近我在制作基本的汽车物理方面得到了帮助,但我遇到的一个问题是我的车太小了,每次我调整汽车的大小时,汽车的某些部分都会丢失视频我不知道如何解决这个问题,这辆车是小,我正在尝试制作一个停车游戏,我需要车大一点在此处输入图像描述

我的车课

pygame.display.set_caption("car game")
img = pygame.image.load("s23.png")
img = pygame.transform.scale(img,(img.get_width()+ 36,img.get_height()+ 36))

class Car:
    def __init__(self, x, y, height, width, color):
        self.x = x - width / 2
        self.y = y - height / 2
        self.height = height
        self.width = width
        self.color = color
        self.rect = pygame.Rect(x, y, height, width)
        self.surface = pygame.Surface((height, width)) # 1
        self.surface.blit(img, (0, 0))
        self.angle = 0
        self.speed = 0 # 2

    def draw(self): # 3
        self.rect.topleft = (int(self.x), int(self.y))
        rotated = pygame.transform.rotate(self.surface, self.angle)
        surface_rect = self.surface.get_rect(topleft = self.rect.topleft)
        new_rect = rotated.get_rect(center = surface_rect.center)
        window.blit(rotated, new_rect.topleft)

white = (255, 255, 255)
car1 = Car(300, 300, 73, 73, white) # 4
clock = pygame.time.Clock()

我的主循环

runninggame = True
while runninggame:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            runninggame = False
    
    pressed = pygame.key.get_pressed()
    car1.speed *= 0.9 # 5
    if pressed[pygame.K_UP]: car1.speed += 0.5 # 6
    if pressed[pygame.K_DOWN]: car1.speed -= 0.5 # 6

    if pressed[pygame.K_LEFT]: car1.angle += car1.speed / 2 # 7
    if pressed[pygame.K_RIGHT]: car1.angle -= car1.speed / 2 # 7
    car1.x -= car1.speed * math.sin(math.radians(car1.angle)) # 8
    car1.y -= car1.speed * math.cos(math.radians(-car1.angle)) # 8
    
    window.fill((0, 0, 0)) # 9
    car1.draw()
    pygame.display.flip()
    clock.tick(60) # 10
pygame.quit()

标签: pythonhtmlcsspython-3.xpygame

解决方案


加载图像时缩放图像。稍后,当您实例化 a 时,Car您将传入 aheightwidth为汽车创建一个具有该尺寸的 Surface。但是,您不会缩放图像以适应它,您只需将初始图像blit 到该表面(这是请求的大小)。将图像粘贴到较小的表面上会导致将其裁剪为要粘贴到的表面的大小。

要解决此问题,请不要在首次加载图像时对其进行缩放。self.surface只需在__init__()for中创建时对其进行缩放Car


推荐阅读