我已经找到了很多关于如何以及何时使用精灵的教程,但我仍然不知道它们是什么或者它们做了什么。
默认的想法似乎是您将pygame.sprite.Sprite
类子类化,并将rect
和image
属性添加到类中。
但是为什么我需要继承Sprite
类,它如何影响我的代码?
无论如何我可以这样做:
class MySprite: # No subclassing!
def __init__(self, image):
self.image = image
self.rect = image.get_rect()
似乎工作得很好。 我也试过了源代码,但是couldn't find a sprite file。
答案 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类,你将无法使用任何预先编写的代码。只要你能完全充实自己的所有课程功能,那就没问题了。