什么是PyGame精灵,他们做了什么?

时间:2015-09-22 12:39:53

标签: python python-3.x pygame sprite

我已经找到了很多关于如何以及何时使用精灵的教程,但我仍然不知道它们是什么或者它们做了什么。 默认的想法似乎是您将pygame.sprite.Sprite类子类化,并将rectimage属性添加到类中。 但是为什么我需要继承Sprite类,它如何影响我的代码? 无论如何我可以这样做:

class MySprite:  # No subclassing!
    def __init__(self, image):
        self.image = image
        self.rect = image.get_rect()

似乎工作得很好。 我也试过了源代码,但是couldn't find a sprite file

2 个答案:

答案 0 :(得分:2)

Sprites只是游戏中可以与其他精灵或其他任何东西互动的对象。这些可以包括角色,建筑物或其他游戏对象。

Sprites有一个子类的原因更方便。当一个对象继承自sprite.Sprite类时,可以将它们添加到精灵组中。

示例:

import pygame

class car(sprite.Sprite):
    def __init__(self):
        sprite.Sprite.__init__() # necessary to initialize Sprite class
        self.image = image # insert image
        self.rect = self.image.get_rect() #define rect
        self.rect.x = 0 # set up sprite location
        self.rect.y = 0 # set up sprite location
    def update(self):
        pass # put code in here

cars = pygame.sprite.Group()# define a group

pygame.sprite.Group.add(car())# add an instance of car to group

除非从sprite类继承,否则我无法向sprite组添加sprite。这很有用,因为我现在可以执行更新组中所有精灵的操作,并使用一个函数绘制所有精灵:

cars.update() #calls the update function on all sprites in group
cars.draw(surface) #draws all sprites in the group

我也可以使用组进行碰撞检测:

# check to see if sprite collides with any sprite in the car group
collided = pygame.sprite.Sprite.spritecollide(sprite, cars, False)
  

注意:在上面的代码pygame.sprite.Sprite.spritecollide中返回一个列表。

总之,sprite类对于处理大量精灵很有用,否则这些精灵会需要更多代码来管理。 Sprite类提供了一组通用变量,可用于定义精灵。

答案 1 :(得分:0)

当你继承子类时,你继承了类中的方法和函数。 pygame.sprite类包含许多预先编写的方法,您可以在不必手动重新编码所有内容的情况下调用这些方法。

如果你决定像上面那样创建一个孤立/独立的MySprite类,你将无法使用任何预先编写的代码。只要你能完全充实自己的所有课程功能,那就没问题了。