在Sublime Text 3中运行pygame时出现分段错误11

时间:2014-06-09 01:05:54

标签: python pygame sublimetext3

我使用的是Python 3.4.0,我使用的是Mac OSX 10.9.2。我在Sublime Text中将以下代码保存为sublimePygame。

import pygame, sys 
from pygame.locals import * 

pygame.init() 

#set up the window
DISPLAYSURF = pygame.display.set_mode((400, 300)) 
pygame.display.set_caption('Drawing') 

# set up the colors 
BLACK = ( 0, 0, 0) 
WHITE = (255, 255, 255) 
RED = (255, 0, 0) 
GREEN = ( 0, 255, 0) 
BLUE = ( 0, 0, 255)

# Draw on surface object
DISPLAYSURF.fill(WHITE)
pygame.draw.polygon(DISPLAYSURF, GREEN, ((146, 0), (291, 106), (236, 277), (56, 277), (0,        106))) 
pygame.draw.line(DISPLAYSURF, BLUE, (60, 60), (120, 60), 4) 
pygame.draw.line(DISPLAYSURF, BLUE, (120, 60), (60, 120)) 
pygame.draw.line(DISPLAYSURF, BLUE, (60, 120), (120, 120), 4) 
pygame.draw.circle(DISPLAYSURF, BLUE, (300, 50), 20, 0) 
pygame.draw.ellipse(DISPLAYSURF, RED, (300, 250, 40, 80), 1) 
pygame.draw.rect(DISPLAYSURF, RED, (200, 150, 100, 50)) 


pixObj = pygame.PixelArray(DISPLAYSURF) 
pixObj[480, 380] = BLACK 
pixObj[482, 382] = BLACK 
pixObj[48, 384] = BLACK 
pixObj[486, 386] = BLACK 
pixObj[488, 388] = BLACK 
del pixObj 

while True: # main game loop 
    for event in pygame.event.get(): 
        if event.type == QUIT: 
            sys.exit() 
            pygame.display.update()

我在终端中运行了代码,python窗口打开了一秒钟然后关闭。

我在终端出现了这个错误。

Traceback (most recent call last):
  File "sublimePygame", line 29, in <module>
    pixObj[480, 380] = BLACK 
IndexError: invalid index
Segmentation fault: 11

我检查了pygame文档,我的代码似乎没问题。我用Google搜索了错误, Segmentation Error 11 似乎是python中的一个错误,但我读到它已在Python 3.4.0中修复。

有人知道出了什么问题吗?

提前致谢!

编辑:Marius在程序中发现了这个错误,但是当我运行它时会打开一个空白的Python窗口而不是它应该是最开放的。有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:0)

我可以在代码中看到一个明确的错误,但我不确定是否会导致分段错误,这是一个更严重的错误。

您的代码中的错误是您创建了一个400x300窗口:

DISPLAYSURF = pygame.display.set_mode((400, 300))

然后尝试为超出该窗口范围的像素设置颜色值

pixObj[480, 380] = BLACK

同样,这可能不会导致分段错误。

答案 1 :(得分:0)

你的空白python窗口问题在这里:

while True: # main game loop 
    for event in pygame.event.get(): 
        if event.type == QUIT: 
            sys.exit() 
            pygame.display.update()
只有在激活QUIT时才会执行

pygame.display.update()。你需要删除一些缩进,使它在for循环之外,但在while循环中。