Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame:精灵因运动方向而改变_Python_2d_Pygame_Sprite - Fatal编程技术网

Python Pygame:精灵因运动方向而改变

Python Pygame:精灵因运动方向而改变,python,2d,pygame,sprite,Python,2d,Pygame,Sprite,我昨天刚开始学习如何使用pygame。我读了这本书,它非常有帮助,并且遵循了它的所有教程、示例和内容。我想尝试制作一个非常简单的侧滚/平台游戏,但《sorta》这本书很快就进入了3D建模领域,没有说明如何制作可上下左右移动的变化精灵,以及如何在动画图像中循环 我花了整整一天的时间试图让一个精灵显示出来,并且能够上下左右移动。但由于脚本很简单,所以它使用静态图像并拒绝更改 谁能给我一些关于如何改变精灵的知识吗。或者送我去参加一个这样的教程 每一个参考资料和使用它的人总是使用生成的形状,所以我永远无

我昨天刚开始学习如何使用pygame。我读了这本书,它非常有帮助,并且遵循了它的所有教程、示例和内容。我想尝试制作一个非常简单的侧滚/平台游戏,但《sorta》这本书很快就进入了3D建模领域,没有说明如何制作可上下左右移动的变化精灵,以及如何在动画图像中循环

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

谁能给我一些关于如何改变精灵的知识吗。或者送我去参加一个这样的教程

每一个参考资料和使用它的人总是使用生成的形状,所以我永远无法使用它们

非常感谢您的帮助

补充:在弄清楚如何在我的场景中放置复杂的动画之前,我想知道如何使我的“播放器”在按下左上下或右下键时变为静止图像。如果人们知道这是一件非常复杂的事情,也许是对角线


加:这就是我到目前为止所做的。是否有可能使方向/动作设置为动作的列,并使小列设置代码也使其在循环中向下循环以制作动画?(或者这会是一个严重的效率缺失吗?

我对Pygame不太了解,但我使用了SDL(Pygame的基础)

如果使用
Surface.blit()

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


我猜您将有一个游戏循环,该循环将更新游戏状态(如有必要,更改精灵的当前图像),然后使用其状态绘制精灵。

以下是一个愚蠢的示例,当您按下左/右键时,精灵表的两个前图像之间会出现重叠:

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次

编写一个简化工作的sprite类也很方便。您可以在构造函数中传递精灵帧的大小,并且可以使用类似于
update()
draw()
的方法,这些方法将自动执行选择下一帧、闪烁精灵等工作


Pygame似乎为此提供了一个基类:。

老兄,你唯一要做的就是离开

导入pygame和所有其他需要的东西 键入代码和内容…………然后 当你要做精灵的时候

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))
就这样!!!!但这并不是结束。如果你这么做的话,你就不会有精灵了
要移动它,你需要

所以你是说我要用一张图片来显示整个精灵表,并让它在每个刻度上显示一个精灵部分?如果精灵是150p高,100px宽,代码会是什么样子?太棒了。这非常有效。现在。我在想。如果是这样的话。我会让它基本上作为一个网格类型的系统运行。工作表上的左和右是特定动作,然后循环一定数量的帧?我会手动设置每个动作的帧数。很抱歉,我不理解你的问题。代码只是说,每个数字的变化都是多少个精灵空间。因此,在我的代码(上面链接)中,我有用于运行和动作框架的代码。但它们并不活跃。是否有一种方法可以在精灵编号设置后让另一个代码循环向下。。。为了制作一个动作的动画。例如假设“1”向左运行。动画是一个4帧的循环。因此,设置“1”后,它会向下循环3个精灵,然后返回到第一个精灵,直到指定了另一列。我使用pygame已经有一段时间了,但我在本教程中遇到了一些运气:本课程:出于好奇,你在用哪本书?由于缺乏时间和材料,我最终放弃了。这有点可笑。我也发现了绿巨人实验的东西。我试着让它向上、向下、向左、向右移动,但我一直没能做到。书:McGugan-用Python和Pygame开始游戏开发我用它做了这个:包括图片