@events.game_renderотменить нельзябез методовКаждый кадр, независимо от того, что на экране: мир, главное меню, чужой интерфейс.
render_2d приходит только из игрового интерфейса, поэтому на главном меню и на своих экранах его нет. game_render идёт всегда и годится, чтобы двигать анимации ровно по кадрам.
Рисовать тут нечем: холста у события нет. Его дело это счёт времени и пересчёт значений, которые потом покажет render_2d или своё меню.
Своих методов у события нет: клиент просто сообщает, что момент наступил. Всё нужное берут из mc, world и своих переменных.
import math
phase = {"t": 0.0}
@events.game_render
def on_frame(event):
phase["t"] += 0.05 # анимация тикает и в меню
@events.render_2d
def draw(event):
alpha = int(120 + 100 * math.sin(phase["t"]))
alpha = max(0, min(255, alpha))
event.getContext().drawRect(4, 4, 40, 4, Color(120, 200, 255, alpha))Общий список всех событий и правила подписки лежат на странице События.