热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ActionScript3(AS3)类库学习之(七)——Transform二维平面转换

一.TransformTransform属于flash.geom包,DisplayObject用它来进行颜色的转换和图形图像的改变颜色,放大,缩小,旋转,移动等操作。它可以用作2D变换,也可以进行3D

一.Transform
Transform属于flash.geom包,DisplayObject用它来进行颜色的转换和图形图像的改变颜色,放大,缩小,旋转,移动等操作。它可以用作2D变换,也可以进行3D变换,我暂时只关注2D变换了
1.colorTransform:可以用来得到当前DisplayObject对象的颜色变换
2.concatenatedColorTransform:表示此对象及其所有父级对象的组合颜色转换,回到根级别。如果在不同级别上应用了不同的颜色转换,则将其中所有转换计算成此属性的颜色转换。
3.matrix:可以用来得到当前DisplayObject对象的转换矩阵
4.concatenatedMatrix:表示此对象及其所有父级对象的组合转换矩阵,回到根级别。如果在不同级别上应用了不同的转换矩阵,则将其中每个矩阵连接成此属性的一个矩阵。

要改动Transform中的colorTransform或matrix中的某个属性,不能直接该,需要将改动好的对象整个重新赋给colorTransform或matrix。


二.ColorTransform
ColorTransform属于flash.geom包,用于调整Object四个通道的颜色,即Red,Green,Blue,Alpha。
计算规则如下:
newred = (oldred * redMultiplier) + redOffset
newgreen = (oldgreen * greenMultiplier) + greenOffset
newblue = (oldred * blueMultiplier) + blueOffset
newalpha = (oldalpha * alphaMultiplier) + alphaOffset
新通道值的取值范围(0,255),对于小于0的设为0,对于大于255的,设置为255。
1.构造方法及其默认值
ColorTransform(redMultiplier:Number = 1.0, greenMultiplier:Number = 1.0, blueMultiplier:Number = 1.0, alphaMultiplier:Number = 1.0, redOffset:Number = 0, greenOffset:Number = 0, blueOffset:Number = 0, alphaOffset:Number = 0)

2.属性
redMultiplier, greenMultiplier, blueMultiplier,redOffset, greenOffset和 blueOffset控制颜色转换,可以通过改变这些属性来改变颜色转换,另外还可以通过设置color属性重置这些属性。
alphaMultiplier和alphaOffset控制alpha转换,如果DisplayObject的alpha值改变,这两个值会受影响。

3.转换组合
tran1.concat(tran2);
计算规则如下
Multiplier1 = Multiplier1 * Multiplier2;
Offset1 = Multiplier1 * Offset2 + Offset1;

4.图例

我们用下面的swf来了解一下ColorTransform的效果吧。



三.Matrix
Matrix属于flash.geom包,用于对DisplayObject进行放大,缩小,旋转,移动等操作,它是如下结构的3*3矩阵


其中 a, b, c, d, tx, 和 ty都是Matrix的属性,可以进行设置。
用Matrix相当于进行如下操作
x = a*x + c*y + tx;
y = b*x + d*y + ty;

1.构造方法及其默认值
Matrix(a:Number = 1, b:Number = 0, c:Number = 0, d:Number = 1, tx:Number = 0, ty:Number = 0)
setTo(aa:Number, ba:Number, ca:Number, da:Number, txa:Number, tya:Number)

2.几种常见变换
a.将DisplayObject向右移dx,向下移dy。
translate(tx:Number, ty:Number)
相当于将下面的Matrix应用于原Matrix


b.将DisplayObject的宽放大为sx倍,长放大为sy倍。
scale(sx:Number, sy:Number)
相当于将下面的Matrix应用于原Matrix


c.将DisplayObject旋转一定的角度
rotate(angle:Number)
angle = degree * Math.PI / 180;
相当于将下面的Matrix应用于原Matrix


d.求原转换矩阵的逆矩阵,可以用来取消原转换矩阵对DisplayObject的影响
invert()

e.将矩阵重置为单位矩阵
identity()
相当于将原Matrix设置为下面的Matrix


f.矩阵相乘
matrix1.concat(matrix2)
相当于
matrix2*matrix1

g.做综合运算
createBox(scaleX:Number, scaleY:Number, rotation:Number = 0, tx:Number = 0, ty:Number = 0)
相当于

var matrix:Matrix = new Matrix();
matrix.identity();
matrix.rotate(rotation);
matrix.scale(scaleX,scaleY);
matrix.translate(tx,ty);


3.Matrix计算
将Matrix应用于点
transformPoint(Point)
deltaTransformPoint(Point)忽略tx,ty

4.详解createGradientBox
获取用于beginGradientFill()和lineGradientStyle()方法中的矩阵
var matrix:Matrix = createGradientBox(width:Number, height:Number, rotation:Number = 0, tx:Number = 0, ty:Number = 0)
等价于

var num:Number = 0.0006103515625
var tmpmatrix:Matrix = new Matrix(width*num,0,0,height*num,width/2+tx,height/2+ty);
var matrix:Matrix = new Matrix();
matrix.rotate(angle);
matrix.concat(tmpmatrix);


这个矩阵用在beginGradientFill()和lineGradientStyle()方法中的效果相当于用width和height来控制渐变的变化区域大小,用tx,ty来控制变化的临界点,用rotation来控制变化的方向。

如下图,矩形的长宽都是100,传给createGradientBox的参数为createGradientBox(100,100,Math.PI * 45 / 180,0,0)


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文整理了Java中org.apache.solr.common.SolrDocument.setField()方法的一些代码示例,展示了SolrDocum ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
author-avatar
陈初刚5689
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有