积少成多Flash ActionScript 3.0(6) - 绘图之图形和转换

Flash动画入门:从时间轴原理到交互式相册制作 动画制作是现代数字内容创作的核心技能之一,其底层原理基于时间轴与关键帧控制技术。通过时间轴管理图形元素的出现、变化与消失,结合关键帧定义动画的转折点,可以实现从简单移动到复杂特效的各类动画效果。这项技术在工程实践中价值显著,能够高效创建轻量级、可交互的动态内容,广泛应用于网页动效、UI设计、教育课件及互动媒体等领域。Flash作为经典的矢量动画工具,其核心的时间轴控制、关键帧动画及事件驱动编程思想,至今仍是理解现代前端动画与游戏开发的基础。本教程以Flash动画入门为主题,详细讲解时间轴操作、元件创建及Ac 阅读详情
积少成多Flash ActionScript 3.0(6) - 绘图之图形和转换



作者:webabcd


介绍
演示使用 Flash ActionScript 3.0 画一些基本的图形,以及对绘制的图形或其他可视对象做一些基本的转换

  • 画图 - 通过 Shape 对象的 graphics 属性来执行矢量绘图命令
    • 1、使用 lineStyle() 定义画图的线条样式
    • 2、moveTo() - 设置当前绘画点;lineTo() - 以当前绘画点为起点,用当前定义的线条样式,画一条直线到目标点;curveTo() - 指定二次贝塞尔曲线的控制点和终点,从而完成曲线的绘制;drawRect() - 绘制矩形;drawCircle() - 绘制圆形;drawEllipse() - 绘制椭圆;
    • 3、beginFill() 和 endFill() 用于填充他们之间所绘制的图形。如果是渐变填充则对应的方法是 beginGradientFill 和 endFill()
  • 转换 - 通过设置对象的 transform.matrix 属性,对其做相应的转换
    • Matrix.rotate() - 旋转的角度
    • Matrix.translate() - 平移的距离
    • Matrix.scale() - 缩放的比例
    • Matrix.b - 将矩阵垂直倾斜
    • Matrix.c - 将矩阵水平倾斜



1、画图
在 UI 上放置 8 个 Button
名称分别为:btnLine, btnCurve, btnRectangle, btnCircle, btnEllipse, btnLiner, btnRadial, btnClea
分别用于演示:画直线,画曲线,画矩形,画圆形,画椭圆,线性渐变填充,放射性渐变填充,清除图形
Main.as

package 
{
    import flash.display.MovieClip;
    import fl.events.ComponentEvent;
    import fl.events.SliderEvent;
    import flash.display.Shape;
    import flash.geom.Matrix;
    import flash.display.GradientType;
    import flash.display.SpreadMethod;
    
    public class Main extends MovieClip
    
{
        
var originalMatrix:Matrix;
        
        public 
function Main():void
        
{
            btnLine.addEventListener(ComponentEvent.BUTTON_DOWN, drawLine);
            btnCurve.addEventListener(ComponentEvent.BUTTON_DOWN, drawCurve);
            btnRectangle.addEventListener(ComponentEvent.BUTTON_DOWN, drawRectangle);
            btnCircle.addEventListener(ComponentEvent.BUTTON_DOWN, drawCircle);
            btnEllipse.addEventListener(ComponentEvent.BUTTON_DOWN, drawEllipse);
            btnLiner.addEventListener(ComponentEvent.BUTTON_DOWN, drawLinerGradient);
            btnRadial.addEventListener(ComponentEvent.BUTTON_DOWN, drawRadialGradient);
            btnClear.addEventListener(ComponentEvent.BUTTON_DOWN, clearGraphics);
        }

        
        
        
// 画直线
        function drawLine(e:ComponentEvent):void 
        
{
            
// lineStyle() - 定义画图的线条样式
            //     第一个参数:线条粗细,整数(0 - 255)
            //     第二个参数:线条的颜色值(16进制)
            //     第三个参数:不透明度(0 - 1)
            canvas.graphics.lineStyle(12, 0x000000);
            
            
// moveTo() - 设置当前绘画点。在本例中就是直线的起点
            canvas.graphics.moveTo(0, 0);
            
            
// lineTo() - 以当前绘画点为起点,用当前定义的线条样式,画一条直线到目标点
            canvas.graphics.lineTo(100, 100);
        }

        
        
// 画曲线(二次贝塞尔曲线)
        function drawCurve(e:ComponentEvent):void 
        
{
            canvas.graphics.lineStyle(
1, 0x000000);
            canvas.graphics.moveTo(
100, 0);
            
            
// curveTo() - 指定二次贝塞尔曲线的控制点和终点,从而完成曲线的绘制
            //     前两个参数为控制点,后两个参数为终点,当前绘画点为起点
            canvas.graphics.curveTo(100, 100, 200, 200);
        }

        
        
// 画矩形
        function drawRectangle(e:ComponentEvent):void 
        
{
            canvas.graphics.lineStyle(
5, 0xFF0000);
            
            
// drawRect() - 绘制矩形
            //     第一个参数:矩形左上角的 x 坐标
            //     第二个参数:矩形左上角的 y 坐标
            //     第三个参数:矩形的宽
            //     第四个参数:矩形的高
            canvas.graphics.drawRect(200, 0, 100, 50);
        }

        
        
// 画圆
        function drawCircle(e:ComponentEvent):void 
        
{
            canvas.graphics.lineStyle(
1, 0x000000);
            
            
// beginFill() - 单色填充这之后所绘制的图形,直到调用endFill()为止
            //     两个参数分别为填充的颜色值和不透明度
            canvas.graphics.beginFill(0xFF0000, 0.5);
            
            
// drawCircle() - 绘制圆形
            //     三个参数分别为圆心的 x 坐标,圆心的 y 坐标,圆形的半径
            canvas.graphics.drawCircle(300, 0, 30);
            
            
// endFill() - 呈现 beginFill() 与 endFill() 之间所绘制的图形的填充效果
            canvas.graphics.endFill();
        }
    
        
        
// 画椭圆
        function drawEllipse(e:ComponentEvent):void 
        
{
            canvas.graphics.lineStyle(
1, 0x000000);
            canvas.graphics.beginFill(
0xFF0000);
            
            
// drawEllipse() - 绘制椭圆
            //     前两个参数:椭圆左侧顶点的 x 坐标和 y 坐标
            //     后两个参数:椭圆的宽和高
            canvas.graphics.drawEllipse(0, 200, 100, 50);
            
            canvas.graphics.endFill();
        }

        
        
// 线性渐变填充
        function drawLinerGradient(e:ComponentEvent):void 
        
{
            canvas.graphics.lineStyle(
1, 0x000000);
            
            
// 声明一个仿射矩阵 Matrix
            var gradientBoxMatrix:Matrix = new Matrix();
            
            
// createGradientBox() - Matrix 的一个专门为渐变填充提供的方法
            //     三个参数分别为渐变框的宽,渐变框的高,渐变框的旋转弧度
            gradientBoxMatrix.createGradientBox(50, 20, 0);
            
            
// beginGradientFill() - 做渐变填充
            //     第一个参数:渐变模式。GradientType.LINEAR为线性渐变;GradientType.RADIAL为放射性渐变
            //     第二个参数:渐变色的颜色值数组
            //     第三个参数:渐变色的不透明度数组
            //     第四个参数:渐变色的分布比例数组(0 - 255)。0为渐变框的最左侧,255为渐变框的最右侧
            //     第五个参数:用 Matrix.createGradientBox() 生成的渐变框
            //     第六个参数:伸展方式 
            //         SpreadMethod.PAD - 用线性渐变线末端的颜色值填充剩余空间
            //         SpreadMethod.REFLECT - 相邻填充区域,以 相反方向 重复渐变,直至填充满整个剩余空间
            //         SpreadMethod.REPEAT - 相邻填充区域,以 相同方向 重复渐变,直至填充满整个剩余空间
            canvas.graphics.beginGradientFill(GradientType.LINEAR, [0xFF0000, 0x0000FF], [1, 1], [0, 255], gradientBoxMatrix, SpreadMethod.REPEAT);
            
            canvas.graphics.drawRect(
100, 200, 100, 20);
            canvas.graphics.endFill();
        }

        
        
// 放射性渐变填充
        function drawRadialGradient(e:ComponentEvent):void
        
{        
            canvas.graphics.lineStyle(
1, 0x000000);
            
var gradientBoxMatrix:Matrix = new Matrix();
            gradientBoxMatrix.createGradientBox(
50, 20, 0);
            
            
// GradientType.RADIAL - 放射性渐变
            canvas.graphics.beginGradientFill(GradientType.RADIAL, [0xFF0000, 0x0000FF], [1, 1], [0, 255], gradientBoxMatrix, SpreadMethod.REFLECT);
            
            canvas.graphics.drawCircle(
200, 200, 30);
            canvas.graphics.endFill();
        }

        
        
// 清除图形
        function clearGraphics(e:ComponentEvent):void
        
{    
            
// clear() - 清除 Graphics 上的图形,并重置线条样式和填充等设置
            canvas.graphics.clear();
        }

    }

}



2、转换
在 UI 上放置 3 个 Silder
分别名为:sliderScaleX, sliderScaleY, sliderRotate
分别用于演示 X 轴方向上的缩放,Y 轴方向上的缩放,旋转
再放置 2 个 Button
分别名为:btnMatrix, btnClearMatrix
分别用于演示仿射矩阵在图形转换上的应用,还原为对象的初始仿射矩阵转换
Main.as

package 
{
    import flash.display.MovieClip;
    import fl.events.ComponentEvent;
    import fl.events.SliderEvent;
    import flash.display.Shape;
    import flash.geom.Matrix;
    import flash.display.GradientType;
    import flash.display.SpreadMethod;
    
    public class Main extends MovieClip
    
{
        
var originalMatrix:Matrix;
        
        public 
function Main():void
        
{
            sliderScaleX.addEventListener(SliderEvent.THUMB_DRAG, scaleXHandler);
            sliderScaleY.addEventListener(SliderEvent.THUMB_DRAG, scaleYHandler);
            sliderRotate.addEventListener(SliderEvent.THUMB_DRAG, rotateHandler);
            btnMatrix.addEventListener(ComponentEvent.BUTTON_DOWN, matrixHandler);
            btnClearMatrix.addEventListener(ComponentEvent.BUTTON_DOWN, clearMatrixHandler);
            
            
// 保存 canvas 的初始仿射矩阵转换
            originalMatrix = canvas.transform.matrix;
        }

        
        
        
// 在 x 轴方向上做缩放
        function scaleXHandler(e:SliderEvent):void
        
{
            
// scaleX - x轴方向上的缩放比例
            canvas.scaleX = e.value;
        }

        
        
// 在 y 轴方向上做缩放
        function scaleYHandler(e:SliderEvent):void
        
{
            
// scaleY - y轴方向上的缩放比例
            canvas.scaleY = e.value;
        }

        
        
// 旋转
        function rotateHandler(e:SliderEvent):void
        
{
            
// rotation - 旋转的度数
            canvas.rotation = e.value;
        }

        
        
        
// 仿射矩阵在图形转换上的应用
        function matrixHandler(e:ComponentEvent):void
        
{
            
var matrix:Matrix = new Matrix();

            
// rotate() - 旋转的角度
            matrix.rotate(10);
            
            
// translate() - 平移的距离
            matrix.translate(200, 200);
            
            
// scale() - 缩放的比例
            matrix.scale(1.2, 1.2);
            
            
var skewMatrix:Matrix = new Matrix();
            
// 调整 b 属性将矩阵垂直倾斜
            // 调整 c 属性将矩阵水平倾斜
            skewMatrix.b = Math.tan(0.78); 
            
            
// concat() - 组合两个仿射矩阵
            matrix.concat(skewMatrix);

            
// 在对象上应用仿射矩阵转换
            canvas.transform.matrix = matrix;
        }

        
        
// 还原为初始的仿射矩阵转换
        function clearMatrixHandler(e:ComponentEvent):void
        
{
            
// 设置 canvas 的仿射矩阵转换为初始的仿射矩阵
            canvas.transform.matrix = originalMatrix;
        }

    }

}



OK
[源码下载]

Flash雪花飘落动画制作实战教程 本章将引导读者进入Flash动画开发的世界,重点介绍雪花飘落动画的开发准备与整体设计思路。通过本章学习,您将掌握Flash在动画制作中的独特优势,包括时间轴控制、图形渲染以及与ActionScript的深度结合能力。// 定义变量// 定义一个函数,用于打印雪花数量trace("当前雪花数量为:" + snowflakeCount);// 调用函数代码逻辑分析:var关键字用于声明变量。int表示整型,Number表示浮点数类型。function定义了一个名为。 阅读详情

相关推荐

Flash8花朵飘落动画源文件完整项目

启动Adobe Flash 8后,主界面由舞台(Stage)时间轴(Timeline)工具箱(Tools Panel)属性面板(Properties Panel)和库(Library)五大区域构成。舞台是内容展示的中心画布,所有视觉元素在此编排;时间轴控制动画帧序列,支持图层管理与关键帧设置;工具箱提供绘图、选择、文字等基础工具;属性面板动态显示当前选中对象的参数(如位置、大小、颜色等),便于精确调整。// 示例:在第一帧添加停止命令(AS2.0)stop();

weixin_42376614的博客 1157

ActionScript学习手记之矩阵变换MatrixTransformer的应用

Flash ActionScript学习手记之矩阵变换MatrixTransformer的应用flash ActionScript MatrixFlash支持使用矩阵运算的方式对显示对象实现矩阵变换,可以实现对对象的平移、大小变换、旋转,四边形倾斜的矩阵运算具体的使用方法如下:定义一个矩阵对象->对矩阵进行参数运算->将要转换的显示对象进行矩阵转换定义一个矩阵:import flash.geom.

李大仁博客 520

Flash shape/Flash形状 花

flash shape 比较漂亮的花图形。 个人珍藏的啊!

flash actionscript3.0 beginGradientFill渐变填充 水晶按钮制作

flash actionscript3.0 beginGradientFill渐变填充 水晶按钮制作 public beginGradientFill(fillType:String, colors:Array, alphas:Array, ratios:Array, ma

uuq的专栏 4466

AS3中Matrix类

AS3中Matrix类详解 首先,我们要看看Matrix类的构造器函数,其实我是想让大家看看他的6个属性,,这6个属性对与我们非常的重要,他决定这我们的最终效果是什么样子的,会产生什么样的倾斜,都由这6个属性控制.

ComfyUI破限版全中文AI绘画环境搭建与工作流实战指南

节点式工作流是AI绘画领域的核心技术架构,通过将图像生成过程拆分为可配置的模块化节点,实现了对Stable Diffusion模型的精细化控制。其技术原理基于数据流编程范式,每个节点负责特定功能处理,如文本编码、采样器配置和VAE解码等。这种设计在工程实践中的核心价值在于提供了可追溯、可复用的可视化工作流,特别适合需要参数调优和批量生产的商业场景。ComfyUI作为典型的节点式AI绘画工具,在破限版中针对中文用户优化了界面支持和显卡兼容性,显著降低了技术门槛。在实际应用中,结合ControlNet和LoRA

weixin_29038155的博客 449

as3 图像颜色渐变中使用matrix

graphics 对象也可以绘制渐变笔触和填充,而不是纯色笔触和填充。渐变笔触是使用 lineGradientStyle() 方法创建的;渐变填充是使用 beginGradientFill() 方法创建的。   这两种方法接受相同的参数。前四个参数是必需的,即类型、颜色、Alpha 以及比率。其余四个参数是可选的,但对于高级自定义非常有用。   第一个参数指定要创建的渐变类型。可接受的值...

Makenna's World 459

小米汽车车载多摄像头视频链路深度解析 | MAX96792/MAX96724/MAX96781 实战分享

通过合理的输入输出规划 + 虚拟通道管理 + 加串行策略,可以在成本和性能之间取得最佳平衡,这就是多摄像头系统设计的核心精髓。

weixin_43199439的博客 1548

画圆直角

<br /> <br />结合lineTo 和 curveTo可以画出圆角矩形的样式<br /> <br />curveTo() 方法用于绘制贝塞尔曲线,通过设置控制点的位置在两条直线的交点处,可画出圆角。<br />flash.display.Graphics.curveTo(controlX:Number, controlY:Number, anchorX:Number, anchorY:Number):void通过由 (controlX, controlY) 指定的控制点,使用当前线条样式绘制一条从当

leon 1199

CKAD-CN考试之路----12

显然,对应的value都已经实现了加密.保存退出,等待pod重新创建。确认secret是否被加密。编辑secret文件。

Q先生 446

积少成多Flash(6) - ActionScript 3.0 绘图之图形和转换

[索引页][源码下载]积少成多Flash(6) - ActionScript 3.0 绘图之图形和转换 作者:webabcd介绍演示使用Flash ActionScript 3.0 画一些基本的图形,以及对绘制的图形或其他可视对象做一些基本的转换 画图 - 通过 Shape 对象的 graphics 属性来执行矢量绘图命令 1、使用 lineSty...

weixin_34290000的博客 207

【我的Android进阶之旅】解决android应用使用android:persistent属性带来的系统Launcher应用必须重启设备才生效的问题,大幅度提升开发效率

一、问题描述 我们在开发系统级别应用,比如Launcher桌面的时候,会发现有个问题:每次Launcher修改完代码,重新编译之后,安装到android设备上之后,必须重启才会生效。否则就是使用了之前的Launcher版本的内容。而每次重启设备得一分钟左右,太慢了,太影响效率了! 1.1 痛点 每次更新完代码,重新安装之后,必须重启设备才会生效。效率太TM低了! 二、分析问题 经过一轮代码排查,最终发现是因为src\main\AndroidManifest.xml文件中,定义application使用了an

字节卷动 1713

积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引

[源码下载]积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引作者:webabcdFlash 之 ActionScript 3.0 1、积少成多Flash(1) - ActionScript 3.0 基础之数据类型、操作符和流程控制语句介绍Flash ActionScript 3.0 中所有的数据类型都是对象,操作符和流程控制语句的语法与C#类似 2、

webabcd的专栏 932

OpenCV计算机视觉实战(11)——边缘检测详解

在本节中,我们系统介绍了三大经典边缘检测算子,包括 Sobel 算子:一阶导数平衡了噪声抑制与边缘提取,结合方向信息可用于纹理分析与车道检测;Laplacian 算子:二阶导数对微小亮度突变尤为敏感,配合零交叉和细化技术,可精确捕捉任意方向的细节边缘;Canny 算法:集成多阶段处理与双阈值策略,通过多尺度融合与自适应阈值优化,达到抗噪与细节兼顾的卓越效果。

qq_30167691的博客 4377

在windows中安装并启动ActiveMQ5.16.2

打开ActiveMQ官网 下载ActiveMQ 点击apache-activemq-5.16.2-bin.zip进行下载 下载发后解压到c盘根目录下 在powershell中输入 ./activemq start启动 ActiveMQ服务 htpp://127.0.0.1:8161访问ActiveMQ控制台 ...

934

积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引

[源码下载]积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引 作者:webabcdFlash 之 ActionScript 3.01、积少成多Flash(1) - ActionScript 3.0 基础之数据类型、操作符和流程控制语句介绍Flash ActionScript 3.0 中所有的数据类型都...

weixin_33901926的博客 156

基于 YOLOv26 的校园安全监控系统:多场景应用

本文提出了一种基于YOLOv26的校园安全监控系统,采用多场景应用架构实现对校园安全的智能监测。系统核心技术包括YOLOv26目标检测、DeepSORT目标跟踪、区域安全定义和行为分析等模块,通过边缘计算平台实现实时处理。研究构建了包含多种校园场景的专业数据集,并采用数据增强技术提升模型性能。系统可检测人员、车辆和物品等目标,分析其行为轨迹,评估安全风险并触发告警。实验结果表明,该系统能有效识别校园安全隐患,为安全管理提供智能化解决方案。

一键难忘的博客 505

Ruffle:用Rust重生的Flash模拟器,如何在现代浏览器中完美运行历史Flash内容?

当我们回顾互联网的发展历程,Flash技术曾经是Web动画和交互体验的代名词。然而随着技术的演进,Flash Player已经退出历史舞台,但大量经典的教育内容、游戏和互动应用仍然依赖这一平台。幸运的是,Ruffle项目应运而生——这是一个用Rust语言编写的Flash Player模拟器,它让历史Flash内容在现代浏览器中重新焕发生机。 实际上,Ruffle不仅仅是一个简单的模拟器,它是一个

gitblog_00173的博客 829

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Flash的入门

什么是 Flash Flash 是一种创作工具,设计人员和开发人员可使用它来创建演示文稿、应用程序和其它允许用户交互的内容。Flash 可以包含简单的动画、视频内容、复杂演示文稿和应用程序以及介于它们之间的任何内容。通常,使用 Flash 创作的各个内容单元称为应用程序,即使它们可能只是很简单的动画。您可以通过添加图片、声音、视频和特殊效果,构建包含丰富媒体的 Flash 应用程序。 Fl...

xiaoyaolong520的博客 316

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

flash 脚本3

3、FLASH脚本-绘图及颜色的AS的编写、声音 AS 的编写与控制、时间日期的 AS编写    七、绘图及颜色的AS的编写   在使用 flash 的过程中,难免会进行绘图的操作。除了用工具面板上的工具绘制图形之外, 我们也可以使用 ActionScript 来绘制图形。 如何绘制线段及命令解释 lineStyle(粗细,颜色,透明度) //设置绘制图形的线条粗细、颜色和透明度 Moveto(X

anderberte 785

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: Flex绘图测试程序
下一篇: 积少成多Flash ActionScript 3.0(1) - 基础之数据类型、操作符和流程控制语句
thinker28754
博客等级 码龄25年 81粉丝 303原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值