GOOGLE ADS

lunes, 18 de abril de 2022

Cómo obtener las dimensiones correctas para un rectángulo de pygame creado a partir de una imagen

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 bottomleftal 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

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...