Game Maker — сенсорное событие

Я делаю свою первую игру в Game Maker.

В игре мне нужно, чтобы пользователь нарисовал фигуру, например прямоугольник, и игра должна распознать фигуру. Как я могу это сделать?

Спасибо!


person Walther Emilio Carrasco    schedule 21.09.2016    source источник


Ответы (4)


Что ж, это довольно сложная задача. Чтобы упростить его, вы можете попросить его разместить последовательность точек, используя координаты мыши в событии щелчка, и автоматически соединить их линиями. Если вы сохраните каждую точку в одной и той же структуре ds_list, вы сможете проверить условия угла, расстояния и т. д. Таким образом, вы сможете определить форму. Могу я спросить, почему вы хотите это сделать?

person An intern has no name    schedule 08.10.2016
comment
Что ж, я делаю игру, в которой вы будете выполнять задание, рисуя фигуру, я видел этот метод в игре под названием Magic Touch, попробуйте, и вы узнаете - person Walther Emilio Carrasco; 21.11.2016

Способ, которым я решил бы эту проблему, довольно прост. Я бы создал несколько переменных для каждой точки, когда кто-то нажимал на одну из точек, это было бы равно true. и подождите, пока игрок не нажмет на следующую точку. Если бы игрок щелкнул следующую точку, я бы вызвал спрайт в виде линии, используя image_angle, чтобы выровнять обе точки, и дождаться, пока игрок щелкнет следующую точку.

Далее у меня было бы шаговое событие, ожидающее, были ли нажаты все точки, и когда они должны были либо нарисовать треугольник в этих координатах, либо разместить спрайт в правильных координатах, чтобы заполнить треугольник.

Другой способ, которым вы могли бы это сделать, - решить, какими будут эти точки, и сравнить с mouse_x и mouse_y, чтобы увидеть, была ли это точка, и если это было, то сделать, как указано выше. Есть много способов решить эту проблему. Просто продолжайте пробовать, и вы найдете тот, который подходит для вашего уровня навыков и того, что вы хотите делать.

person Jonathan Greene    schedule 07.07.2017

Вам нужно использовать функцию draw_rectangle(x1, y1, x2, y2, outline). Что касается распознавания фигуры, используйте point_in_rectangle(px, py, x1, y1, x2, y2).

person Matěj Prcka    schedule 28.08.2018

Я просто интересуюсь идеями, потому что сейчас не могу кодить. Но послушай, я думаю, это может сработать.

Мы предполагаем, что пользователь должен держать палец на тачскрине, иначе сработает событие и все данные из сенсорного события будут очищены.

Я предполагаю, что в будущем вам может понадобиться распознавать и другие простые геометрические фигуры.

1: установите фиксированное количество пикселей движения, определяемое в зависимости от размера области просмотра (с этого момента я буду называть это постоянным MOV), для каждого MOV, который вы сохраняете в буфере (pointsBuf), координаты точки, где находится палец.

2: Каждый раз, когда точка сохраняется, вы вычисляете среднее значение координат X и Y для каждой точки. (Держите предыдущее среднее значение и счетчик, чтобы уменьшить временную сложность). Сравнивая их, мы теперь можем знать направление и против линии. Сохраните их в 2D-буфере (dirVerBuf).

3: Если точка резко отличается от самого простого среднего между координатами X и Y, мы можем предположить, что палец изменил направление. Вот где тестовая часть MOV становится критической, мы должны убедиться, что теперь вычисляем угол. Поскольку только пользователь с болезнью Паркинсона мог бы сделать действительно искаженные линии, мы можем предположить на 95%, что мы можем безопасно взять 2-ю точку, которая не изменила среднее значение координаты, как вершину и, скажем, последнюю и 2-ю точку перед вершиной. рассчитать угол. Теперь у вас есть один угол. Проверьте наилучшую погрешность пользователя, чтобы определить, будет ли угол равен 90, 60, 45 и т. д. градусам. Сохранить в новом буфере (angBuf)

4: удалить значения из pointsBuf и повторять шаги 2 и 3 до тех пор, пока палец пользователя не покинет экран.

5: если четыре угла равны 90 градусам, 4 и два направления различны, последняя точка несколько близка (в зависимости от MOV) к первому сохраненному углу, а две линии X и линии Y несколько равны. , но разной длины между ними, то вы можете соединить 4 угла, используя четыре лучших значения рядом с 4 координатами, чтобы получить идеальную прямоугольную форму.

Уже поздно, и я мог что-то забыть, но с помощью этого метода, я думаю, вы могли бы даже вычислить треугольник, круг и т. Д. С небольшим редактированием и сопоставлением.

РЕДАКТИРОВАТЬ: Если вы действительно ленивы, вы могли бы вместо этого использовать гораздо более тяжелую стратегию космической сложности. Просто создайте сетку из прямоугольников или даже треугольников фиксированного размера и проверьте, какой из них коснулся палец, соедините их центры после того, как вы определили форму, явно игнорируя те, к которым прикоснулись по ошибке. Было бы очень легко рисовать ровные круги, используя собственные функции. Гарантированная победа.

person Edoardo Rosso    schedule 15.09.2020