1

我昨天刚开始学习如何使用pygame。我读过这本非常有用的书,并遵循了它的所有教程、示例和内容。我想尝试制作一个非常简单的横向卷轴/平台游戏,但是这本书很快就进入了 3D 建模,没有说明如何为上下左右的移动制作变化的精灵以及如何循环播放动画图像。

我今天花了所有时间试图让一个精灵显示并能够上下左右移动。但由于脚本简单,它使用静态图像并且拒绝更改。

谁能给我一些有关如何更改精灵的知识。或者发给我一个教程?

每个参考和尝试它的人一直在使用生成的形状,所以我永远无法使用它们。

非常感谢任何帮助。

补充:在弄清楚如何在我的场景中放置复杂的动画之前,我想知道如何让我的“播放器”更改为关于我向左或向右按​​下的不动图像。如果人们知道它真的很复杂,也许是对角线。

补充:这是我到目前为止所整理的。http://animania1.ca/ShowFriends/dev/dirmove.rar是否有可能使方向/动作设置动作的列,并让小列设置代码也使它在循环中循环执行动画片?(或者这会是对效率的严重误用吗?)

4

3 回答 3

1

这是一个愚蠢的示例,当您按下左/右时,它会在 spritesheet 的两个第一张图像之间交替:

import pygame

quit = False
pygame.init()
display = pygame.display.set_mode((640,480))
sprite_sheet = pygame.image.load('sprite.bmp').convert()

# by default, display the first sprite
image_number = 0

while quit == False:
    event = pygame.event.poll()
    no_more_events = True if event == pygame.NOEVENT else False

    # handle events (update game state)
    while no_more_events == False:
        if event.type == pygame.QUIT:
            quit = True
            break
        elif event.type == pygame.NOEVENT:
            no_more_events = True
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                image_number = 0
            elif event.key == pygame.K_RIGHT:
                image_number = 1

        event = pygame.event.poll()

    if quit == False:
        # redraw the screen
        display.fill(pygame.Color('white'))
        area = pygame.Rect(image_number * 100, 0, 100, 150)
        display.blit(sprite_sheet, (0,0), area)
        pygame.display.flip()

我以前从来没有真正使用过 Pygame,所以也许这段代码不应该作为一个例子。我希望它显示了基础知识。

为了更完整,我应该在更新之前等待一段时间,例如控制我每秒只更新 60 次。

编写一个可以简化工作的精灵类也很方便。您将在构造函数中传递一个精灵帧的大小,并且您将拥有类似的方法,它会自动完成选择下一帧、对精灵进行 blitting 等update()工作draw()

Pygame 似乎为此目的提供了一个基类:链接文本

于 2009-04-09T15:38:23.833 回答
1

伙计,你唯一要做的就是离场

import pygame 和所有其他需要的东西类型代码和东西............然后当你制作一个 spri

class .your class nam here. (pygame.sprite.Sprite):
     def __init__(self):
          pygame.sprite.Sprite.init(self)
          self.image=pygame.image.load(your image and path)
          self.rect=self.image.get_rect()
          x=0
          y=0

          # any thing else is what you want like posistion and other variables

     def update(self):
          self.rect.move_ip((x,y))

就是这样!!!!但这不是结束。如果你这样做,你只会制作你需要的精灵来移动它

于 2009-11-19T20:29:26.313 回答
0

我对 Pygame 了解不多,但我使用过 SDL(Pygame 所基于的)。

如果您使用Surface.blit()链接文本

您可以使用可选area参数来选择要绘制曲面的哪个部分。因此,如果您将作为动画一部分的所有图像放在一个文件中,您可以选择要绘制的图像。它被称为“剪辑”。

我猜你会有一个游戏循环来更新游戏状态(如有必要,更改精灵的当前图像),然后使用它们的状态绘制精灵。

于 2009-04-09T13:10:39.297 回答