TetrArcade/arcade/examples/move_joystick.py

113 lines
3.3 KiB
Python

"""
This simple animation example shows how to move an item with the joystick
and game-pad.
If Python and Arcade are installed, this example can be run from the command line with:
python -m arcade.examples.move_joystick
"""
import arcade
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
SCREEN_TITLE = "Move Joystick Example"
MOVEMENT_SPEED = 5
DEAD_ZONE = 0.02
class Ball:
def __init__(self, position_x, position_y, change_x, change_y, radius, color):
# Take the parameters of the init function above, and create instance variables out of them.
self.position_x = position_x
self.position_y = position_y
self.change_x = change_x
self.change_y = change_y
self.radius = radius
self.color = color
def draw(self):
""" Draw the balls with the instance variables we have. """
arcade.draw_circle_filled(self.position_x, self.position_y, self.radius, self.color)
def update(self):
# Move the ball
self.position_y += self.change_y
self.position_x += self.change_x
# See if the ball hit the edge of the screen. If so, change direction
if self.position_x < self.radius:
self.position_x = self.radius
if self.position_x > SCREEN_WIDTH - self.radius:
self.position_x = SCREEN_WIDTH - self.radius
if self.position_y < self.radius:
self.position_y = self.radius
if self.position_y > SCREEN_HEIGHT - self.radius:
self.position_y = SCREEN_HEIGHT - self.radius
class MyGame(arcade.Window):
def __init__(self, width, height, title):
# Call the parent class's init function
super().__init__(width, height, title)
# Make the mouse disappear when it is over the window.
# So we just see our object, not the pointer.
self.set_mouse_visible(False)
arcade.set_background_color(arcade.color.ASH_GREY)
# Create our ball
self.ball = Ball(50, 50, 0, 0, 15, arcade.color.AUBURN)
# Get a list of all the game controllers that are plugged in
joysticks = arcade.get_joysticks()
# If we have a game controller plugged in, grab it and
# make an instance variable out of it.
if joysticks:
self.joystick = joysticks[0]
self.joystick.open()
else:
print("There are no joysticks.")
self.joystick = None
def on_draw(self):
""" Called whenever we need to draw the window. """
arcade.start_render()
self.ball.draw()
def update(self, delta_time):
# Update the position according to the game controller
if self.joystick:
# Set a "dead zone" to prevent drive from a centered joystick
if abs(self.joystick.x) < DEAD_ZONE:
self.ball.change_x = 0
else:
self.ball.change_x = self.joystick.x * MOVEMENT_SPEED
# Set a "dead zone" to prevent drive from a centered joystick
if abs(self.joystick.y) < DEAD_ZONE:
self.ball.change_y = 0
else:
self.ball.change_y = -self.joystick.y * MOVEMENT_SPEED
self.ball.update()
def main():
window = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
arcade.run()
if __name__ == "__main__":
main()