Move By Keyboard

sprite_move_keyboard.py
1"""
2Move Sprite With Keyboard
3
4Simple program to show moving a sprite with the keyboard.
5The sprite_move_keyboard_better.py example is slightly better
6in how it works, but also slightly more complex.
7
8Artwork from https://kenney.nl
9
10If Python and Arcade are installed, this example can be run from the command line with:
11python -m arcade.examples.sprite_move_keyboard
12"""
13
14import arcade
15
16SPRITE_SCALING = 0.5
17
18WINDOW_WIDTH = 1280
19WINDOW_HEIGHT = 720
20WINDOW_TITLE = "Move Sprite with Keyboard Example"
21
22MOVEMENT_SPEED = 5
23
24
25class Player(arcade.Sprite):
26 """ Player Class """
27
28 def update(self, delta_time: float = 1/60):
29 """ Move the player """
30 # Move player.
31 # Remove these lines if physics engine is moving player.
32 self.center_x += self.change_x
33 self.center_y += self.change_y
34
35 # Check for out-of-bounds
36 if self.left < 0:
37 self.left = 0
38 elif self.right > WINDOW_WIDTH - 1:
39 self.right = WINDOW_WIDTH - 1
40
41 if self.bottom < 0:
42 self.bottom = 0
43 elif self.top > WINDOW_HEIGHT - 1:
44 self.top = WINDOW_HEIGHT - 1
45
46
47class GameView(arcade.View):
48 """
49 Main application class.
50 """
51
52 def __init__(self):
53 """
54 Initializer
55 """
56
57 # Call the parent class initializer
58 super().__init__()
59
60 # Variables that will hold sprite lists
61 self.player_list = None
62
63 # Set up the player info
64 self.player_sprite = None
65
66 # Set the background color
67 self.background_color = arcade.color.AMAZON
68
69 def setup(self):
70 """ Set up the game and initialize the variables. """
71
72 # Sprite lists
73 self.player_list = arcade.SpriteList()
74
75 # Set up the player
76 self.player_sprite = Player(
77 ":resources:images/animated_characters/female_person/femalePerson_idle.png",
78 scale=SPRITE_SCALING,
79 )
80 self.player_sprite.center_x = 50
81 self.player_sprite.center_y = 50
82 self.player_list.append(self.player_sprite)
83
84 def on_draw(self):
85 """
86 Render the screen.
87 """
88
89 # This command has to happen before we start drawing
90 self.clear()
91
92 # Draw all the sprites.
93 self.player_list.draw()
94
95 def on_update(self, delta_time):
96 """ Movement and game logic """
97
98 # Move the player
99 self.player_list.update(delta_time)
100
101 def on_key_press(self, key, modifiers):
102 """Called whenever a key is pressed. """
103
104 # If the player presses a key, update the speed
105 if key == arcade.key.UP:
106 self.player_sprite.change_y = MOVEMENT_SPEED
107 elif key == arcade.key.DOWN:
108 self.player_sprite.change_y = -MOVEMENT_SPEED
109 elif key == arcade.key.LEFT:
110 self.player_sprite.change_x = -MOVEMENT_SPEED
111 elif key == arcade.key.RIGHT:
112 self.player_sprite.change_x = MOVEMENT_SPEED
113
114 def on_key_release(self, key, modifiers):
115 """Called when the user releases a key. """
116
117 # If a player releases a key, zero out the speed.
118 # This doesn't work well if multiple keys are pressed.
119 # Use 'better move by keyboard' example if you need to
120 # handle this.
121 if key == arcade.key.UP or key == arcade.key.DOWN:
122 self.player_sprite.change_y = 0
123 elif key == arcade.key.LEFT or key == arcade.key.RIGHT:
124 self.player_sprite.change_x = 0
125
126
127def main():
128 """ Main function """
129 # Create a window class. This is what actually shows up on screen
130 window = arcade.Window(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_TITLE)
131
132 # Create and setup the GameView
133 game = GameView()
134 game.setup()
135
136 # Show GameView on screen
137 window.show_view(game)
138
139 # Start the arcade game loop
140 arcade.run()
141
142
143if __name__ == "__main__":
144 main()