# 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()