2015-12-13 14 views
-2

,我得到的错误是当我将我的PLAYER1和player2类我不断收到错误类型错误:参数1必须pygame.Surface,不是str的

File "C:\Users\Nicholas\PycharmProjects\MortalKombat\Fighting.py", line 149, in main 
allsprites.draw(screen) 
File "C:\Python32\lib\site-packages\pygame\sprite.py", line 475, in draw 
self.spritedict[spr] = surface_blit(spr.image, spr.rect) 
TypeError: argument 1 must be pygame.Surface, not str 

早些时候,我得到一个视频系统不初始化错误,并发布了一个问题,导致我在这个程序中导致我的主程序中的错误的问题。

我修复了这个错误,但是当我将player1,player2和记分板添加到pygame.sprites.Group()时出现了上面的错误。 Fighting.py的代码如下。我做

allsprites.draw(screen) 

,我还以为屏幕

screen = pygame.display.set_mode((900,400)) 

是pygame.Surface的说法,但我不知道海峡的意思。

import pygame 


class Scoreboard(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.lives = 5 
     self.score = 0 
     self.timeRem = 60 
     self.font = pygame.font.SysFont("None", 50) 
     self.RED = (255, 0, 0) 
     self.GREEN = (0, 255, 0) 

    def update(self): 
     self.text = ("%d" % self.timeRem) 
     if self.timeRem > 20: 
      self.image = self.font.render(self.text, 1, self.GREEN) 
     else: 
      self.image = self.font.render(self.text, 1, self.RED) 
     self.rect = self.image.get_rect() 
     self.rect.center = (450,25) 


class Player1(pygame.sprite.Sprite): 

    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.player = "none" 
     self.player1Txt = open("Player1", "r") 
     self.image = self.player1Txt.read() 
     self.player1Txt.close() 
     self.player = pygame.image.load(self.image + "/walking0000.png") 
     self.player = self.player.convert() 
     self.player = pygame.transform.scale(self.player, (100,100)) 
     self.rect = self.player.get_rect() 
     self.rect.center = (150,100) 
     self.counter = 0 

    def update(self): 
     keys = pygame.key.get_pressed() 
     if keys[pygame.K_RIGHT]: 
      if Player2.rect.centerx > self.rect.centerx: 
       self.counter +=1 
       self.player = pygame.image.load(self.image + "/walking000" + str(self.counter) + ".png") 
       self.player = self.player.convert() 
       self.player = pygame.transform.scale(self.player, (100,100)) 
       self.rect.centerx += 5 
      elif Player2.rect.centerx < self.rect.centerx: 
       self.counter = 7 
       self.player = pygame.image.load(self.image + "/walking000" + str(self.counter) + ".png") 
       self.player = self.player.convert() 
       self.player = pygame.transform.scale(self.player, (100,100)) 
       self.rect.centerx += 5 
       self.counter -= 1 
      elif Player2.rect.centerx == self.rect.centerx: 
       self.counter +=1 
       self.player = pygame.image.load(self.image + "/walking000" + str(self.counter) + ".png") 
       self.player = self.player.convert() 
       self.player = pygame.transform.scale(self.player, (100,100)) 
       self.rect.centerx += 5 


class Player2(pygame.sprite.Sprite): 

    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.player = "none" 
     self.player2Txt = open("Player2", "r") 
     self.image = self.player2Txt.read() 
     self.player2Txt.close() 
     self.player = pygame.image.load(self.image + "/walking0000.png") 
     self.player = self.player.convert() 
     self.player = pygame.transform.scale(self.player, (100,100)) 
     self.rect = self.player.get_rect() 
     self.rect.center = (150,100) 
     self.counter = 0 

    def update(self): 
     keys = pygame.key.get_pressed() 
     if keys[pygame.K_d]: 
      if Player1.rect.centerx > self.rect.centerx: 
       self.counter +=1 
       self.player = pygame.image.load(self.image + "/walking000" + str(self.counter) + ".png") 
       self.player = self.player.convert() 
       self.player = pygame.transform.scale(self.player, (100,100)) 
       self.rect.centerx += 5 
      elif Player1.rect.centerx < self.rect.centerx: 
       self.counter = 7 
       self.player = pygame.image.load(self.image + "/walking000" + str(self.counter) + ".png") 
       self.player = self.player.convert() 
       self.player = pygame.transform.scale(self.player, (100,100)) 
       self.rect.centerx += 5 
       self.counter -= 1 
      elif Player1.rect.centerx == self.rect.centerx: 
       self.counter +=1 
       self.player = pygame.image.load(self.image + "/walking000" + str(self.counter) + ".png") 
       self.player = self.player.convert() 
       self.player = pygame.transform.scale(self.player, (100,100)) 

       self.rect.centerx += 5 


def main(): 

    pygame.init() 
    screen = pygame.display.set_mode((900, 400)) 

    background = pygame.image.load("arena.png") 
    background = pygame.transform.scale(background, screen.get_size()) 

    scoreboard = Scoreboard() 
    player1 = Player1() 
    player2 = Player2() 

    allsprites = pygame.sprite.Group() 
    allsprites.add(scoreboard) 
    allsprites.add(player1) 
    allsprites.add(player2) 

    counter = 0 
    counter2 = 0 
    clock = pygame.time.Clock() 
    keepGoing = True 

    while keepGoing: 
     clock.tick(30) 
     counter +=1 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       keepGoing = False 

     if counter%30 == 0: 
      counter2 += 1 
      if counter2 >= 60: 
       scoreboard.timeRem = 0 
      else: 
       scoreboard.timeRem -= 1 

     screen.blit(background, (0, 0)) 

     allsprites.update() 
     allsprites.draw(screen) 
     pygame.display.flip() 
    pygame.quit() 


if __name__ == "__main__": 
    main() 
+0

那么,为什么你打开一个txt文件? – ModoUnreal

+0

你好。请保持标题内容翔实,并避免在问题的任何地方添加任何形式的紧急/尽快求助。添加这个并不会让你的答案更快,但它确实会使编辑们做一些额外的工作。 – halfer

回答

1

我接过来一看,我觉得这一段代码导致错误:

self.player1Txt = open("Player1", "r") 
    self.image = self.player1Txt.read() 
    self.player1Txt.close() 

self.player2Txt = open("Player2", "r") 
    self.image = self.player2Txt.read() 
    self.player2Txt.close() 

现在我不知道为什么你正在计划阅读文本文件,但问题是,创建self.image时,你必须以这样的格式:

self.image = pygame.Surface([width, height]) 

如果您想使用的图像文件,你也可以做这样的事情:

self.image = pygame.transform.scale(player_image, (width, height)) 

,因为我认为这是你试图用文本文件做。

我希望这有助于!

+0

我正在读取从另一个文件创建的文件,但我使用了不同的方法,因为您说这是问题并修复了错误。谢谢 –

相关问题