2014-10-23 2 views
0

나는 몇 시간 동안이 문제를 해결하려고 노력해왔다. main.py라는 라벨이 붙은 스크립트와 다른 menu.py라는 스크립트가 있습니다. main.py에서 변수를 사용하여 menu.py의 동작을 제어하려고합니다. 변수는 마지막 키보드 입력으로 설정되며, main.py 스크립트에서는 예상대로 수행됩니다. 그러나, 내가 menu.py에서 그것을하려고 할 때, 아무 일도 일어나지 않고 에러가 던져지지 않으며, 사용하려고했던 원래 애니메이션도 발생하지 않습니다. 나는 읽는 것을 더 쉽게하기 위해 문제의 일부라고 생각지 않는 코드 부분을 생략했다.파이 게임에서 키보드 입력하기

main.py 코드 :

#!/usr/bin/env python 

WIDTH = 512 
HEIGHT = 416 
FPS = 20 
VERSION = "0.0.3" 
FULLSCREEN = False 

import pygame,sys,os,time 

pygame.init() 
display = pygame.display.set_mode((WIDTH,HEIGHT), pygame.DOUBLEBUF) 

alpha_display = display.convert_alpha() 
fpsClock = pygame.time.Clock() 
keyPressed = 0 

sys.path.insert(0, "scripts/") 
from pygame.locals import * 
from media import * 
import color 
import menu 

def run(): 
    display.fill(color.BLACK) 

    if (menu.active == True): 
     menu.update() 

    else: 
     pass 

while (True): # Code to run loop 
    for event in pygame.event.get(): 
     if (event.type == QUIT): 
      pygame.quit() 
      sys.exit() 

     if (event.type == pygame.KEYDOWN): 
      time.sleep(0.1) 
      keyPressed = event.key 
     elif (event.type == pygame.KEYUP): 
      keyPressed = 0 

    run() 
    pygame.display.update() 
    fpsClock.tick(FPS) 

menu.py 코드 :

from __main__ import * 

page = "main" 
selObj = 1 
active = True 

class o: 
    dee = False 
def update(): 
    if o.dee == False: 
     o.dee = True 
     global page 
     global selObj 
     global active 

    if page == "main": # Main menu 
     if (keyPressed == pygame.K_RETURN): 
      if (selObj == 1): 
       page = "singleplayer" 
      elif (selObj == 2): 
       pygame.quit() 
       sys.exit() 
     if (keyPressed == pygame.K_UP): 
      selObj -= 1 
     elif (keyPressed == pygame.K_DOWN): 
      selObj += 1 

     if (selObj >= 3): 
      selObj = 1 
     elif (selObj <= 0): 
      selObj = 2 

     if (selObj == 1): 
      print("test1" 
     elif (selObj == 2): 
      print("test2") 
+0

뭘 잘못했는지 모르지만 __main__ import *에서 이상하게 보입니다. 주요 수입 *에서 시도해 보셨습니까? 또한이 상용구 코드를 권장 할 수 있습니다. http://www.petercollingridge.co.uk/pygame-physics-simulation/creating-pygame-window –

+0

@robert 코드 줄 "from __ main __ import *"는 내가 아는 한 그것을 가져 오는 스크립트. – Juice

답변

0

나는이 문제를 발견했다 생각합니다. update() 함수에서 파이 게임 이벤트를 찾고 (keypressed을 사용하여) 파이 게임 이벤트 루프에서이 함수를 호출하지 마십시오. 나는 당신이 외출 한 라인의 어딘가가 keyPressed을 초기화하는지 알지 못하지만, 당신이 보지 않는 것으로부터 (ValueError 예외를 발생시켜야합니다). menu.py 파일에서 keyPressed을 초기화했다면 변경된 값을 main.py에서 menu.py로 전송하지 않습니다. 이 문제를 해결하려면 이벤트 루프 내에서 menu.update()으로 전화하고 keyPressed을 인수로 사용하는 것이 좋습니다.

from __main__ import * 

page = "main" 
selObj = 1 
active = True 

class o: 
    dee = False 
def update(keyPressed):#<----# 
    if o.dee == False: 
     o.dee = True 
     global page 
     global selObj 
     global active 

    if page == "main": # Main menu 
     if (keyPressed == pygame.K_RETURN): 
... 

및 주요 파일에

:

... 
def run(): 
    display.fill(color.BLACK) 

    if (menu.active == True): 
     menu.update(keyPressed)#<-------# 

    else: 
     pass 
    while (True): # Code to run loop 
      for event in pygame.event.get(): 
       if (event.type == QUIT): 
        pygame.quit() 
        sys.exit() 

       if (event.type == pygame.KEYDOWN): 
        time.sleep(0.1) 
        keyPressed = event.key 
       elif (event.type == pygame.KEYUP): 
        keyPressed = 0 
       menu.update(keyPressed)#<----# 
      run() 
      pygame.display.update() 
      fpsClock.tick(FPS) 
    ... 

당신은 당신의 메뉴마다 마우스 움직임을 재설정하지 않습니다 있는지 확인하기 위해 추가 코드를 수정해야 할 수도 있습니다. 도움이 되었기를 바랍니다.