微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以在 Pygame 中的移动对象上使用图像而不是颜色吗?

如何解决我可以在 Pygame 中的移动对象上使用图像而不是颜色吗?

   def star1():
        global angle
        x = int(math.cos(angle) * 100) + 800
        y = int(math.sin(angle) * 65) + 400
        pygame.draw.circle(screen,white,(x,y),17)
        angle += 0.02

这里的 .draw.circle 参数 pygame 只允许使用 RGB 颜色为图形着色。我想知道是否有一种方法可以将图像作为颜色传递,或者使用不同的方法来让我在对象/圆圈上放置图像。圆圈会四处移动,因此图像也需要在圆圈移动时与圆圈保持一致。

解决方法

  • 使用所需的 size

    创建一个透明的 pygame.Surface
  • 表面

    中间画一个白色圆圈
  • 使用混合模式 my_image 在此 Surface 上混合图像 (BLEND_RGBA_MIN):

size = 100
circular_image = pygame.Surface((size,size),pygame.SRCALPHA)
pygame.draw.circle(circular_image,(255,255,255),(size//2,size//2),size//2)
image_rect = my_image.get_rect(center = circular_image.get_rect().center)
circular_image.blit(my_image,image_rect,special_flags=pygame.BLEND_RGBA_MIN)

最小示例:

import pygame

pygame.init()
window = pygame.display.set_mode((300,300))
clock = pygame.time.Clock()

def create_circular_image(size,image):
    clip_image = pygame.Surface((size,pygame.SRCALPHA)
    pygame.draw.circle(clip_image,size//2)
    image_rect = my_image.get_rect(center = clip_image.get_rect().center)
    clip_image.blit(my_image,special_flags=pygame.BLEND_RGBA_MIN)
    return clip_image

def create_test_image():
    image = pygame.Surface((100,100))
    ts,w,h,c1,c2 = 25,100,64,64),(32,255)
    [pygame.draw.rect(image,c1 if (x+y) % 2 == 0 else c2,(x*ts,y*ts,ts,ts)) 
        for x in range((w+ts-1)//ts) for y in range((h+ts-1)//ts)]
    return image

my_image = create_test_image()
circular_image = create_circular_image(100,my_image)

rect = circular_image.get_rect(center = window.get_rect().center)
run = True
while run:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    keys = pygame.key.get_pressed()
    rect.x += (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * 5
    rect.y += (keys[pygame.K_DOWN] - keys[pygame.K_UP]) * 5            

    window.fill((64,64))
    window.blit(circular_image,rect)
    pygame.display.flip()

pygame.quit()
exit()

另见:

,

编写一个在给定的 x,y 上绘制图像的函数,并传递这些在圆函数中使用的 x,y 值。 基本上就是win.blit(image,(x,y))。不要忘记减去 radius 值。所以图像与圆形匹配。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。