gpt4 book ai didi

python - 如何在pygame中循环图像 Sprite

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:13 28 4
gpt4 key购买 nike

我希望使用 pygame 和 python 版本 2.7.6 在游戏中创建角色。我有一个简单的 python 脚本,它允许我创建一个窗口并将图像打印到屏幕上。这工作成功,但它只是一个静态图像。

import pygame


class Game(object):
def main(self, screen):

#load first sprite to image for blit"
image = pygame.image.load('sprites/sprite1.png')
image2 = pygame.image.load('sprites/sprite2.png')
image3 = pygame.image.load('sprites/sprite3.png')
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
return
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
return

screen.fill((200, 200, 200))
screen.blit(image, (320, 240))
pygame.display.flip()

if __name__ == '__main__':
pygame.init()
screen = pygame.display.set_mode((640, 480))
Game().main(screen)

我希望通过将第一个 Sprite 更改为第二个 Sprite 来创建更动态的图像,依此类推至少三个 Sprite 可能更多(如 sprite1.pngsprite2.png, sprite3.png).如何在给定时间间隔到期后循环图像,例如:1 秒 1/2 秒......

最佳答案

让我们从头开始,在编写游戏时,让渲染循环远离程序的主循环(处理窗口事件的循环)非常重要。这样,即使某些东西会卡在您的渲染过程中,您的窗口也不太可能变得无响应。除了其他好处,例如人们将能够调整大小,并以其他方式操纵它,而不会中断图形线程。网上有一些很好的教程,虽然我手头没有 python 教程,SFML tutorials can teach you the right concepts然后您可以在 python 中使用它。

随着公共(public)服务的发展,当您已经将应用程序拆分为单独的线程时,我们将面临动画问题。非常简单的实现,当然不是最好的,就是为每个图像生成一个单独的线程,该线程将只包含类似的东西:

def shake_it():
while True:
time.sleep(3)
#do rotation here

虽然这会工作得很好,但它显然不是最好的解决方案,因为它非常不灵活。想象一下,现在您还想定期做一些其他事情,例如让您的 NPC 巡逻堡垒。这将需要另一个线程,并且这会迅速升级到相当多的线程(这本身并不坏,但不是预期的效果)。

所以拯救将是一个更通用的线程 - 事件处理程序。一个类,它将控制您需要在特定时间间隔执行的所有功能。然后,在用于动画图像的附加线程中,您将在循环中运行一个 event_handler 实例,它将作为动画等 Action 的抽象。

关于python - 如何在pygame中循环图像 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26435738/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com