1

私は 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 レンダラーを使用して他のコードをデバッグし、自分が何をしているかを確認する必要があるだけなので、サポートされていない非常に邪悪なハックでも問題ありません。

4

2 に答える 2

0

答えは:常にすべてのコードを投稿してください!

これは呼び出しコードのインデント エラーで、run()何度も呼び出していました。pygameウィンドウは、インタラクティブなプロンプトに完全に満足しているように見えます。

ESC9回押す忍耐力があれば、これも見られたでしょう。

于 2012-10-19T14:04:44.523 に答える
-1

いつも使っています

sys.exit()

sysをインポートすることを忘れないでください

于 2012-10-19T14:46:31.247 に答える