ActionScript3游戏中的图像编程(连载七)

1.2.1 RGB测试用例的书写

新建一个ActionScript项目,名为ShapeColorTransformTest,我在里面创建几个不同颜色的小圆,观察它们在应用了colorTransform之后的变化。代码如下:

 1 package{
 2 [SWF(width = "800", height = "600")]
 3  public class ShapeColorTransformTest extends Sprite{
 4   private var _testSprite_src:Sprite; //用于测试的显示对象(变换前)
 5   private var _testSprite_dst:Sprite;  //用于测试的显示对象(变换后)   private var _myColorTransform:ColorTransform;  //颜色转换对象
 6   public function ShapeColorTransformTest(){
 7    init();
 8   }
 9   private function init():void{
10    _testSprite_src = getTestSprite();            addChild(_testSprite_src);
11    _testSprite_dst = getTestSprite();
12    _testSprite_dst.x = 200;
13    addChild(_testSprite_dst);
14    applyTransform();
15   }
16   //创建用于测试的显示对象
17   private function getTestSprite():Sprite{
18    var _testSprite:Sprite = new Sprite();
19    var _shape1:Shape = new Shape();  //添加一个黑色的矩形底
20    _shape1.graphics.beginFill(0x000000);
21    _shape1.graphics.drawRect(40, 30, 170, 290);
22    _shape1.graphics.endFill();
23    _testSprite.addChild(_shape1);
24    /*依次添加颜色分别为暗蓝,暗红,暗绿和纯白的4个圆*/
25    _testSprite.addChild(new Circle(50, 0x0000CC, 100, 200, "add"));
26    _testSprite.addChild(new Circle(50, 0xCC0000, 150, 200, "add"));
27    _testSprite.addChild(new Circle(50, 0x00CC00, 125, 250, 1,"add"));
28    _testSprite.addChild(new Circle(50, 0xFFFFFF, 125, 100, 1, add"));
29    return _testSprite;
30   }
31   private function applyTransform():void{
32    _myColorTransform = _testSprite_dst.transform.colorTransform; //初始化颜色变换对象(从显示对象里获取)
33    _myColorTransform.redMultiplier = 1.5;
34    _testSprite_dst.transform.colorTransform = _myColorTransform; //应用到显示对象上(变换后必须重新赋值,否则变换效果不起作用,详情可查阅帮助文档)
35  }
36 }

在后续的章节中,我们会经常使用圆来表示一个点或者创建一个色块。为了便于这一功能的重用,我决定把这个可爱的圆封装成一个Circle类并放到公共类库里(有的书喜欢用Ball来命名这样的类,但我个人认为取名Circle更加合适,因为纯色的圆并没有球的那种立体感):

 1 package com.gemei.display{
 2  public class Circle extends Sprite{
 3  //为节省本书篇幅,我把x,y,alpha, blendMode这些基本属性都封装到Circle类里面了,项目开发中不推荐这么做
 4   public function Circle(radius:Number = 50, color:uint = 0x000000, x:Number = 0, y:Number = 0, alpha:Number = 1, blendMode:String = BlendMode.NORMAL){
 5    super();
 6    this.x = x; this.y = y; this.blendMode = blendMode;
 7    graphics.beginFill(color, alpha);
 8    graphics.drawCircle(0, 0, radius);
 9    graphics.endFill();
10   }
11   }
12 }

代码创建了两个外观一模一样的显示对象,然后添加到舞台上显示(使用BlendMode只是为了方便创建多个色块,后续章节将会详细介绍它),其中一个将会使用ColorTransform进行变换,从而跟不变换的那个进行比较。

ActionScript3游戏中的图像编程(连载七)

时间: 2024-12-30 03:35:58

ActionScript3游戏中的图像编程(连载七)的相关文章

ActionScript3游戏中的图像编程(连载二十)

1.4.2 灰度的计算方法 回过头来看RGB,站在科学的角度来解释,它们确实也有更明亮的理由,因为下面一排色彩反射出来的色光总量是上一排色的两倍.      为此,作者曾自作聪明地发明了一条“原创”的灰度公式: Gray=(r+g+b)/3 哈哈,用色光总量来表达颜色的灰度想必就比较准确了吧!沾沾自喜一番以后,我还试着用这条自创的定律来转换这张测试图片,上下色块的灰度果然拉开了,可是很不幸地,左右相邻,边界分明的色块依然粘连在一块(图 1.30). 图 1.30 笔者“自创”的灰度转换 显然此法

ActionScript3游戏中的图像编程(连载二十一,第1章完)

1.4.3 用灰度/明度指导色彩搭配 试着只通过调整不等于0的通道,让上一排的色彩在灰度上保持一致,把三个颜色分别代入到心理学公式.得 Gray(red) = r * 0.299      Gray(green) = g * 0.587      Gray(blue) = b * 0.114 让它们灰度相等,则 r * 0.299 = g * 0.587 = b * 0.114 可见,b值一定最大,不妨让b取最大值255,求得r=97, g=50.把这两个值分别应用到红和绿两个色块上. 绿色不再

ActionScript3游戏中的图像编程(连载十九)

1.4 浅析亮度与灰度/明度的关系 进入正题之前,先来了解一下灰度/明度. 1.4.1 灰度/明度的概念及其与HSB亮度的异同 在很多场合,灰度与明度的概念完全等价. “灰度”最初来源于摄影领域,在彩色显像技术问世以前,拍摄出来的照片只有黑,白,灰三类颜色,在这种黑白照片里,只有白色.黑色以及灰色的点能完好无损地显示出来,其它颜色将根据其亮度呈现出不同深度的灰色.亮度越大灰色越浅,反之越深.把黑与白色之间分成若干级,称为“灰度等级”.能呈现的灰度等级愈多,画面的层次感就愈丰富. 所以,从彩色转黑

[原创]ActionScript3游戏中的图像编程(连载三十二)

2.2.5 投影距离的模拟 Photoshop投影样式面板的下一个属性是距离,它也存在于Flash的投影滤镜选项中.两者初始值一致,经笔者测试,两者在效果实现和数值意义方面基本一致.Flash不需要对默认参数进行更改. 下一项是扩展,乍一看,在Flash中并没有找到对应项.但仔细观察,在Photoshop投影样式的基础选项里,除了alpha以外,就只剩该属性用了百分比. [原创]ActionScript3游戏中的图像编程(连载三十二),布布扣,bubuko.com

[原创]ActionScript3游戏中的图像编程(连载二十九)

2.2.2 Photoshop投影大小的模拟 投影没有之前那么浓了,但是跟Photoshop里的效果差别还挺大,因为在Photoshop里我们还设置了另外一个属性:大小. Flash里似乎找不到它的影子,我们用排除法来进行定位,Photoshop投影样式的大小属性以像素为单位,Flash投影滤镜的选项只有距离和那对被“手铐”扣住的模糊属性符合条件,而Photoshop里也有一个距离,所以我们定位到模糊属性(图 2.15). 图 2.15 Flash投影的模糊属性 分别调整Photoshop的大小

[原创]ActionScript3游戏中的图像编程(连载三十)

2.2.3 Photoshop/Flash中的投影品质 与Photoshop不同,Flash的滤镜在输出的作品中仍会实时通过FlashPlayer进行渲染,所以性能显得尤为重要,在迫不得已的情况下还要以牺牲品质作为代价.所以,Flash的品质下拉框引起了我的注意,我试着把品质调整为“高”,效果就可以跟Photoshop的媲美了.(图 2.18) 对于品质,Flash的帮助文件也给出了解释,品质的高低差别在FlashPlayer内部是通过对低品质滤镜的使用次数不同来进行控制的,低品质只模糊1次,高

[原创]ActionScript3游戏中的图像编程(连载三十一)

2.2.4 Photoshop转Flash的投影角度换算 继续往下看,Photoshop不透明度选项下面是投影角度,默认值是120°,而Flash里角度是45°,两者相差将近90°,投影角度却相近,为什么?让我们把Flash的投影滤镜也设置成120°.(图 2.20) 图 2.20 角度值等于120的Flash投影 投影跑左边去了,x方向与Photoshop里的投影位置截然相反.经观察,Flash投影的角度与ActionScript的坐标系完全一致,它等于当前方向与水平线的夹角,顺时针为正,逆时

《ActionScript3游戏中的图像编程》(连载十九)

1.4 浅析亮度与灰度/明度的关系 进入正题之前,先来了解一下灰度/明度. 1.4.1 灰度/明度的概念及其与HSB亮度的异同 在很多场合,灰度与明度的概念完全等价. "灰度"最初来源于摄影领域,在彩色显像技术问世以前,拍摄出来的照片只有黑,白,灰三类颜色,在这种黑白照片里,只有白色.黑色以及灰色的点能完好无损地显示出来,其它颜色将根据其亮度呈现出不同深度的灰色.亮度越大灰色越浅,反之越深.把黑与白色之间分成若干级,称为"灰度等级".能呈现的灰度等级愈多,画面的层次

ActionScript3游戏中的图像编程(连载二十一)

1.4.3 用灰度/明度指导色彩搭配 试着只通过调整不等于0的通道,让上一排的色彩在灰度上保持一致,把三个颜色分别代入到心理学公式.得 Gray(red) = r * 0.299 Gray(green) = g * 0.587 Gray(blue) = b * 0.114 让它们灰度相等,则 r * 0.299 = g * 0.587 = b * 0.114 可见,b值一定最大,不妨让b取最大值255,求得r=97, g=50.把这两个值分别应用到红和绿两个色块上. 绿色不再显得刺眼,整体感也因