在与 pygame 碰撞期间增加图像的大小?
Increase the size of an image during a collision with pygame?
我有一个带有播放器(是图像)和矩形的程序,我希望当播放器与矩形发生碰撞时,图像的大小会增加。
现在,我有这个代码:
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
但它未在您的代码中定义。我不确定它在哪里定义,但它是 key 你想要的。无论如何,我会尝试在没有这些信息的情况下回答:
事实是,放大 rect
不会有任何作用,因为矩形只是坐标。您必须缩放实际图像,pygame.transform.scale
正是这样做的。
您可以将图像保存在单独的变量中 player_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
,因为它会更大。
我有一个带有播放器(是图像)和矩形的程序,我希望当播放器与矩形发生碰撞时,图像的大小会增加。
现在,我有这个代码:
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
但它未在您的代码中定义。我不确定它在哪里定义,但它是 key 你想要的。无论如何,我会尝试在没有这些信息的情况下回答:
事实是,放大 rect
不会有任何作用,因为矩形只是坐标。您必须缩放实际图像,pygame.transform.scale
正是这样做的。
您可以将图像保存在单独的变量中 player_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
,因为它会更大。