понедельник, 11 апреля 2011 г.

Pygame. Использование мышки и клавиатуры.

В сегодняшнем примере мы рассмотрим принципы работы pygame с устройствами ввода, то есть мышкой и клавиатурой.

Чтоб считать состояние клавиатуры мы пробегаемся по событиям и смотрим не появилось ли событие KEYDOWN или KEYUP. Если они появились, то мы смотрим из этого события какие кнопки были нажаты и обновляем положения прямоугольничка на экране.

Чтобы узнать координаты мышки нужно вызвать метод pygame.mouse.get_pos(), который возвращает координаты курсора.

pygame_input.py:
import pygame

# Определяем несколько цветов
black    = (   0,   0,   0)
white    = ( 255, 255, 255)
green    = (   0, 255,   0)
red      = ( 255,   0,   0)

# Функция для очистки экрана
def draw_background(screen):
screen.fill(white)

# Функция для отрисовки нашего персонажа
def draw_item(screen, color, x, y):
pygame.draw.rect(screen, color, [0+x, 0+y, 30, 10], 0)
pygame.draw.circle(screen, black, [15+x, 5+y], 7, 0)

# Инициализируем pygame
pygame.init()

screen = pygame.display.set_mode([640, 480])

# Скорость в пикселях за кадр
x_speed = 0
y_speed = 0

# Текущие координаты
x_coord = 10
y_coord = 10

clock = pygame.time.Clock()

done=False
while done == False:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True # Если игрок закрыл окно -- прерываем цикл.

# Обрабатываем клавиатуру
# Если игрок нажал каку-нибудь кнопку -- начинаем движение
if event.type == pygame.KEYDOWN:
# Выясняем какая именно кнопка была нажата
if event.key == pygame.K_LEFT:
x_speed =-3
if event.key == pygame.K_RIGHT:
x_speed = 3
if event.key == pygame.K_UP:
y_speed = -3
if event.key == pygame.K_DOWN:
y_speed = 3

# Если кнопка была отпущена, то и движение надо прекратить
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
x_speed = 0
if event.key == pygame.K_RIGHT:
x_speed = 0
if event.key == pygame.K_UP:
y_speed = 0
if event.key == pygame.K_DOWN:
y_speed = 0

# Обрабатываем движение мышки
pos = pygame.mouse.get_pos()
mouse_x, mouse_y = pos[0], pos[1]

# Двигаем нашего игрока в соответствии
# нажатым кнопкам.
x_coord += x_speed;
y_coord += y_speed;

draw_background(screen)

# Рисуем двух игроков -- зеленый управляется клавиатурой,
# а красный -- мышкой
draw_item(screen, green, x_coord, y_coord)
draw_item(screen, red, mouse_x, mouse_y)

#Теперь выводим все что мы нарисовали из буффера на экран
pygame.display.flip()
clock.tick(60)
pygame.quit()

Комментариев нет:

Отправить комментарий