Flex Degrafa在AIR 3.9下的bezier spline

我有一个在iOS上运行的移动Flex项目,使用Degrafa的库来使用它的BezierSpline类。 目的是为了能够直接在屏幕上绘制,用户手势给出的点集合然后使用该库转换成贝塞尔曲线。

然而,我的应用程序最近一旦显示至less包含这些曲线之一的页面就会崩溃。 我没有得到任何错误,堆栈跟踪或任何东西,应用程序只是被杀死,我被带回到iOS桌面。 显然这个错误发生在BezierSpline类的.draw()函数的某个地方。

此外,我注意到,这只是在应用程序的发行版上发生,无论是通过AppStore(看起来像他们没有注意到),或通过在iPad上部署的发行包。 在模拟器中或者在设备上直接使用debugging包,一切正常。 由于我有一段时间没有发布任何发行包,我不确定哪些修改可能造成这种情况。 我唯一知道的是,我最近更新了Flash Builder到4.7和AIR到3.9(这是该项目的其他function所需的)。

所以我基本上有三个问题:

  • 在这种情况下,应用程序只能在释放模式下崩溃,而不能在debugging模式下崩溃? 代码保持不变。

  • 有人曾经遇到过使用Degrafa及其BezierSpline类的问题吗?

  • 这可能是由于将AIR升级到最新的3.9版本引起的?

编辑 :我刚testing完全相同的代码在Android设备下,曲线显示正确,所以这只是在iOS设备上部署时发生。

我最终实现了这个由Lee Burrows 在这里写的真正有用的例子。 我只需要一个电话即可

static public function getPoint(t:Number, points:Array):Point { var x:Number = 0; var y:Number = 0; var n:uint = points.length-1; var factn:Number = factoral(n); for (var i:uint=0;i<=n;i++) { //calc binominal coefficent var b:Number = factn/(factoral(i)*factoral(ni)); //calc powers var k:Number = Math.pow(1-t, ni)*Math.pow(t, i); //add weighted points to totals x += b*k*points[i].x; y += b*k*points[i].y; } return new Point(x, y); } static private function factoral(value:uint):Number { if (value==0) return 1; var total:Number = value; while (--value>1) total *= value; return total; } 

上面的链接也提供了使用这个类的示例代码。

这个解决scheme唯一的缺点是我必须通过定义曲线的线数(通过改变“t”增量)手动处理曲线平滑度。 但是我也可以根据控制点的数量或者它们之间的距离dynamic地定义这个增量。

无论如何,这是绰绰有余的,我希望这可以帮助别人。