您的位置: 首页 > 技术文档 > 多媒体制作 > Making Things Move 第四章
FLASH小游戏开发 第二节 回到列表 Making Things Move 第三章
 Making Things Move 第四章

作者:alan98 时间: 2008-05-15 文档类型:翻译 来自:蓝色理想

第 1 页 渲染技术 [1]
第 2 页 渲染技术 [2]
第 3 页 渲染技术 [3]
第 4 页 渲染技术 [4]
第 5 页 渲染技术 [5]
第 6 页 渲染技术 [6]
第 7 页 渲染技术 [7]
第 8 页 渲染技术 [8]
第 9 页 渲染技术 [9]

新的数值类型:int 和 uint

在以前的 ActionScript 版本中,只有一种数值类型 Number,它可以表示正整数,负整数或是浮点数(或0)。我们已经习惯了这种自由的用法,但是现在多增加的两种数值类型可以让我们的代码更加清晰。

第一个新增加的数值类型是 int(整型),这个类型可以为正整数或负整数或零。如果我们把一个浮点数值声明为 int 类型的话,小数部分会自动被去掉。比如,把 1.9 声明为 int,结果为 1。因此,当我们确定只使用整数时,就把变量声明为 int ,在循环中用于计数的变量一般应该是 int 。下面这段代码中,i变量永远不会得到浮点数值,这时使用int类型就有了意义。

for(var i:int = 0; i < 100; i++) {
// do something in here!
}

第二个新的类型是 uint(无符号整型),“无符号”意思是没有正负(+-)号,永远为正数。32位颜色值在 AS 3 中总是以 uint 类型存储,这是因为无符号整型比(有符号)整型能够保留更多的数值。 Int 和 uint 都可以存储32位数,这个数值大于40亿,但是 int 有一个特殊位用于存储符号(+-),所以只有31位数(大于20亿),这样就可以标记正数或负数了。所以,使用int 类型声明一个正的32位色彩值就显得太大了!如果用了又会怎样?让我们来试试:

var color1:int = 0xffffffff;
trace(color1);
var color2:uint = 0xffffffff;
trace(color2);

0xFFFFFFFF 的值相当于十进制的 4,294,967,295,因为这个值对于 int 来说太大了,所以结果被“反转”了过来变成了 -1!当然这不是我们所期望的结果。如果使用 uint 类型的话,就没问题了。因此,由于色彩值永远都是正数,并有可能超出 int 的值域范围,所以要使用 uint 来存储它们。

色彩合成

如何将红、绿、蓝三种颜色值组成一个有效的颜色值,这是个普遍的问题。假设有三个变量 red,green,blue,每个变量里面保存一个0到255之间的数。下面是这个公式:
color24 = red<<16 | green<<8 | blue;
加入透明度后,建立一个32位色彩值,公式如下:
color32 = alpha << 24 | red << 16 | green << 8 | blue;

这里用到了两个位操作符,大家以前可能没有接触过。位操作是对二进制(0或1)进行的操作,对于24位色来说,如果把颜色值的每一位都列出来,就会得到一串由24个0或1组成的字串。把十六进制 0xRRGGBB 分解成二进制后是这样的:RRRRRRRRGGGGGGGGBBBBBBBB,我们看到有8位red,8位green,8位blue,也就是说8位二进制数等于256。

在色彩合成公式中,第一个位操作符是 << ,是一个按位左移操作符,该操作是将二进制数值向左侧移动。比如,红色值(red)为0xFF或255,可以由二进制表示为:
11111111
将它向左移动16位,结果是:
111111110000000000000000

在24位色彩中,它表示红色,转换为二进制后为 0xFF0000,是纯红色。
下面,假设有一个绿色值(green)为 0x55(十进制85),二进制表示为:
01010101
将它向左移动8位后,结果为:
000000000101010100000000

这样一来,这8位数完全移动到了绿色值的范围。

最后,假设一个蓝色值为0xF3(十进制243),二进制表示为:11110011。因为它们都处在蓝色(blue)的范围,所以不需要再去移动它。这样我们总共就拥有了三组数:
111111110000000000000000
000000000101010100000000
000000000000000011110011

可以简单地将它们加起来,成为一个24位数,但是,还有一种更好更快的方法:使用或(OR)运算,符号是 | 。它会将两组数的每个二进制位进行比较,如果两个之中有一个数为1,那么结果就为1,如果两个数都为0,那么结果就为0。可以使用或(OR)运算将 red,green,blue 的值相加起来,也可以这么说“如果这个数或这个数或这个数中有一个数等于1,那么结果就为1”。最终结果为:
111111110101010111110011
将这个数转换为十六进制就等于 0xFF55F3 。当然,我们无法看到这些二进制位,也不会与这些0或1打交道,只需要学会这种写法:
var color24:Number = 0xFF << 16 | 0x55 << 8 | 0xF3;
十进制写法是:
var color24:Number = 255 << 16 | 85 << 8 | 243;
Flash 并不关心人们使用的是十进制数还是十六进制数。

同样,还可以将 red,green,blue 的值全部转换为十六进制的字符串,然后将它们连接成一条很长的字符串,最后再把它们转换为十六进制数。但是,如果这样做的话会很麻烦,而且使用字符串操作会非常慢。相反,使用二进制操作是 ActionScript 中最快的运算,因为它们属于低级运算。

对于32位数,其实道理也是一样的,加入8位 alpha(透明度)通道并将其向左移24位。例如,有一组32位数为0xFFFF55F3,将 alpha 值向左移动24位,结果如下:
11111111111111110101010111110011
前8位数表示透明度,后面的 red,green,blue 值与前面的一样。

出处:蓝色理想
责任编辑:bluehearts

上一页 渲染技术 [1] 下一页 渲染技术 [3]

◎进入论坛RIA设计与应用版块参加讨论

相关文章 更多相关链接
FLASH小游戏开发 第二节
用photoshop制作文字波动动画
制作旗帜飘扬动画
Making Things Move 第三章
Silverlight制作逐帧动画
作者文章
Making Things Move 第三章
Making Things Move 第二章
Making Things Move 第一章
贪吃蛇游戏代码翻译
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
浅谈JavaScript编程语言的编码规范
如何在illustrator中绘制台历
Ps简单绘制一个可爱的铅笔图标
数据同步算法研究
用ps作简单的作品展示页面
CSS定位机制之一:普通流
25个最佳最闪亮的Eclipse开发项目
Illustrator中制作针线缝制文字效果
Photoshop制作印刷凹凸字体
VS2010中创建自定义SQL Rule
>> 分页 首页 前页 后页 尾页 页次:2/91个记录/页 转到 页 共9个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2