User control: Joystick¶
move_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 | """
This simple animation example shows how to move an item with the joystick
and game-pad.
"""
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 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
joysticks = arcade.get_joysticks()
if joysticks:
self.joystick = joysticks[0]
self.joystick.open()
else:
print("There are no Joysticks")
self.joystick = None
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 """
# Grab the position of the joystick
# This will be between -1.0 and +1.0
if self.joystick:
self.delta_x = self.joystick.x * MOVEMENT_MULTIPLIER
# Set a "dead zone" to prevent drive from a centered joystick
if abs(self.delta_x) < DEAD_ZONE:
self.delta_x = 0
self.delta_y = -self.joystick.y * MOVEMENT_MULTIPLIER
# Set a "dead zone" to prevent drive from a centered joystick
if abs(self.delta_y) < DEAD_ZONE:
self.delta_y = 0
# 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)
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
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):
""" 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()
main()
|