Python 在与pygame冲突期间增加图像的大小?

Python 在与pygame冲突期间增加图像的大小?,python,pygame,size,Python,Pygame,Size,我有一个程序,有一个播放器(一个图像)和一个矩形,我希望当播放器与矩形发生碰撞时,图像的大小会增加 目前,我有以下代码: import pygame from random import randint WIDTH, HEIGHT = 800, 800 FPS = 60 pygame.init() win = pygame.display.set_mode((WIDTH, HEIGHT)) fenetre_rect = pygame.Rect(0, 0, WIDTH, HEIGHT) p

我有一个程序,有一个播放器(一个图像)和一个矩形,我希望当播放器与矩形发生碰撞时,图像的大小会增加


目前,我有以下代码:

import pygame
from random import randint

WIDTH, HEIGHT = 800, 800
FPS = 60

pygame.init()

win = pygame.display.set_mode((WIDTH, HEIGHT))
fenetre_rect = pygame.Rect(0, 0, WIDTH, HEIGHT)
pygame.display.set_caption("Hagar.io")
clock = pygame.time.Clock()

bg = pygame.image.load("bg.png").convert()
bg_surface = bg.get_rect(center=(WIDTH / 2, HEIGHT / 2))
bg_x = bg_surface.x
bg_y = bg_surface.y
x_max = WIDTH / 2
y_max = HEIGHT / 2

# player
player = pygame.transform.scale(pygame.image.load("player.png").convert_alpha(), (i, i))
player_rect = player.get_rect(center=(x_max, y_max))

# cell
rect_surface = pygame.Rect(300, 500, 20, 20)

# Game loop
running = True
while running:
    dt = clock.tick(FPS) / 1000

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    if player_rect.colliderect(rect_surface):
        print("collide")

    bg_surface.x = bg_x
    bg_surface.y = bg_y

    # draw on screen
    win.blit(bg, bg_surface)
    pygame.draw.rect(win, (255, 0, 0), rect_surface)
    win.blit(player, player_rect)
    pygame.display.flip()

pygame.quit()
我尝试添加“colliderect”条件,但不起作用:

player_rect.width += 1
player_rect.height += 1

谢谢你的帮助

这条线

player = pygame.transform.scale(pygame.image.load("player.png").convert_alpha(), (i, i))
正在使用变量
i
,但代码中未定义该变量。我不确定它是在哪里定义的,但它是你想要的关键。无论如何,我将尝试在没有此信息的情况下回答:

问题是,放大
rect
不会有任何作用,因为rect只是坐标。您必须缩放实际图像,
pygame.transform.scale
正是这样做的

您可以将图像保存在单独的变量
player\u img

player_img = pygame.image.load("player.png").convert_alpha()
player = pygame.transform.scale(player_img, (i, i))
然后,如果要以不同的方式缩放,只需再次调用
.scale()

double_size_player = pygame.transform.scale(player_img, (i*2, i*2))
这仍然让我们对未定义的
i
变量感到困惑,但我认为您已经了解了它的要点。请记住,您必须从缩放图像中提取一个新的
rect
,因为它会更大。

这一行

player = pygame.transform.scale(pygame.image.load("player.png").convert_alpha(), (i, i))
正在使用变量
i
,但代码中未定义该变量。我不确定它是在哪里定义的,但它是你想要的关键。无论如何,我将尝试在没有此信息的情况下回答:

问题是,放大
rect
不会有任何作用,因为rect只是坐标。您必须缩放实际图像,
pygame.transform.scale
正是这样做的

您可以将图像保存在单独的变量
player\u img

player_img = pygame.image.load("player.png").convert_alpha()
player = pygame.transform.scale(player_img, (i, i))
然后,如果要以不同的方式缩放,只需再次调用
.scale()

double_size_player = pygame.transform.scale(player_img, (i*2, i*2))

这仍然让我们对未定义的
i
变量感到困惑,但我认为您已经了解了它的要点。请记住,您必须从缩放图像中提取一个新的
rect
,因为它会更大。

感谢您的评论,变量i正好是图像的大小(i=60),我已经创建了这个变量来做测试。@CodingFR好的,然后按照我的回答做,你可以把图像放大。我已经写了:
if player\u rect.collide rect(rect\u surface):I+=1 player=pygame.transform.scale(player\u img,(I,I))
但是现在,当播放器的大小增加时,它不再以窗口为中心,我如何修复它?@CodingFR您必须重新计算矩形,因为图像现在变大了,坐标必须改变。对每个缩放图像调用
。get_rect()
。未来的改进是在程序开始时调用多个
.scale()
,并将所有较大的播放器图像存储在列表中。这样,您就不会一直重复缩放,因为这可能会很昂贵。然后你可以在列表上迭代并绘制。谢谢你的评论,变量i正好是图像的大小(i=60),我创建了这个变量来进行测试。@CodingFR好的,然后按照我的回答做,你可以使图像变大。我写了这个:
if player\u rect.collide rect(rect\u surface):i+=1 player=pygame.transform.scale(player_img,(i,i))
但是现在,当播放器的大小增加时,它不再位于窗口的中心,我如何解决这个问题?@CodingFR您必须重新计算矩形,因为图像现在变大了,坐标必须改变。对每个缩放图像调用
。get_rect()
。未来的改进是在程序开始时调用多个
.scale()
,并将所有较大的播放器图像存储在列表中。这样,您就不会一直重复缩放,因为这可能会很昂贵。然后,您可以迭代列表并绘制图形。