从 class 构造函数在 pygame 中绘制精灵
drawing sprite in pygame from a class constructor
import pygame
pygame.init()
class PlayerNinja(pygame.sprite.Sprite):
x = 0
y = 0
width = 112
height = 102
def __init__(self, x, y):
self.x = x
self.y = y
super(PlayerNinja, self).__init__()
self.image = pygame.image.load("player.png")
.
.
.
###########################################################################
def main():
from PlayerNinja import *
print "Testing"
player = PlayerNinja(10, 10)
a = player.getX()
print "X: " + str(a)
player.setX(50)
b = player.getX()
print "new X: " + str(b)
player.setY(50)
c = player.getY()
print "Y: " + str(c)
screenWidth = 800
screenHeight = 700
screen = pygame.display.set_mode((screenWidth, screenHeight))
white = (255,255,255)
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
screen.fill(white)
screen.blit(player, (b, c))
pygame.display.flip()
if __name__ == "__main__": main()
当我 运行 main 时,我得到错误
screen.blit(player, b, c)
TypeError: argument 1 must be pygame.Surface, not PlayerNinja"
我尝试用 pygame.Surface
替换部分行。当我使用具有不同字符的相同格式 (screen.blit(player, (x,y))
) 时,它起作用了……我认为这是因为在这种情况下,我将图像加载到 class 的构造函数中,而另一次我没有使用 class。我不得不查找 super().__init__()
部分,所以也许这是其中的一部分?
你需要编码
screen.blit(player.image, (b, c))
因为 .blit
method need a pyagme.Surface
-object(加载的图像也是 PyGame 中的表面)作为第一个参数。您需要将表面实例传递给 .blit()
,它作为属性 self.image
.
存储在您的 PlayerNinja
精灵对象 ("player
") 中
其他部分(super().__init__()
)我觉得还不错。 :)
import pygame
pygame.init()
class PlayerNinja(pygame.sprite.Sprite):
x = 0
y = 0
width = 112
height = 102
def __init__(self, x, y):
self.x = x
self.y = y
super(PlayerNinja, self).__init__()
self.image = pygame.image.load("player.png")
.
.
.
###########################################################################
def main():
from PlayerNinja import *
print "Testing"
player = PlayerNinja(10, 10)
a = player.getX()
print "X: " + str(a)
player.setX(50)
b = player.getX()
print "new X: " + str(b)
player.setY(50)
c = player.getY()
print "Y: " + str(c)
screenWidth = 800
screenHeight = 700
screen = pygame.display.set_mode((screenWidth, screenHeight))
white = (255,255,255)
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
screen.fill(white)
screen.blit(player, (b, c))
pygame.display.flip()
if __name__ == "__main__": main()
当我 运行 main 时,我得到错误
screen.blit(player, b, c)
TypeError: argument 1 must be pygame.Surface, not PlayerNinja"
我尝试用 pygame.Surface
替换部分行。当我使用具有不同字符的相同格式 (screen.blit(player, (x,y))
) 时,它起作用了……我认为这是因为在这种情况下,我将图像加载到 class 的构造函数中,而另一次我没有使用 class。我不得不查找 super().__init__()
部分,所以也许这是其中的一部分?
你需要编码
screen.blit(player.image, (b, c))
因为 .blit
method need a pyagme.Surface
-object(加载的图像也是 PyGame 中的表面)作为第一个参数。您需要将表面实例传递给 .blit()
,它作为属性 self.image
.
PlayerNinja
精灵对象 ("player
") 中
其他部分(super().__init__()
)我觉得还不错。 :)