#python #pygame
#python #pygame
Вопрос:
Я хочу переместить изображение объекта Rect, возможно ли это?
примеры: 1 — создание водопада с анимацией воды (прокрутка изображения воды) 2 — настройка местоположения изображения, а не прямоугольника
примечание: это всего лишь примеры, а не код, над которым я работаю
Ответ №1:
Вы можете переместить изображение поверхности на место с pygame.Surface.scroll
помощью . Например, вызовите
water_surf.scroll(0, 1)
Однако это вас не удовлетворит. См. pygame.Surface.scroll
:
Переместите изображение на dx пикселей вправо и dy пикселей вниз. dx и dy могут быть отрицательными для прокрутки влево и вверх соответственно. Области поверхности, которые не перезаписываются, сохраняют свои исходные значения пикселей.
Возможно, вы захотите написать функцию, которая перезаписывает области, которые не перезаписаны, пикселем, который прокручивается за пределы поверхности:
def scroll_y(surf, dy):
scroll_surf = surf.copy()
scroll_surf.scroll(0, dy)
if dy > 0:
scroll_surf.blit(surf, (0, dy-surf.get_height()))
else:
scroll_surf.blit(surf, (0, surf.get_height() dy))
return scroll_surf
один раз за кадр, чтобы создать эффект потока воды, подобный водопаду.
Чтобы центрировать изображение в прямоугольной области, вам нужно получить ограничивающий прямоугольник изображения и установить центр прямоугольника через центр области. Используйте прямоугольник для blit
изображения:
area_rect = pygame.Rect(x, y, w, h)
image_rect = surf.get_rect()
image_rect.center = area_rect.center
screen.blit(surf, image_rect)
То же самое в одной строке:
screen.blit(surf, surf.get_rect(center = area_rect.center))
Минимальный пример:
repl.it/@Rabbid76/PyGame-SCroll
import pygame
def scroll_y(surf, dy):
scroll_surf = surf.copy()
scroll_surf.scroll(0, dy)
if dy > 0:
scroll_surf.blit(surf, (0, dy-surf.get_height()))
else:
scroll_surf.blit(surf, (0, surf.get_height() dy))
return scroll_surf
pygame.init()
window = pygame.display.set_mode((400, 400))
clock = pygame.time.Clock()
rain_surf = pygame.image.load('rain.png')
dy = 0
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
window_center = window.get_rect().center
scroll_surf = scroll_y(rain_surf, dy)
dy = (dy 1) % rain_surf.get_height()
window.fill(0)
window.blit(scroll_surf, scroll_surf.get_rect(center = window_center))
pygame.display.flip()
pygame.quit()
exit()
Комментарии:
1. Работает блестяще! однако, как я мог бы перенаправить изображение на прямоугольник?
2. @MottledKarma517 Раздел комментариев не предназначен для того, чтобы задавать дополнительные вопросы. В любом случае, я расширил ответ.