在绘图对象周围移动符号

时间:2010-07-03 08:24:53

标签: flash actionscript-3

我已将Adobe Illustrator文档中的大量路径导入到Flash文件中。路径在场景中作为绘图对象存在。使用纯动作脚本,如何在不使用预定义动作参考线的情况下在每条线后移动符号。

编辑:我附上了Flash文件,里面装满了绘图对象。

http://rapidshare.com/files/406497264/pather.fla.html

问题是:这些绘图对象是否可以通过AS3访问,或者我应该将它们转换为符号/任何必要的格式。请举几个例子。

谢谢!

3 个答案:

答案 0 :(得分:9)

答案 1 :(得分:2)

正如我所看到的,这分为两个主要步骤:

  1. 在屏幕上移动符号
  2. 确定运动路径
  3. <小时/> 移动符号屏幕

    要控制动画,您将使用ENTER_FRAME事件在屏幕上移动符号。如:

    stage.addEventListener(Event.ENTER_FRAME, doMotion);
    
    ...
    
    public function doMotion(event:Event):void {
       //animate along the path
       targetSymbol.x = someNewValue;
       targetSymbol.y = someNewValue;
    }    
    

    另一种方法(我经常使用的方法)是使用Timer来触发动画调用,在本例中是“doMotion”功能。如:

    var FPS:Integer = 30; //frames per second (approx)
    
    var animationTimer:Timer = new Timer(1/FPS * 1000); //converted from SEC to MS
    animationTimer.addEventListener(TimerEvent.TIMER, doMotion);
    animationTimer.start();
    

    <小时/> 确定动作路径

    棘手的部分是确定运动路径。从您的描述中无法了解最佳方法。但是,为了对它进行刺戳,似乎所有路径都是直线。

    - 一种方法 - 如果是这样,那么您可以使用 x y 计算符号的位置, width height rotation 这些行的值。请注意,旋转以弧度表示。因此,在动画开始时,您可以使用基本三角函数(arcsin,arccos,arctan)来查找直线的起点和终点。

    一旦知道了端点,就可以在x / y开始时启动targetSymbol,并以任何方式将其移动到结束的x / y。最简单的方法是将 x 中的总变化除以您想要完成动画的帧数并重复 y 。然后在每次迭代中将这些微小数字添加到 x y 值。您还可以通过调整动作的“速度”来添加“缓动”等效果,使其“轻轻地”开始和停止。

    由于这些行被导入到flash中,您可以为它们提供实例名称以使编码更容易。或者,如果有太多,您可以迭代存储某些类型集合中所有行的所有显示对象。

    - 另一种方法 -
    您也可以将单个动画创建为动画片段,然后在需要动画的任何其他位置复制该动画片段。因此,您可以“手动”绘制/补间令人印象深刻的动画,然后以编程方式将动画的转换后的实例放置在适当的位置。这些职位将由现有职位决定。

    我希望所有这些都有所帮助,

    - gMale

答案 2 :(得分:1)

  

问题是:这些绘图对象是否可以通过AS3访问,或者我应该将它们转换为符号/任何必要的格式。请举几个例子。

我不知道有任何方法可以直接在AS3中访问这些符号。据我所知,他们是他们的父MovieClip的图形属性的元素。例如,您可以编写如下代码:

var drawOnMe:Sprite = new Sprite();

drawOnMe.graphics.beginFill(0xCC0000);
drawOnMe.graphics.drawRect(0,0,100,100);
drawOnMe.graphics.endFill();

但是,一旦在drawOnMe.graphics对象上绘制了此形状,就无法再访问它,因为它没有标识符。您导入的艺术品基本上属于同一条船。

由于您无法访问艺术作品,因此无法从导入的轮廓中获取点并在路径上为符号设置动画。简而言之,我并不认为这可以做到。

有关Graphics属性的更多信息:

http://help.adobe.com/en_US/AS3LCR/Flash_10.0/