2013-12-19 3 views
0

N.B. 이것은 모든 코드가 아닙니다. 내가 정말로하고 싶은 것은 플레이어 1 키 (wasd)와 플레이어 2 키 (위, 아래, 오른쪽, 왼쪽)를 묶어서 동시에 그들을 누르기 때문에 두 플레이어를 따로 따로 동시에 제어 할 수 있습니다 (플레이어 2는 (경우 'W': 이것은 내가 그것을 할하기 시작했다바인드 키를 동시에 누를 수 있도록

def p1_move_N(self): 
    global p1_y 
    canvas.create_line(p1_x, p1_y, p1_x, (p1_y-line_length), width=line_width, fill=p1_colour) 
    p1_y = p1_y - line_length 

def p1_move_S(self): 
    global p1_y 
    canvas.create_line(p1_x, p1_y, p1_x, p1_y+line_length, width=line_width, fill=p1_colour) 
    p1_y = p1_y + line_length 

def p1_move_E(self): 
    global p1_x 
    canvas.create_line(p1_x, p1_y, p1_x + line_length, p1_y, width=line_width, fill=p1_colour) 
    p1_x = p1_x + line_length 

def p1_move_W(self): 
    global p1_x 
    canvas.create_line(p1_x, p1_y, p1_x - line_length, p1_y, width=line_width, fill=p1_colour) 
    p1_x = p1_x - line_length 

p1_press = None # which key is the player holding down? 

def change_press(key, up_down): 
    if up_down == "up": 
     p1_press=None 
    else: 
     p1_press=key.keysym 


while(True): 
    print(p1_press) 

window.bind("<KeyPress-w>", change_press('down')) 
window.bind("<KeyPress-s>", change_press('down')) 
window.bind("<KeyPress-a>", change_press('down')) 
window.bind("<KeyPress-d>", change_press('down')) 
window.bind("<KeyRelease-w>", change_press('up')) 
window.bind("<KeyRelease-s>", change_press('up')) 
window.bind("<KeyRelease-a>", change_press('up')) 
window.bind("<KeyRelease-d>", change_press('up')) 

하지만 난 내 모든 코드가 다시 발생 사실을 디버깅 할 수없는 것 : 그래서 여기 코드)) 내 현재 코드입니다 키 누름)

None 
    Nonew 
    wNone 
    None 
    Nonew 

이 루프에서입니다

그것은 반환해야합니다 :

None 
w 
None 
None 
w 
None 

도움이되었습니다.

+0

은 Tkinter, pygame 또는 무엇입니까 ??? –

+0

이것은 TKinkers 게임입니다. 미안하지만 ... – user3118523

답변

1

이렇게하면 : window.bind("<KeyPress-w>", change_press('down')), tkinter는 change_press('down') 함수를 호출하고 반환되는 것이 무엇이든지 바인딩과 관련이 있습니다. 즉, 키를 누를 때가 아니라 초기화 할 때 함수를 호출하는 것입니다.

간단한 수정은 다음과 같이 당신의 바인딩을 변경하는 것입니다 :

window.bind("<KeyPress-w>", lambda event: change_press('down')) 

람다 (가 바운드 함수를 호출 할 때 Tkinter에 의해 제공) 인수로 이벤트를 소요 새로운 익명 함수를 만듭니다 . 이 새 함수는 바인딩과 연결됩니다. 바인딩이 실행되면 change_press 함수를 호출합니다.

또한, 문이 컬렉션은 지금까지 나타나지에서 GUI를 방지, 영원히 실행됩니다 : 당신은 그 코드를 제거해야

while(True): 
    print(p1_press) 

.

+0

고마워요.하지만 "key release" – user3118523