python - 每次我调整我的汽车的大小时,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()
解决方案
加载图像时缩放图像。稍后,当您实例化 a 时,Car
您将传入 aheight
并width
为汽车创建一个具有该尺寸的 Surface。但是,您不会缩放图像以适应它,您只需将初始图像blit 到该表面(这是请求的大小)。将图像粘贴到较小的表面上会导致将其裁剪为要粘贴到的表面的大小。
要解决此问题,请不要在首次加载图像时对其进行缩放。self.surface
只需在__init__()
for中创建时对其进行缩放Car
。
推荐阅读
- java - 验证签名的 JWT
- python-3.7 - ValueError: int() 以 10 为底的无效文字:'\x00\x00\
- sql - 选择加入和PHP
- docker - 在 docker 上安装 magento 2.2
- r - 如何从 R 中获得 P 值的整洁 excel 输出
- c# - 选择组合框项目时 DataTrigger 不起作用
- javascript - 从 node.js 查询 MSSQL 时使用日期
- prediction - AdaBoost - 获取特定数量的估计器的预测
- javascript - Mongoose .catch 块在多个地方是相同的。我该如何避免这种情况?
- scala - 理解 Scala FP 库