2016-05-09 3 views
2

Я пытаюсь сделать коробку на экране с помощью клавиш со стрелками. Хотя, когда я нажимаю клавиши со стрелками, ничего не происходит. Поскольку я не вижу, где я делаю что-то неправильно, и я не могу найти визуализатор, поддерживающий pygame, я должен буду вас спросить. Вот код:Проблема с событиями клавиатуры или другими

import pygame, sys 

FPS = 60 
Clock = pygame.time.Clock() 

pygame.init() 

SURF = pygame.display.set_mode((600, 700)) 
pygame.display.set_caption("BOX GAME V1.0") 

RED = (255, 0, 0) 
WHITE = (255, 255, 255) 
BLACK = (0, 0, 0) 

box_x = 50 
box_y = 50 

box = (box_x, box_y, 50, 50) 

while True: 
    SURF.fill(BLACK) 

    pygame.draw.circle(SURF, RED, (200, 150), 25) 
    pygame.draw.rect(SURF, WHITE, box) 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       box_x -= 20 
      elif event.key == pygame.K_RIGHT: 
       box_x += 20 
      elif event.key == pygame.K_UP: 
       box_y -= 20 
      elif event.key == pygame.K_DOWN: 
       box_y += 20 



    pygame.display.update() 
    Clock.tick(FPS) 
+0

Вы пытались распечатать, когда находитесь в событии 'for for pygame.event.get()' loop? –

+0

Не думал об этом. Благодаря! Я попробую! –

ответ

3

Я предполагаю, что игра проходит, и коробка не двигается, несмотря на вход на клавиатуре. Если я прав, то это факт, что вы не обновляете позицию окна каждый раз через цикл while.

Линия pygame.draw.rect(SURF, WHITE, box) указывает поле, которое вы определяете перед началом игрового цикла, но позиция этого окна не обновляется. Просто обновите позицию поля перед ее рисованием. Это можно сделать, переместив box = (box_x, box_y, 50, 50) в начало игрового цикла.

while True: 
    box = (box_x, box_y, 50, 50) 

    SURF.fill(BLACK) 
    pygame.draw.circle(SURF, RED, (200, 150), 25) 
    pygame.draw.rect(SURF, WHITE, box) 

    ### key press logic