@events.mouse_moveотменить нельзя3 методаКурсор сдвинулся. В игре тем же движением поворачивается камера, поэтому событие идёт почти без остановки.
Нужно своему интерфейсу: подсветить кнопку под курсором, тащить элемент, вести линию за мышью.
Кроме позиции приходит сдвиг с прошлого раза, getDx и getDy: по нему считают перетаскивание, не запоминая прошлые координаты вручную.
| Метод | Возвращает | Зачем |
|---|---|---|
getX() / getY() | float | Где курсор, в единицах render_2d |
getDx() / getDy() | float | На сколько сдвинулся с прошлого раза |
isScreenOpen() | bool | Открыт ли сейчас экран |
panel = {"x": 20.0, "y": 20.0}
dragging = False
@events.mouse
def on_mouse(event):
global dragging
x, y = event.getX(), event.getY()
inside = panel.x <= x <= panel.x + 80 and panel.y <= y <= panel.y + 16
dragging = event.isPress() and inside
@events.mouse_move
def on_move(event):
# тяжёлого тут быть не должно: событие приходит на каждое движение мыши
if dragging:
panel.x += event.getDx()
panel.y += event.getDy()
@events.render_2d
def draw(event):
event.getContext().drawRoundedRect(panel.x, panel.y, 80, 16, border(4), theme.accent())Общий список всех событий и правила подписки лежат на странице События.