首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pygame MemoryError

Pygame MemoryError
EN

Stack Overflow用户
提问于 2012-01-01 04:08:22
回答 1查看 3.8K关注 0票数 4

嗨,我写了一个简单的区块收集程序,它工作得很好,直到我添加了声音。然后,突然我得到了一个MemoryError,这是我以前从未见过的东西。

我的代码与似乎是问题的声音(Wav)文件一起附加。任何帮助都是很棒的,是的,代码和声音都在同一个文件夹中,还有大量的其他程序和图片等。

代码语言:javascript
复制
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()

因此,当我运行代码时,我得到以下错误

代码语言:javascript
复制
Traceback (most recent call last):
  File "/Users/zackbaker/Desktop/PythonFolder/BlockCollecter.py", line 4, in <module>
    sound=pygame.mixer.Sound('winning.wav')
MemoryError
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-01 04:19:06

我认为在使用声音之前,你必须先初始化混音器。

代码语言:javascript
复制
pygame.mixer.init(44100, -16, 2, 2048)
# Read the docs to know what these numbers are
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8690301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档