【问题标题】:python pygame blit functionpython pygame blit 函数
【发布时间】:2014-07-19 18:35:22
【问题描述】:

当我使用blit 函数时,它不会删除之前加载的精灵以使精灵移动,直到我调用“display.fill(bgcolor)”函数。问题是我有一个多彩多姿的背景。那么如何在不影响背景的情况下更新图像呢? 注意 - 已经尝试过“pygame.display.update()”和“pygame.display.flip()” - 它没有帮助:(

class states():
def __init__(self, goku1,goku2, x, y):
    self.image=goku1
    keys=pygame.key.get_pressed()
    if keys[K_RIGHT]:
        self.image=goku2
    if keys[K_LEFT]:
        self.image=goku2

while True:
pygame.display.flip()
pygame.display.update()
obj=states(goku1, goku2, x, y)

call=position()
DISPLAYSURF.blit(obj.image, (x, y))

卡了很久:(

【问题讨论】:

    标签: python pygame sprite blit


    【解决方案1】:

    您将首先对背景进行 blit,然后对正在移动的 sprite 的新位置进行 blit。它看起来像这样:

    window= pygame.display.set_mode(WINDOWSIZE, 0, 32)
    
    while True:
        #update events
    
        window.blit(your_multi_colored_background, (0, 0))
        window.blit(obj.image, (x, y))
        pygame.display.update()
    

    希望这会有所帮助。

    【讨论】:

    • 谢谢,它有效..好奇有什么方法(语法)我们可以使用 rect 和填充颜色函数简单地绘制背景?
    【解决方案2】:

    Blit 从不删除前一个元素 - 它不能 - 所有 blitted 元素创建一个位图。

    您必须在所有循环中再次对所有元素进行 blit。

    或者你必须在你blit sprite之前保留部分背景,然后用它来blit这部分代替sprite来移除它。

    您也可以使用 pygame.display.update() 和参数来仅对背景的某些部分进行 blit。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多