최근 Kivy를 다운로드 받았는데 파이 게임과 코코스를 사용해 보았지만 결코 기초를 얻을 수 없었습니다. Kivy를 사용하면 쉽게 이해할 수있었습니다.LOCAL 변수에 액세스하려면 전역 변수를 사용해야합니다 (이유는 없습니다). python; Kivy
내 문제는, 나는 탁구 게임을 만들었고, 탁구 공을 멈추고 일시 중지가 해제되면 (속도를 변경하여) 게임을 다시 시작하려고합니다. 당신이 코멘트에서 볼 수 있듯이 나는 글로벌 사용하지 않으면, 내가 할당 오류 전에 참조 얻을
class PongGame(Widget):
...
def _on_keyboard_down(self, keyboard, keycode, text, modifiers):
if keycode[1] == 'escape':
#Why doesnt it work without global?
#If I don't use a global i get "tempBallVelocity referenced before assignment
global tempBallVelocity
tempBallVelocity = self.ball.velocity
self.ball.velocity = 0,0
if keycode[1] == '`':
#Make the ball go again, thus exiting pause
#This is where the error occurs if I don't use global
self.ball.velocity = tempBallVelocity
:
여기 내 코드입니다. 하지만 그것은 지역 변수입니다. 왜 이런 일이 일어나고 있는지 이해할 수 없습니다.
누구든지 아이디어가 있습니까? 감사?
편집 : 모든 사람이 내 의도에서 분명히 보이는지 확인하기 위해 전 세계적으로 사용하고 싶지는 않지만 작동시킬 수있는 유일한 방법입니다. 전역 변수를 사용하지 않는 것이 좋습니다.
안녕하세요, 답변 주셔서 감사합니다. 'tempballVelocity'는 글로벌이 아닌 경우 작동하도록 설정할 수 없기 때문에 글로벌입니다. 나는 두 번째''if''를'elif'로 변경하고 전역을 제거했지만 문제는 남아 있습니다. 당신이 말하는 것은 .. if 문 안에서'tempBallVelocity'를 생성하기 때문에 if 문이 완료되면 삭제됩니다. 그렇다면이 문제를 어떻게 해결할 수 있는지 알고 계십니까? 메서드 외부에서'tempBallVelocity'를 생성하여 매개 변수로 전달하려고 시도했지만'_on_keyboard_down'은 5 개의 인수 만 취할 수 있습니다. 따라서이 메서드는 작동하지 않습니다. 어떤 아이디어? – Anteara
예, 변수가 블록 외부에서 더 이상 액세스 할 수 없습니다. 첫 번째'if' 전에'tempBallVelocity = 0'을 추가하십시오. 변수를 호출간에 영속적으로 유지하려면'self.tempBallVelocity'를 사용하여 인스턴스 변수로 만들고'__init__' 함수에서 초기화해야합니다. – Thelvyn
Wonderful, 전자는 효과가 없었지만 후자는 효과가있었습니다. 고맙습니다, 고마워요. 이제는 하나의 버튼 만 사용하여 일시 중지 및 일시 중지 해제 작업을 시도한 다음 해보십시오. 중첩 if 문을 사용하여 시도했지만, 첫 번째 if 문이 실행되고 'paused' ='true '가 활성화되지만 NEXT if 문은 일시 중지되었는지 검사하고에서 일시 중지합니다. 정확한 시간. while 루프를 사용해 보았지만 같은 일이 발생합니다. 새로운 질문을하거나 기존 질문을 업데이트하는 것이 현명하다고 생각하십니까? – Anteara