我在Game Maker中制作了我的第一款游戏。
在游戏中我需要用户绘制一个图形,例如一个矩形,并且游戏必须识别该图形。我怎么能这样做?
谢谢!
答案 0 :(得分:0)
嗯,这是一项相当复杂的任务。为了简化它,您可以要求他使用click事件中的鼠标坐标放置一系列点,并自动将它们与线连接。如果将每个点存储在相同的ds_list结构中,则可以检查角度,距离等条件。这样,您可以确定形状。我可以问你为什么要这样做?
答案 1 :(得分:0)
我解决这个问题的方法非常简单。当有人点击其中一个等于真的点时,我会为每个点创建一些变量。并等待玩家点击下一个点。如果玩家点击了下一个点,我会使用image_angle将一个精灵调用为一条线,将两个点对齐并等待玩家点击下一个点。
接下来,我会有一个步骤事件,等待查看是否所有点都被点击,然后他们在那些坐标处绘制一个三角形,或者将精灵放在正确的坐标处以填充三角形。
你可以做的另一种方法是决定那些点是什么,并检查mouse_x和mouse_y以查看它是否是一个点,如果是,那么如上所述。有很多方法可以解决这个问题。只要不断尝试,你会发现一个适合你的技能水平和你想做的事情。
答案 2 :(得分:0)
您需要使用draw_rectangle(x1, y1, x2, y2, outline)
函数。关于图形识别,请使用point_in_rectangle(px, py, x1, y1, x2, y2)
。
答案 3 :(得分:0)
我只是想知道一些想法,因为我现在无法编写代码。但是听我说,这可能行得通。
我们假设用户必须将手指放在触摸屏上,否则将触发一个事件,并清除触摸事件中的所有数据。
我认为将来您可能还需要识别其他简单的几何图形。
1:根据视口尺寸设置固定数量的运动像素(从现在开始,我将其称为恒定的MOV),对于存储在缓冲区(pointsBuf)中的每个MOV,其点的坐标手指是。
2:每次存储点时,您将计算每个点的X和Y坐标的平均值。 (保留以前的平均值和一个计数器,以减少时间复杂度)。比较它们,我们现在可以知道直线的方向和方向。将它们存储在2D缓冲区(dirVerBuf)中。
3:如果某个点与X坐标和Y坐标之间的最普通平均值“显着”不同,则可以假定手指的方向发生了变化。这是MOV测试的关键所在,我们必须确保现在计算角度。由于只有Parkinsoned用户会产生真正扭曲的线,所以我们可以假设在95%的情况下我们可以安全地将未更改坐标平均值的第二点作为顶点,并假设顶点之前的最后一个点和第二点为计算角度。您现在有了一个角度。测试用户的最佳误差容限,以发现该角度是否约为90、60、45,ecc ..度的角度。存储在新的缓冲区(angBuf)
4:从pointsBuf中删除值,然后重复步骤2和3,直到用户的手指离开屏幕为止。
5:如果四个角度为90度,则四个vs和两个方向不同,则最后一点稍微接近(取决于MOV)所存储的第一个角度以及两条X线和Y线相等,但是它们之间的长度不同,那么您可以使用4个坐标旁边的4个最佳值来连接4个角度,以形成完美的矩形。
已经很晚了,我可能忘记了一些东西,但是我认为通过这种方法,您甚至可以找出一个三角形,一个圆等。 进行一些编辑和面对。
编辑:如果您真的很懒,可以改用更多空间复杂度高的策略。只需创建一个矩形或什至固定尺寸的三角形的网格,并检查手指触摸了哪一个,在找出形状后将其中心连接起来,显然会忽略“为错误而触摸”的形状。使用本机函数绘制均匀的圆非常容易。 Gg。