He creado un rectángulo de imagen de un sprite usando el comando pygame.image.get_rect()
. Al ubicar las coordenadas de puntos clave en el rectángulo, como bottomleft
al dibujar puntos, veo que las dimensiones del rectángulo son completamente diferentes a las dimensiones de la imagen. En este caso, la imagen es solo la punta de la flecha. La coordenada superior derecha del rectángulo es correcta, sin embargo, la coordenada inferior izquierda no lo es.
Prueba para ver rectángulo
código para dibujar puntos:
pygame.draw.circle(simulation_screen, red, velocity_arrow.rect.topright, 2)
pygame.draw.circle(simulation_screen,red,velocity_arrow.rect.bottomleft,2)
¿Cómo puedo cambiar el tamaño del rectángulo para que se ajuste a la imagen?
Solución del problema
pygame.Surface.get_rect.get_rect()
devuelve un rectángulo con el tamaño del objeto Surface. Esta función no considera el área de dibujo en la imagen. Puede encontrar el rectángulo delimitador del área pintada en la superficie, con pygame.Surface.get_bounding_rect
:
bounding_rect = image.get_bounding_rect()
bounding_rect.move_ip(target_rect.topleft)
Vea el ejemplo. El rectángulo negro es el rectángulo de superficie y el rectángulo rojo es la unión de los rectángulos del componente de máscara:
repl.it/@Rabbid76/ImageHitbox
import pygame
pygame.init()
window = pygame.display.set_mode((400, 400))
clock = pygame.time.Clock()
try:
my_image = pygame.image.load('icon/Bomb-256.png')
except:
my_image = pygame.Surface((200, 200), pygame.SRCALPHA)
pygame.draw.circle(my_image, (0, 128, 0), (60, 60), 40)
pygame.draw.circle(my_image, (0, 0, 128), (100, 150), 40)
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pos = window.get_rect().center
my_image_rect = my_image.get_rect(center = pos)
bounding_rect = my_image.get_bounding_rect()
bounding_rect.move_ip(my_image_rect.topleft)
window.fill((255, 255, 255))
window.blit(my_image, my_image_rect)
pygame.draw.rect(window, (0, 0, 0), my_image_rect, 3)
pygame.draw.rect(window, (255, 0, 0), bounding_rect, 3)
pygame.display.flip()
pygame.quit()
exit()
No hay comentarios:
Publicar un comentario