Окно и рисование
arcade — современная библиотека для 2D-игр на Python. Она рисует через видеокарту (OpenGL), поэтому быстро справляется с тысячами спрайтов, и в ней сразу есть всё для платформеров: физика, камера, карты уровней.
Как и в курсе pygame, вы будете чинить готовые игры: в каждой задаче работающая программа, в которой сломан небольшой участок.
Минимальная игра
В arcade игра — это класс-наследник arcade.Window. Движок сам крутит игровой цикл и вызывает ваши методы:
import arcade
class Game(arcade.Window):
def __init__(self):
super().__init__(800, 600, "Моя игра") # окно 800 × 600
self.background_color = arcade.color.SKY_BLUE
def on_update(self, delta_time): # логика: ~60 раз в секунду
pass
def on_draw(self): # рисование кадра
self.clear()
arcade.draw_circle_filled(400, 300, 50, arcade.color.YELLOW)
Game()
arcade.run()
on_draw— нарисовать кадр. Начинается сself.clear(): стереть прошлый кадр.on_update(delta_time)— обновить состояние игры.delta_time— сколько секунд прошло с прошлого кадра.on_key_press,on_mouse_pressи другиеon_…— реакция на клавиатуру и мышь.
Координаты
Главное отличие от pygame: точка (0, 0) — левый нижний угол, y растёт вверх, как на графике в математике.
Если карта уровня записана строками сверху вниз, строку с номером row из rows строк нужно ставить на высоту (rows - 1 - row) * size — верхняя строка окажется наверху.
Рисование
arcade.draw_lrbt_rectangle_filled(left, right, bottom, top, color) # прямоугольник
arcade.draw_lrbt_rectangle_outline(left, right, bottom, top, color, 2) # рамка толщиной 2
arcade.draw_circle_filled(x, y, radius, color) # круг
arcade.draw_line(x1, y1, x2, y2, color, 3) # линия толщиной 3
arcade.draw_text("Счёт: 10", x, y, arcade.color.WHITE, 14) # текст
Цвета — готовые константы arcade.color.RED, arcade.color.GOLD и сотни других, либо кортеж (255, 128, 0).
Каждое следующее рисование ложится поверх предыдущего: фон, потом крупные объекты, потом мелкие и текст.
Полезные функции
arcade.math.clamp(150, 0, 100) # 100 — ограничить значение отрезком
arcade.math.lerp(0, 10, 0.25) # 2.5 — точка на четверти пути от 0 до 10
Как проверяются задачи
Код игры запускается под if __name__ == "__main__":. «Запустить у себя» открывает окно игры. При «Отправить» проверка импортирует программу без окна и вызывает ваши функции с разными данными. Поэтому чинить нужно функцию, а не класс окна.
Итог
- игра — класс-наследник
arcade.Windowс методамиon_drawиon_update, запуск —arcade.run(); - (0, 0) — левый нижний угол, y растёт вверх;
draw_lrbt_rectangle_filled(left, right, bottom, top, color),draw_circle_filled,draw_line,draw_text;arcade.math.clampограничивает значение.