如何沿预定义路径为鼠标跟随者创建平滑运动?

时间:2016-09-15 10:15:21

标签: actionscript-3 flash

我想制作一个追踪游戏。当用户跟踪字母(字母的路径)时,我希望我的圆圈遵循路径。用户无法返回已经跟踪过的区域

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        // Android gradle plugin
        classpath 'com.android.tools.build:gradle:2.1.3'
    }
}

enter image description here enter image description here

当我追踪路径时,动作不平滑。有人可以建议一种方法使运动顺利或建议另一种方法来实现相同。提前谢谢。

2 个答案:

答案 0 :(得分:1)

我之前创建了一个绘图游戏,允许用户绘制路径。

不确定为什么Wicked的答案会被低估,因为您需要做的第一件事就是使用您可以获得的最高帧速率。帧速率越高,曲线越平滑。

如果符合条件,我会看到您的代码在当前位置绘制一个圆圈。从最后一个点.x / point.y到当前的一个而不是一个圆圈画一条线可能会更好,这样你就不会在你的路径上留下任何漏洞。

我无法解决这条线在被绘制时被锯齿状(一系列直线)的事实,但是一旦用户抬起他们的手指,我就可以沿着这条线取点他们用一个平滑的bezier路径(一系列简单的贝塞尔曲线)绘制并替换它们,效果很好。一旦你有3分(你需要3点画一条曲线),你也可以在飞行中做到这一点。

Here is a good reference如何使用理论和代码示例实现此目的。有关bezier路径,请参阅页面下方。您需要转换为AS3,但这并不困难。

另一个提示是在ENTER_FRAME中尽可能少地进行计算。您可以预先计算循环使用的两个值(2 * Math.PI)和((2 * Math.PI)/ 10),因为它们是常量。你也可以在函数顶部计算一次(size / 3),特别是预先计算Math.sin(i)和Math.cos(i)的10个值并将它们存储在一个数组中(基本上是一个LUT - 查找表)因为这些是你正在做的最重的数学运算。

我的最后一个提示是,您的代码不会检查绘制的点是否非常接近绘制的最后一个点。我建议你这样做,并且只在鼠标移动了最小距离(例如2个像素)后绘制一个点。否则你可以让鼠标静止在一个位置,你的代码就会在圆圈上自行绘制圆圈。

答案 1 :(得分:-1)

尝试将文档中的FPS增加到目前的两倍 修改>文档...>帧速率