#!/usr/bin/python # -*- mode: python; Encoding: utf-8; coding: utf-8 -*- # Last updated: <2017/09/21 18:59:28 +0900> u""" pi3d input keyboard with pygame or InputEvents sample. Sample script to get keyboard input. Move the sprite up, down, left and right with WASD key or cursor key. use pygame.key.get_pressed / pi3d.InputEvents. Press ESC key to exit. Windows10 x64 + Python 2.7.12 32bit + pi3d 2.21 + pygame 1.9.3 Author : mieki256 License : CC0 """ from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals import pi3d import pygame class KeyboardStatus(object): u"""Keyboard status.""" # referenc : # pi3d/event/Keys.py # https://www.pygame.org/docs/ref/key.html keys_list = { "KEY_ESC": pygame.K_ESCAPE, "KEY_A": pygame.K_a, "KEY_B": pygame.K_b, "KEY_C": pygame.K_c, "KEY_D": pygame.K_d, "KEY_E": pygame.K_e, "KEY_F": pygame.K_f, "KEY_G": pygame.K_g, "KEY_H": pygame.K_h, "KEY_I": pygame.K_i, "KEY_J": pygame.K_j, "KEY_K": pygame.K_k, "KEY_L": pygame.K_l, "KEY_M": pygame.K_m, "KEY_N": pygame.K_n, "KEY_O": pygame.K_o, "KEY_P": pygame.K_p, "KEY_Q": pygame.K_q, "KEY_R": pygame.K_r, "KEY_S": pygame.K_s, "KEY_T": pygame.K_t, "KEY_U": pygame.K_u, "KEY_V": pygame.K_v, "KEY_W": pygame.K_w, "KEY_X": pygame.K_x, "KEY_Y": pygame.K_y, "KEY_Z": pygame.K_z, "KEY_0": pygame.K_0, "KEY_1": pygame.K_1, "KEY_2": pygame.K_2, "KEY_3": pygame.K_3, "KEY_4": pygame.K_4, "KEY_5": pygame.K_5, "KEY_6": pygame.K_6, "KEY_7": pygame.K_7, "KEY_8": pygame.K_8, "KEY_9": pygame.K_9, "KEY_UP": pygame.K_UP, "KEY_DOWN": pygame.K_DOWN, "KEY_LEFT": pygame.K_LEFT, "KEY_RIGHT": pygame.K_RIGHT, "KEY_SPACE": pygame.K_SPACE } class PygameKeyStatus(object): u"""Keyboard status with pygame.""" def __init__(self): """Init.""" pygame.init() def update(self): """Update.""" pygame.event.pump() self.keys = pygame.key.get_pressed() pygame.event.clear() def key_pressed(self, key_str): """Get key press state. @param key_str key kind string @return True or False """ return self.keys[KeyboardStatus.keys_list[key_str]] def close(self): """Close.""" pygame.quit() class Pi3dInputKeyState(object): """Keyboard status width pi3d.InputEvents.""" def __init__(self): """Init.""" self.inputs = pi3d.InputEvents() def update(self): """Update.""" self.inputs.do_input_events() def key_pressed(self, key_str): """Get key press state. @param key_str key kind string @return True or False """ return (self.inputs.key_state(key_str) != 0) def close(self): """Close.""" pass def __init__(self): """Init.""" self.keyboard = pi3d.Keyboard() if pi3d.USE_PYGAME: self.state = KeyboardStatus.PygameKeyStatus() else: self.state = KeyboardStatus.Pi3dInputKeyState() def update(self): """Update.""" self.pikey = self.keyboard.read() self.state.update() def key_pressed(self, key_str): """Key press check. @param key_str key kind @return True or False """ return self.state.key_pressed(key_str) def esckey_pressed(self): """ESC key press check. @return True or False """ return (self.pikey == 27 or self.key_pressed("KEY_ESC")) def close(self): u"""Close.""" self.keyboard.close() self.state.close() display = pi3d.Display.create(w=640, h=480, frames_per_second=60) shader = pi3d.Shader("uv_flat") camera = pi3d.Camera(is_3d=False) x, y, z = 0.0, 0.0, 20.0 tex = pi3d.Texture("airplane_01_64x64.png", mipmap=False) spr = pi3d.ImageSprite(tex, shader, w=64, h=64, x=x, y=y, z=z) display.add_sprites(spr) inputs = KeyboardStatus() while display.loop_running(): inputs.update() spd = 6.0 if inputs.key_pressed("KEY_W") or inputs.key_pressed("KEY_UP"): spr.translateY(spd) if inputs.key_pressed("KEY_S") or inputs.key_pressed("KEY_DOWN"): spr.translateY(-spd) if inputs.key_pressed("KEY_A") or inputs.key_pressed("KEY_LEFT"): spr.translateX(-spd) if inputs.key_pressed("KEY_D") or inputs.key_pressed("KEY_RIGHT"): spr.translateX(spd) if inputs.esckey_pressed(): inputs.close() display.destroy() break