Full Joystick Example¶
joystick.py¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | """
This simple animation example shows how to move an item with the keyboard.
"""
import arcade
# Set up the constants
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
RECT_WIDTH = 50
RECT_HEIGHT = 50
MOVEMENT_MULTIPLIER = 5
DEAD_ZONE = 0.05
class MyApplication(arcade.Window):
"""
Main application class.
"""
def __init__(self, width, height):
super().__init__(width, height, title="Keyboard control")
self.player = None
self.left_down = False
joysticks = arcade.get_joysticks()
if joysticks:
self.joystick = joysticks[0]
self.joystick.open()
self.joystick.on_joybutton_press = self.on_joybutton_press
self.joystick.on_joybutton_release = self.on_joybutton_release
self.joystick.on_joyhat_motion = self.on_joyhat_motion
else:
print("There are no Joysticks")
self.joystick = None
def on_joybutton_press(self, joystick, button):
print("Button {} down".format(button))
def on_joybutton_release(self, joystick, button):
print("Button {} up".format(button))
def on_joyhat_motion(self, joystick, hat_x, hat_y):
print("Hat ({}, {})".format(hat_x, hat_y))
def setup(self):
""" Set up the game and initialize the variables. """
width = RECT_WIDTH
height = RECT_HEIGHT
x = SCREEN_WIDTH // 2
y = SCREEN_HEIGHT // 2
angle = 0
color = arcade.color.WHITE
self.player = Rectangle(x, y, width, height, angle, color)
self.left_down = False
def update(self, dt):
# Grab the position of the joystick
# This will be between -1.0 and +1.0
if self.joystick:
self.player.delta_x = self.joystick.x * MOVEMENT_MULTIPLIER
# Set a "dead zone" to prevent drive from a centered joystick
if abs(self.player.delta_x) < DEAD_ZONE:
self.player.delta_x = 0
self.player.delta_y = -self.joystick.y * MOVEMENT_MULTIPLIER
# Set a "dead zone" to prevent drive from a centered joystick
if abs(self.player.delta_y) < DEAD_ZONE:
self.player.delta_y = 0
""" Move everything """
self.player.move()
def on_draw(self):
"""
Render the screen.
"""
arcade.start_render()
self.player.draw()
def main():
window = MyApplication(SCREEN_WIDTH, SCREEN_HEIGHT)
window.setup()
arcade.run()
class Rectangle:
""" Class to represent a rectangle on the screen """
def __init__(self, x, y, width, height, angle, color):
""" Initialize our rectangle variables """
# Position
self.x = x
self.y = y
# Vector
self.delta_x = 0
self.delta_y = 0
# Size and rotation
self.width = width
self.height = height
self.angle = angle
# Color
self.color = color
def draw(self):
""" Draw our rectangle """
arcade.draw_rectangle_filled(self.x, self.y, self.width, self.height,
self.color, self.angle)
def move(self):
""" Move our rectangle """
# Move left/right
self.x += self.delta_x
# See if we've gone beyond the border. If so, reset our position
# back to the border.
if self.x < RECT_WIDTH // 2:
self.x = RECT_WIDTH // 2
if self.x > SCREEN_WIDTH - (RECT_WIDTH // 2):
self.x = SCREEN_WIDTH - (RECT_WIDTH // 2)
# Move up/down
self.y += self.delta_y
# Check top and bottom boundaries
if self.y < RECT_HEIGHT // 2:
self.y = RECT_HEIGHT // 2
if self.y > SCREEN_HEIGHT - (RECT_HEIGHT // 2):
self.y = SCREEN_HEIGHT - (RECT_HEIGHT // 2)
main()
|