Я делаю свою первую игру в Game Maker.
В игре мне нужно, чтобы пользователь нарисовал фигуру, например прямоугольник, и игра должна распознать фигуру. Как я могу это сделать?
Спасибо!
Я делаю свою первую игру в Game Maker.
В игре мне нужно, чтобы пользователь нарисовал фигуру, например прямоугольник, и игра должна распознать фигуру. Как я могу это сделать?
Спасибо!
Что ж, это довольно сложная задача. Чтобы упростить его, вы можете попросить его разместить последовательность точек, используя координаты мыши в событии щелчка, и автоматически соединить их линиями. Если вы сохраните каждую точку в одной и той же структуре ds_list, вы сможете проверить условия угла, расстояния и т. д. Таким образом, вы сможете определить форму. Могу я спросить, почему вы хотите это сделать?
Способ, которым я решил бы эту проблему, довольно прост. Я бы создал несколько переменных для каждой точки, когда кто-то нажимал на одну из точек, это было бы равно true. и подождите, пока игрок не нажмет на следующую точку. Если бы игрок щелкнул следующую точку, я бы вызвал спрайт в виде линии, используя image_angle, чтобы выровнять обе точки, и дождаться, пока игрок щелкнет следующую точку.
Далее у меня было бы шаговое событие, ожидающее, были ли нажаты все точки, и когда они должны были либо нарисовать треугольник в этих координатах, либо разместить спрайт в правильных координатах, чтобы заполнить треугольник.
Другой способ, которым вы могли бы это сделать, - решить, какими будут эти точки, и сравнить с mouse_x и mouse_y, чтобы увидеть, была ли это точка, и если это было, то сделать, как указано выше. Есть много способов решить эту проблему. Просто продолжайте пробовать, и вы найдете тот, который подходит для вашего уровня навыков и того, что вы хотите делать.
Вам нужно использовать функцию draw_rectangle(x1, y1, x2, y2, outline)
. Что касается распознавания фигуры, используйте point_in_rectangle(px, py, x1, y1, x2, y2)
.
Я просто интересуюсь идеями, потому что сейчас не могу кодить. Но послушай, я думаю, это может сработать.
Мы предполагаем, что пользователь должен держать палец на тачскрине, иначе сработает событие и все данные из сенсорного события будут очищены.
Я предполагаю, что в будущем вам может понадобиться распознавать и другие простые геометрические фигуры.
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 координатами, чтобы получить идеальную прямоугольную форму.
Уже поздно, и я мог что-то забыть, но с помощью этого метода, я думаю, вы могли бы даже вычислить треугольник, круг и т. Д. С небольшим редактированием и сопоставлением.
РЕДАКТИРОВАТЬ: Если вы действительно ленивы, вы могли бы вместо этого использовать гораздо более тяжелую стратегию космической сложности. Просто создайте сетку из прямоугольников или даже треугольников фиксированного размера и проверьте, какой из них коснулся палец, соедините их центры после того, как вы определили форму, явно игнорируя те, к которым прикоснулись по ошибке. Было бы очень легко рисовать ровные круги, используя собственные функции. Гарантированная победа.