python - Pygame 内存错误

标签 python memory audio pygame

嗨,我写了一个简单的 block 收集程序,在我添加声音之前它工作得很好而且很花哨。然后突然间我得到了一个 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

关于python - Pygame 内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8690301/

相关文章:

UTF-16-LE 文件的 Python 字符串替换

python - 按特定顺序对 Pandas DataFrame 中的列进行排序

python - SQLAlchemy SSL SYSCALL超时应对机制

java - 使用SoundPool、Timer和TimerTask每分钟播放一次随机声音

android - 停止声音服务

winapi - 在 Windows 上播放任意声音?

python - 删除 dataframe 列时 pandas 内存泄漏?

c++ - 将模板类型名转换为 uint64

c++ - 测量cpp中的函数内存使用情况

java - 在 Java 中,是否可以增加 JVM 的可用内存和/或杀死其他 Java 程序?