嗨,我编写了一个简单的块收集程序,在我添加声音之前,它的工作原理还不错。然后突然我得到了MemoryError,这是我以前从未见过的东西。
我的代码与声音(wav)文件一起附加,这似乎是问题所在。任何帮助都将是非常有用的,是的,代码和声音以及大量其他程序和图片均在同一个文件夹中。
import pygame import random import pygame.mixer winsound=pygame.mixer.Sound('winning.wav') collectsound=pygame.mixer.Sound('blip.wav') #Define colors black = ( 0, 0, 0) white = ( 255, 255, 255) red = ( 255, 0, 0) #Class represents ball, derives from Sprite class in pygame class Block(pygame.sprite.Sprite): #Constructor. Pass in the color of the block and its x and y pos. def __init__(self, color, width, height): # Call the parent class (Sprite) constructor pygame.sprite.Sprite.__init__(self) # Create an image of the block, and fill it with a color. # This could also be an image loaded from the disk. self.image = pygame.Surface([width, height]) self.image.fill(color) # Fetch the rectangle object that has the dimensions of the image # image. # Update the position of this object by setting the values # of rect.x and rect.y self.rect = self.image.get_rect() # Initialize Pygame pygame.init() winsound=pygame.mixer.Sound('winning.wav') collectsound=pygame.mixer.Sound('blip.wav') #Set width and height of screen screen_width=700 screen_height=400 screen=pygame.display.set_mode([screen_width, screen_height]) pygame.display.set_caption('Block Attack!') #List of sprites. Each block is added to this list. List is managed by RenderPlain() block_list=pygame.sprite.RenderPlain() #List of every sprite all_sprites_list=pygame.sprite.RenderPlain() for i in range(50): #create instance of block block=Block(black,20,14) #set random location for the block block.rect.x=random.randrange(screen_width) block.rect.y=random.randrange(screen_height) #Add the block to the list of objects block_list.add(block) all_sprites_list.add(block) #Create red player block player=Block(red,20,15) all_sprites_list.add(player) done=False clock=pygame.time.Clock() score=0 #-------Main Program Loop------- while done==False: for event in pygame.event.get(): #User did something if event.type==pygame.QUIT: #If user clicked close done=True #Flag that we are done so we exit this loop #Clear screen screen.fill(white) #Get current mouse position. This returns the position as a list of two numbers pos=pygame.mouse.get_pos() #Fetch x and y out of list, like letters out of strung, set player object #to location of the mouse player.rect.x=pos[0] player.rect.y=pos[1] #Check if player block has collidied with anything...were still in a loop block_hit_list=pygame.sprite.spritecollide(player, block_list, True) #Check list of collisions. if len(block_hit_list) >0: score +=len(block_hit_list) print( score ) collectsound.play() elif score==50: print('YOU WIN!!\n') done=True winsound.play() #Draw all the sprites all_sprites_list.draw(screen) #Limit to 60 frames per second clock.tick(60) #Update screen pygame.display.flip() pygame.quit()
所以当我运行代码时我得到了错误
Traceback (most recent call last): File "/Users/zackbaker/Desktop/PythonFolder/BlockCollecter.py", line 4, in <module> sound=pygame.mixer.Sound('winning.wav') MemoryError
我认为您必须先初始化调音台,然后才能使用声音。
pygame.mixer.init(44100, -16, 2, 2048) # Read the docs to know what these numbers are