上一篇文章,只是简单的求出了抛物线的坐标,而且也不够灵活。如果只是单纯的画线,使用as3自带的curveTo(二次贝塞尔曲线)就已经足够了。

二次贝塞尔曲线演示动画 t in [0, 1]  (图片来源于wiki贝塞尔曲线>>)

下面的例子,根据鼠标的位置,绘制经过指定起始点、结束点和鼠标位置的曲线。

Code:

   1: package  
   2: {
   3:     import flash.display.Sprite;
   4:     import flash.events.Event;
   5:     
   6:     /**
   7:      * ...
   8:      * @author Meteoric
   9:      */
  10:     public class DrawCurveDemo extends Sprite
  11:     {
  12:         private var x0:Number = 100;
  13:         private var y0:Number = 400;
  14:         private var x1:Number;
  15:         private var y1:Number;
  16:         private var x2:Number = 500;
  17:         private var y2:Number = 400;
  18:         
  19:         public function DrawCurveDemo() 
  20:         {
  21:             initView();
  22:         }
  23:         
  24:         private function initView():void
  25:         {
  26:             addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
  27:             
  28:             onEnterFrameHandler();
  29:         }
  30:         
  31:         private function onEnterFrameHandler(e:Event=null):void 
  32:         {
  33:             x1 = mouseX;
  34:             y1 = mouseY;
  35:             
  36:             graphics.clear();
  37:             graphics.lineStyle(2, 0x3399cc);
  38:             graphics.moveTo(x0, y0);
  39:             graphics.curveTo(x1, y1, x2, y2);
  40:         }
  41:         
  42:     }
  43:  
  44: }

上面仅仅支持线条的绘制,如果是一个影片剪辑想要移动,则会比较麻烦。好在AS3的类库TweenMax已经完全支持了。
参考文档说明,实现如下的示例效果:

先定义一个名为Arrow.as,它用于在舞台上画一个红色的“箭头”

   1: package  
   2: {
   3:     import flash.display.Sprite;
   4:     
   5:     /**
   6:      * ...
   7:      * @author Meteoric
   8:      */
   9:     public class Arrow extends Sprite
  10:     {
  11:         
  12:         public function Arrow() 
  13:         {
  14:             initView();
  15:         }
  16:         
  17:         private function initView():void
  18:         {
  19:             graphics.clear();
  20:             graphics.lineStyle(1, 0xff0000);
  21:             graphics.moveTo(-100, -5);
  22:             graphics.lineTo(-20, -5);
  23:             graphics.lineTo(-20, -20);
  24:             graphics.lineTo(0, 0);
  25:             graphics.lineTo(-20, 20);
  26:             graphics.lineTo(-20, 5);
  27:             graphics.lineTo(-100, 5);
  28:             graphics.lineTo(-100, -5);
  29:         }
  30:         
  31:     }
  32:  
  33: }

然后定义一个ArrowTest.as用于测试效果:

   1: package  
   2: {
   3:     import flash.display.Sprite;
   4:     import flash.utils.setTimeout;
   5:     import gs.TweenMax;
   6:     /**
   7:      * ...
   8:      * @author Meteoric
   9:      */
  10:     public class ArrowTest extends Sprite
  11:     {
  12:         
  13:         public function ArrowTest() 
  14:         {
  15:             initView();
  16:         }
  17:         
  18:         private var arrow:Arrow;
  19:         
  20:         private function initView():void
  21:         {
  22:             if (arrow == null)
  23:             {
  24:                 arrow = new Arrow();
  25:                 addChild(arrow);
  26:             }
  27:             arrow.x = 100;
  28:             arrow.y = 300;
  29:             
  30:             graphics.clear();
  31:             graphics.lineStyle(1, 0x000000);
  32:             graphics.moveTo(arrow.x, arrow.y);
  33:             
  34:             TweenMax.to(arrow, 3, {x:600, y:400, bezierThrough:[{x:300, y:100}], orientToBezier:true, onUpdate:onUpdateHandler, onComplete:onCompleteHandler});
  35:         }
  36:         
  37:         private function onUpdateHandler():void
  38:         {
  39:             graphics.lineTo(arrow.x, arrow.y);
  40:         }
  41:         
  42:         private function onCompleteHandler():void
  43:         {
  44:             setTimeout(initView, 2 * 1000);
  45:         }
  46:         
  47:     }
  48:  
  49: }

as3绘制抛物线(二)相关推荐

  1. 【Python】函数图像绘制:二维图像、三维图像、散点图、心形图

    [Python]函数图像绘制:二维图像.三维图像.散点图.心形图 所有需要用的包 二维图像 三维图像 散点图绘制 心形图绘制 所有需要用的包 from mpl_toolkits.mplot3d imp ...

  2. 【Qt】2D绘图之绘制图像(二)

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制QImage图像 04. 绘制QPixmap图像 05. 绘制QPicture图像 06. 综合对比 07. 附录 0 ...

  3. 在WPF中自定义你的绘制(二)

    在WPF中自定义你的绘制(二) 原文:在WPF中自定义你的绘制(二)   在WPF中自定义你的绘制(二)                                                 ...

  4. python3 + opencv +pyzbar实时检测二维码 / 定位二维码,并绘制出二维码的框和提取二维码内容

    python3 + opencv +pyzbar实时检测二维码 / 定位二维码,并绘制出二维码的框和提取二维码内容 1 pyzbar二维码检测模块 1.1. pyzbar模块介绍 1.2 pyzbar ...

  5. matlab绘制抛物线,MATLAB中绘制抛物线的图像,请补充完成下面代码: clc,clear; x=linspace(...

    MATLAB中绘制抛物线的图像,请补充完成下面代码: clc,clear; x=linspace(-2,2,100); ____________; plot(x,y) 答: y=x.^2 在下列各项中 ...

  6. Cesium绘制抛物线弧线

    Cesium绘制抛物线弧线 想做一个行人轨迹的动态显示,在网上搜了很多都没有搜到,于是自己花了点时间琢磨了一下,做个记录 思路 两点连线作为坐标轴,取线段中点画垂线作为y轴,在线上取一点作为开口向下的 ...

  7. AltiumDesigner绘制PCB(二)

    本教程以绘制4x4矩阵键盘为例,在绘制PCB前,请确保你已安装Altium Designer. 本节主要教大家为元器件绘制原理图,了解器件原理图的概念. 1 基本概念 器件的原理图是对器件外形的提炼和 ...

  8. scratch教程----2.绘制抛物线

    Hi!大家好,这里是Rocky丶的scratch教程--第二期, 这起我们来讲讲如何运用scratch绘制抛物线: 我们今天来讲两种"方法"绘制抛物线(两种精确度) 目录 开始讲解 ...

  9. Unity中绘制抛物线

    效果如下: 之所以加个2,是因为我以前写过一个抛物线的文章,之前的文章请看这: Unity绘制抛物线代码 上一篇文章只是简单地绘制了一个抛物线,但是无法随意移动或者旋转,最近因为做个项目可能会用到这个 ...

最新文章

  1. H-Net:基于无监督注意的立体深度估计
  2. [深度学习] keras的EarlyStopping使用与技巧
  3. 使用 LSTM 进行多变量时间序列预测的保姆级教程
  4. [Spring Cloud Task]6 Spring Batch批处理应用设计原则
  5. 「从源码中学习」面试官都不知道的Vue题目答案
  6. Jedis对redis的操作详解
  7. 用计算机探索奥秘规律例题,人教新课标小学五年级上册数学《用计算器探索规律》教案...
  8. 自考那些事儿(九):再次学操作系统
  9. ijkplayer框架详解
  10. C++ 语法概括总结
  11. 中兴光猫F412超级管理员密码获取
  12. 小技巧(11):使用PS更换证件照背景颜色(蓝色背景色换成白色背景色)
  13. 【已解决ie浏览器不能打印预览的问题,页面跳转失败,无法打开】
  14. Ubuntu 14.04 LTS 启动blast2go 报错
  15. 阿里巴巴十周年有感----宗教的盛宴
  16. 没想到你是这样的MethodArgumentNotValidException
  17. ERP管理系统开发设计现有源码
  18. 常见的标识符命名风格
  19. 安徽工业大学计算机组成原理,安徽工业大学工商学院 计算机组成原理试卷12至13学年A卷...
  20. 小心被钓鱼!移动物联卡怎么购买才安全!

热门文章

  1. 解决webApiMessageAn error has occurred./Message不能写多个Get方法的问题
  2. 安装完Arch后,要安装的软件
  3. VC2010 编译问题
  4. java常用类型转换
  5. 一个苏州IT人的5年挨踢经历-------面试篇(之三)
  6. 达人眼中的WINCE网络驱动
  7. java struts2相关记录
  8. spring 使用redis集群配置
  9. Invalid indirect reference 0x28 in decodeIndirectR
  10. Android 6.0 以及HttpClient