Move By Turning#
Use the left/right keys to turn.
Up and down keys to move forward and backwards.
1"""
2Move Sprite by Angle
3
4Simple program to show basic sprite usage.
5
6Artwork from https://kenney.nl
7
8If Python and Arcade are installed, this example can be run from the command line with:
9python -m arcade.examples.sprite_move_angle
10"""
11import arcade
12import math
13
14SPRITE_SCALING = 0.5
15
16SCREEN_WIDTH = 800
17SCREEN_HEIGHT = 600
18SCREEN_TITLE = "Move Sprite by Angle Example"
19
20MOVEMENT_SPEED = 5
21ANGLE_SPEED = 5
22
23
24class Player(arcade.Sprite):
25 """ Player class """
26
27 def __init__(self, image, scale):
28 """ Set up the player """
29
30 # Call the parent init
31 super().__init__(image, scale=scale)
32
33 # Create a variable to hold our speed. 'angle' is created by the parent
34 self.speed = 0
35
36 def update(self):
37 # Rotate the ship
38 self.angle += self.change_angle
39
40 # Convert angle in degrees to radians.
41 angle_rad = math.radians(self.angle)
42
43 # Use math to find our change based on our speed and angle
44 self.center_x += self.speed * math.sin(angle_rad)
45 self.center_y += self.speed * math.cos(angle_rad)
46
47
48class MyGame(arcade.Window):
49 """
50 Main application class.
51 """
52
53 def __init__(self, width, height, title):
54 """
55 Initializer
56 """
57
58 # Call the parent class initializer
59 super().__init__(width, height, title)
60
61 # Variables that will hold sprite lists
62 self.player_list = None
63
64 # Set up the player info
65 self.player_sprite = None
66
67 # Set the background color
68 self.background_color = arcade.color.BLACK
69
70 def setup(self):
71 """ Set up the game and initialize the variables. """
72
73 # Sprite lists
74 self.player_list = arcade.SpriteList()
75
76 # Set up the player
77 self.player_sprite = Player(":resources:images/space_shooter/playerShip1_orange.png",
78 SPRITE_SCALING)
79 self.player_sprite.center_x = SCREEN_WIDTH / 2
80 self.player_sprite.center_y = SCREEN_HEIGHT / 2
81 self.player_list.append(self.player_sprite)
82
83 def on_draw(self):
84 """
85 Render the screen.
86 """
87
88 # This command has to happen before we start drawing
89 self.clear()
90
91 # Draw all the sprites.
92 self.player_list.draw()
93
94 def on_update(self, delta_time):
95 """ Movement and game logic """
96
97 # Call update on all sprites (The sprites don't do much in this
98 # example though.)
99 self.player_list.update()
100
101 def on_key_press(self, key, modifiers):
102 """Called whenever a key is pressed. """
103
104 # Forward/back
105 if key == arcade.key.UP:
106 self.player_sprite.speed = MOVEMENT_SPEED
107 elif key == arcade.key.DOWN:
108 self.player_sprite.speed = -MOVEMENT_SPEED
109
110 # Rotate left/right
111 elif key == arcade.key.LEFT:
112 self.player_sprite.change_angle = -ANGLE_SPEED
113 elif key == arcade.key.RIGHT:
114 self.player_sprite.change_angle = ANGLE_SPEED
115
116 def on_key_release(self, key, modifiers):
117 """Called when the user releases a key. """
118
119 if key == arcade.key.UP or key == arcade.key.DOWN:
120 self.player_sprite.speed = 0
121 elif key == arcade.key.LEFT or key == arcade.key.RIGHT:
122 self.player_sprite.change_angle = 0
123
124
125def main():
126 """ Main function """
127 window = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
128 window.setup()
129 arcade.run()
130
131
132if __name__ == "__main__":
133 main()