私は pygame ウィンドウを開き、次のような pyopengl 呼び出しでいくつかのものを描画します:
def run(facets, SCREEN_SIZE=(800, 600)):
pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE, HWSURFACE|OPENGL|DOUBLEBUF)
glViewport(0, 0, SCREEN_SIZE[0], SCREEN_SIZE[1])
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60.0, float(SCREEN_SIZE[0])/SCREEN_SIZE[1], .1, 1000.)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
clock = pygame.time.Clock()
glMaterial(GL_FRONT, GL_AMBIENT, (0.1, 0.1, 0.1, 1.0))
glMaterial(GL_FRONT, GL_DIFFUSE, (1.0, 1.0, 1.0, 1.0))
pygame.mouse.set_visible(False)
pygame.event.set_grab(True)
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
pygame.display.quit()
print "returning..."
return
if event.type == KEYUP and event.key == K_ESCAPE:
pygame.quit()
pygame.display.quit()
print "returning..."
return
pygame.mouse.set_visible(False)
# Clear the screen, and z-buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
# other game loop code here, e.g. rendering the facets
# and moving the viewport around.
私が行った pygame と pyopengl の呼び出しのほとんどすべてを残しておきました。
私がしたいこと: bpython/IDLE/interactive python プロンプトでセッションを実行し、run()
何かを呼び出して見て、ヒットESC
してウィンドウを閉じて、プロンプトに戻ります。
実際に何が起こるか:対話型セッションを実行し、データ構造を構築し、 を呼び出しrun()
、内容を確認し、ヒットESC
するとウィンドウが閉じますが、すぐに再度開きます。抜け出す唯一の方法は、pythonプロセスを強制終了することです(これにより、インタラクティブセッションが強制終了されるだけでなく、bpythonでシェルウィンドウが操作不能になります)。注:現在は機能していないシェルでも結果が表示print "returning..."
されます。
私はこれらの質問を見てきました:
しかし、彼らは私をかなり偏執的にするだけです.pygameは本当にリソースリークが多いので、混乱を解消するためにpythonを終了する必要がありますか?
また、return
コールが返されない原因となっているダーク マジックは何ですか?
最後に、これを希望どおりに機能させる方法を誰か教えてもらえますか? この 3D レンダラーを使用して他のコードをデバッグし、自分が何をしているかを確認する必要があるだけなので、サポートされていない非常に邪悪なハックでも問題ありません。