119 lines
3.6 KiB
Python

"""
Shapes buffered in ShapeElementList
Show how to use a ShapeElementList to display multiple shapes on-screen.
If Python and Arcade are installed, this example can be run from the command line with:
python -m arcade.examples.shapes_buffered
"""
import arcade
import random
# Do the math to figure out our screen dimensions
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
SCREEN_TITLE = "Buffered Shapes"
class MyGame(arcade.Window):
"""
Main application class.
"""
def __init__(self, width, height, title):
"""
Set up the application.
"""
super().__init__(width, height, title)
self.shape_list = arcade.ShapeElementList()
self.shape_list.center_x = SCREEN_WIDTH // 2
self.shape_list.center_y = SCREEN_HEIGHT // 2
self.shape_list.angle = 0
point_list = ((0, 50),
(10, 10),
(50, 0),
(10, -10),
(0, -50),
(-10, -10),
(-50, 0),
(-10, 10),
(0, 50))
colors = [
getattr(arcade.color, color)
for color in dir(arcade.color)
if not color.startswith("__")
]
for i in range(5):
x = SCREEN_WIDTH // 2 - random.randrange(SCREEN_WIDTH - 50)
y = SCREEN_HEIGHT // 2 - random.randrange(SCREEN_HEIGHT - 50)
color = random.choice(colors)
points = [(px + x, py + y) for px, py in point_list]
my_line_strip = arcade.create_line_strip(points, color, 5)
self.shape_list.append(my_line_strip)
point_list = ((-50, -50),
(0, 40),
(50, -50))
for i in range(5):
x = SCREEN_WIDTH // 2 - random.randrange(SCREEN_WIDTH - 50)
y = SCREEN_HEIGHT // 2 - random.randrange(SCREEN_HEIGHT - 50)
points = [(px + x, py + y) for px, py in point_list]
triangle_filled = arcade.create_triangles_filled_with_colors(
points,
random.sample(colors, 3)
)
self.shape_list.append(triangle_filled)
point_list = ((-50, -70),
(-50, 70),
(50, 70),
(50, -70))
for i in range(5):
x = SCREEN_WIDTH // 2 - random.randrange(SCREEN_WIDTH - 50)
y = SCREEN_HEIGHT // 2 - random.randrange(SCREEN_HEIGHT - 50)
points = [(px + x, py + y) for px, py in point_list]
rect_filled = arcade.create_rectangle_filled_with_colors(
points,
random.sample(colors, 4)
)
self.shape_list.append(rect_filled)
point_list = ((100, 100),
(50, 150),
(100, 200),
(200, 200),
(250, 150),
(200, 100))
poly = arcade.create_polygon(point_list, (255, 10, 10))
self.shape_list.append(poly)
ellipse = arcade.create_ellipse(20, 30, 50, 20, (230, 230, 0))
self.shape_list.append(ellipse)
arcade.set_background_color(arcade.color.BLACK)
def on_draw(self):
"""
Render the screen.
"""
# This command has to happen before we start drawing
arcade.start_render()
self.shape_list.draw()
def update(self, delta_time):
self.shape_list.angle += 0.2
self.shape_list.center_x += 0.1
self.shape_list.center_y += 0.1
def main():
MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
arcade.run()
if __name__ == "__main__":
main()