2014-03-02 2 views
0

안녕하세요 저는 키 누를 때 배경색을 변경하는 간단한 프로그램을 만들려고하고 있지만 충돌 만합니다. 그것은 내 루프와 함께 할 수 있지만 정말 충돌 이유를 이해하지 않습니다.프로그램 충돌 이유가 확실하지 않습니다.

감사

import sys, pygame, random, time 
from threading import Thread 
pygame.init() 

black = (0, 0, 0) 
white = (255, 255, 255) 
green = (0, 100, 0) 
red = (255, 0, 0) 
Colour = (0,0,0) 
size = width, height = 350, 350 
screen = pygame.display.set_mode(size) 

Running = True 
while True: 
    key = pygame.key.get_pressed() 

    if key[pygame.K_ESCAPE]: # Escape key 
     Running = False 
    elif key[pygame.K_DOWN]: # down key 
     print("down") 
     Colour = red 

    elif key[pygame.K_UP]: # up key 
     print("h") 
     Colour = black 

    elif key[pygame.K_RIGHT]: # right key 
     Colour = green 

     print("h") 
    elif key[pygame.K_LEFT]: # left key  
     Colour = white 

     print("h") 

    pygame.draw.rect(screen, Colour, pygame.Rect(0, 0, width, height))  
    pygame.display.update() 
    pygame.display.flip() 
+0

충돌이 발생하면 어떤 오류 메시지가 나타 납니까? –

+0

아무 것도. 창은 응답하지 않습니다. 그게 내가 얻지 못하는거야. –

답변

0

두 가지 :

당신은 버그가 : 당신이 while Running 대신 while True를 테스트하기 때문에 영원히 갈 동안 while 루프. while Running으로 변경하거나 escape 키를 테스트 한 후 break while 루프를 종료 할 수 있습니다.

또한 모든 파이 게임 예제를 살펴보면 이벤트 검사기가 있습니다. 그것 없이는 파이 게임이 얼어 버린다. 추가하면 모든 것이 부드럽습니다.

다음은 수정 된 사람들의 모두 : 당신은 당신이 창을 종료하려면 파이 게임이 알고있는 방법을 놓치고

import sys, pygame, time 
pygame.init() 

size = 350, 350 
screen = pygame.display.set_mode(size) 

Running = True 
while Running: # <----- changed this from True to Running 
    time.sleep(0.03) # avoid blasting the CPU. I think pygame.time.Clock also exists 

    # this makes pygame responsive 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      Running = False # <---- or you could just break 

    # from here is as you originally wrote 
    key = pygame.key.get_pressed() 
    if key[pygame.K_ESCAPE]: 
     print('exit') 
     Running = False # <---- or you could just break 

pygame.quit() 
sys.exit() 
1

. 대신 key = pygame.key.get_pressed() 사용하고의 :

for event in pygame.event.get(): 
    if event.type == QUIT: 
     pygame.quit() 
     sys.exit() 
    if event.type == KEYDOWN: 
     if event.key == K_ESCAPE: 
      pygame.quit() 
      sys.exit 
     if event.key == K_UP: 
      Colour = black 
     if event.key == K_DOWN: 
      Colour = red 
     if event.key == K_LEFT: 
      Colour = white 
     if event.key == K_RIGHT: 
      Colour = green 

을 프로그램이 예를 들어, 시간을 처리하기 위해 당신은 또한 방법이 필요합니다 당신이 볼 수있는 것보다 빨리 달릴 수는 없습니다.

clock.tick(FPS) 

당신이 동일한 숫자로 FPS를 설정 :는 while 루프의 맨 끝에이

clock = pygame.time.Clock() 

실행 : 당신은 당신의 코드 상단에이 변수를 설정하여이 작업을 수행 할 수 있습니다 초당 원하는 프레임 수입니다.

Running = True 변수를 프로그램에서 제거 할 수도 있습니다. 그걸 실행시켜야합니다. 행운을 빕니다! 아래 질문을하십시오.

관련 문제