- 浏览: 1084899 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (695)
- 心情日记 (14)
- AS开发工具 (12)
- 文章转载 (99)
- AIR (5)
- 问题总结 (46)
- SWF格式 (7)
- 测试总结 (10)
- 外文资料 (9)
- 算法技术 (33)
- AS3常用开源库 (43)
- 源码范例 (102)
- FLEX (72)
- FLASH 优化 (33)
- 游戏开发 (49)
- 开发技术 (11)
- 工作应用 (34)
- AS3收集 (140)
- WebBase (0)
- 开发构想 (4)
- 设计模式 (2)
- 框架和框架范例 (19)
- RED5 (3)
- java开发 (3)
- JAVA (1)
- FLASH-3D (23)
- 3D (6)
- 书籍 (10)
- 业界信息资料 (3)
- C# (1)
- JavaScript (12)
- HTML5 (6)
- Flixel (1)
- D5Power RPG网页游戏引擎 (0)
- ColorMatrixFilter - 获得相应颜色的色调 函数 (0)
- Starling (0)
最新评论
-
老顽童203:
字体
水果忍者鼠标跟随特效制作[转载] -
hairball00:
[转] 放出超多的Flash组件源代码 -
he74552775:
flash AS3 RegExp简单功能用法(转) -
hanshuai1232000:
第四点,有利也有弊,等你做了大型的aprg,你就知道了
[转]位图数据内存优化 -
yangfantao:
太感谢
[转] 放出超多的Flash组件源代码
本帖最后由 Ryanliu 于 2009-3-24 09:53 编辑
http://uh.9ria.com/link.php?url=http://bbs.9ria.com/viewthread.php%3Ftid%3D23381
先看看这个例子:
http://www.ryan-liu.com/demo/bitmapdata/fancydraw.html
做上面这个效果,AS的技术点主要有三个,Matrix变形,ColorTransform和BitmapData的draw方法。这三个技术点串起了做BitmapData最基本的逻辑——也是最基本的思路。我先把draw的说明放这里:
draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void
复制代码
先从思路说起。源码里除了被采样的动画是做在MC里,其他的效果只是通过一个draw来搞定的。我之前的例子里也用到了类似的效果,可以叫“残影”,“拖光”,“雾化”……怎么称呼都成的一个效果。完成这种效果的思路非常简单,为了更新采样动画,在每一个enterFrame里我们都会“重绘”,也就是把采样MC要draw在位图上。在BitmapData上draw跟你在纸上画画是一样的。假使你在一张纸上,每秒都沿着同一条直线方向画一个圆,如果你不另换一张纸,或者擦掉之前画的,那么你画的将是一串圆。同样,在BitmapData上不断的draw一个带动画的MC,你会把整个动画的过程都留在BitmapData上。但留整个过程不是我们的目的,所以我们加一个小技巧进去,我们把原来的BitmapData先加暗(或变淡),然后再重绘MC。这样之前的图就会逐渐暗(淡)掉,就形成了如上例中的效果。和以前在Flash里做残影相比,BitmapData实现真是再自然不过了。
怎么实现变暗/变淡呢,给BitmapData施加一个ColorTransform即可,如:
ColorTransform的参数调节跟Flash属性面板里调色(Color)的高级调色是一样的,非常简单直观。
以上就完成了做BitmapData效果的基本思路。图像描述物体的两个要素是颜色和形状,颜色已经搞定了,我们再试试变形。draw能通过设置一个matrix来完成变形。你可以看看Flash的帮助,如果你还不了解Matrix。就上例的效果,我给出一个简单的算法:
sw和sh是画布的宽和高,其实这就是在Matrix以中心点缩放的算法上略加了点变化。改改里面的参数,会看到更好玩的效果。
配合matrix和colortransform,BitmapData的draw就可以实现上例的效果了。这就构成了BitmapData效果的最基本思路。你还可以加入滤镜使效果更丰富,上例中我加了一个blur滤镜。完整的代码请看附件。
补充两点:
- 设置blendMode也可以实现不同的效果,自己试试
- “我不要残影怎么办!”,那就在重绘前将画布清空,用fillRect或干脆new一个BitmapData
最后:或许有人问,为啥例子中画面上部和下部看起来不同。这个我也很纳闷,而且一直没找到解释。也许只能让Adobe来回答了……这个问题已解决,根据ycccc8202的建议,用另外一个BitmapData复制画布的画面,让画布draw替代的BitmapData就不会出现问题。
补充:
为了美观,我网站上的例子都是比较综合性的应用。而我近期所发都只针对BitmapData相关知识。主要的用意在于专贴专讲。如果你有心学,越往后越会发现完成从前的例子易如反掌。如果大家对我所用的例子中其他技术点感兴趣,可以回复告知或密我。如果合适我另开贴逐步讲解。我的出发点是授人以鱼不如授人以渔,从我提供的源码到我所举的例子,最多你只多思考一小时而已。另外,悄悄的说一句,现在破解工具这么发达,swf还有秘密可言吗。
我所发的内容大部分是从我们团队的基础培训资料而来,从我们内部一年多的培训来看,这种专题专讲的方式的效果很好,只需要一点耐心而已。
http://uh.9ria.com/link.php?url=http://bbs.9ria.com/viewthread.php%3Ftid%3D23381
先看看这个例子:
http://www.ryan-liu.com/demo/bitmapdata/fancydraw.html
做上面这个效果,AS的技术点主要有三个,Matrix变形,ColorTransform和BitmapData的draw方法。这三个技术点串起了做BitmapData最基本的逻辑——也是最基本的思路。我先把draw的说明放这里:
draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void
复制代码
先从思路说起。源码里除了被采样的动画是做在MC里,其他的效果只是通过一个draw来搞定的。我之前的例子里也用到了类似的效果,可以叫“残影”,“拖光”,“雾化”……怎么称呼都成的一个效果。完成这种效果的思路非常简单,为了更新采样动画,在每一个enterFrame里我们都会“重绘”,也就是把采样MC要draw在位图上。在BitmapData上draw跟你在纸上画画是一样的。假使你在一张纸上,每秒都沿着同一条直线方向画一个圆,如果你不另换一张纸,或者擦掉之前画的,那么你画的将是一串圆。同样,在BitmapData上不断的draw一个带动画的MC,你会把整个动画的过程都留在BitmapData上。但留整个过程不是我们的目的,所以我们加一个小技巧进去,我们把原来的BitmapData先加暗(或变淡),然后再重绘MC。这样之前的图就会逐渐暗(淡)掉,就形成了如上例中的效果。和以前在Flash里做残影相比,BitmapData实现真是再自然不过了。
怎么实现变暗/变淡呢,给BitmapData施加一个ColorTransform即可,如:
var ctm:ColorTransform = new ColorTransform(.9,.9,.9); //逐渐变黑 var ctm:ColorTransform = new ColorTransform(1,1,1,.9); //逐渐变淡 var ctm:ColorTransform = new ColorTransform(.9,.8,.8); //你自己猜
ColorTransform的参数调节跟Flash属性面板里调色(Color)的高级调色是一样的,非常简单直观。
以上就完成了做BitmapData效果的基本思路。图像描述物体的两个要素是颜色和形状,颜色已经搞定了,我们再试试变形。draw能通过设置一个matrix来完成变形。你可以看看Flash的帮助,如果你还不了解Matrix。就上例的效果,我给出一个简单的算法:
var transformMatrix:Matrix = new Matrix(); var incX:int = sw/40; var incY:int = sh/40; transformMatrix.a = (sw + incX)/sw; transformMatrix.d = (sh + incY)/sh; transformMatrix.tx = -incX/2; transformMatrix.ty = -incY/2;
sw和sh是画布的宽和高,其实这就是在Matrix以中心点缩放的算法上略加了点变化。改改里面的参数,会看到更好玩的效果。
配合matrix和colortransform,BitmapData的draw就可以实现上例的效果了。这就构成了BitmapData效果的最基本思路。你还可以加入滤镜使效果更丰富,上例中我加了一个blur滤镜。完整的代码请看附件。
补充两点:
- 设置blendMode也可以实现不同的效果,自己试试
- “我不要残影怎么办!”,那就在重绘前将画布清空,用fillRect或干脆new一个BitmapData
最后:或许有人问,为啥例子中画面上部和下部看起来不同。这个我也很纳闷,而且一直没找到解释。也许只能让Adobe来回答了……这个问题已解决,根据ycccc8202的建议,用另外一个BitmapData复制画布的画面,让画布draw替代的BitmapData就不会出现问题。
补充:
为了美观,我网站上的例子都是比较综合性的应用。而我近期所发都只针对BitmapData相关知识。主要的用意在于专贴专讲。如果你有心学,越往后越会发现完成从前的例子易如反掌。如果大家对我所用的例子中其他技术点感兴趣,可以回复告知或密我。如果合适我另开贴逐步讲解。我的出发点是授人以鱼不如授人以渔,从我提供的源码到我所举的例子,最多你只多思考一小时而已。另外,悄悄的说一句,现在破解工具这么发达,swf还有秘密可言吗。
我所发的内容大部分是从我们团队的基础培训资料而来,从我们内部一年多的培训来看,这种专题专讲的方式的效果很好,只需要一点耐心而已。
- bitmapdata_draw.rar (70.9 KB)
- 下载次数: 20
发表评论
-
HttpStatusConfig --一个HTTP 协议返回的 解析说明类
2012-04-18 16:40 0package guwanyuan.qicool.game ... -
HTTP/1.1协议规范(中文归纳版)
2012-04-18 16:39 2113一、介绍(introduction) ... -
[转] [Flash/Flex] 加载SWF性能VS影片剪辑性能
2012-03-15 22:29 0http://bbs.9ria.com/viewthread. ... -
关于富士通windows 7家庭普通板升级为windows 7旗舰版
2012-03-05 14:51 2015windows7普通家庭版不能一下升级到windows7旗舰版 ... -
水果忍者鼠标跟随特效制作[转载]
2012-03-01 16:06 2449实现这效果其实比较简单,主要是思路~! package ... -
请问如何才能让加载到一半的SWF不自动播放
2012-02-29 03:06 1538我用loader加载l=new Loader(); ... -
禁止输入文本可以粘贴
2012-02-10 13:15 2316//禁止输入文本粘贴动作 private static ... -
江湖情缘游戏里的跳的类
2012-02-08 23:55 0package com.app.role.montions ... -
[教程] 路点导航(Waypoint Navigation)
2011-12-31 00:51 0前言:这个不难,所以知道的童鞋不要喷,不知道的童鞋也不要怕,要 ... -
ARPG游戏引擎设计思路
2011-12-31 00:48 00.整体结构 下载 (32.92 KB ... -
Embed绑定XML与txt文本文件
2011-12-28 15:54 4648使用Embed标签可以将图片绑定到swf中并显示,那么我 ... -
Flash_Rich_Text_Editor(完美的富文本编辑器)
2011-12-27 17:55 0Flash_Rich_Text_Editor(完美的富文 ... -
弹弹堂测试
2011-12-08 04:21 0弹弹堂测试弹弹堂测试 -
一些DEMO
2011-11-28 17:42 0一些DEMO一些DEMO -
Matrix学习
2011-11-28 16:51 0Matrix学习 -
[转]三次贝尔曲线
2011-11-10 01:09 1923http://bbs.9ria.com/viewt ... -
[心得] 完美解决as3在ie中初始化时stageWidth和stageHeight为0的问题
2011-11-03 00:46 2938先看下面的一段脚本,这是比较经典的初始化脚本: pa ... -
五子棋算法详解
2011-10-31 04:14 0五子棋算法详解五子棋算法详解五子棋算法详解 -
[转]服务器端ActionScript语言参考
2011-10-31 00:29 0服务器端ActionScript语言参考 -
[转]FLASH与JS序列简单应用
2011-10-28 01:03 2086FLASH与JS序列简单应用 (一) 用swfob ...
相关推荐
BitmapData.draw方法是ActionScript 3.0中的一个重要功能,主要用在Adobe Flash环境中处理位图数据。这个方法允许开发者将一个显示对象(如Sprite、MovieClip或Bitmap)的可视内容复制到BitmapData对象上,从而实现...
bitmapData.draw(displayObject); ``` 4. 读取和修改像素 BitmapData提供了一些方法来读取和修改单个像素,如`getPixel()`和`setPixel()`,以及更高效地处理多像素的`getPixels()`和`setPixels()`。例如: ```...
- BitmapDataExample3.as和BitmapDataExample3.swf:可能演示了使用BitmapData.draw()方法绘制DisplayObject,并可能展示了不同的绘制选项,如旋转、缩放或着色。 - BitmapDataExample5.as和BitmapDataExample5.swf...
在C#中,`BitmapData`类是用于高效地访问和操作位图图像像素的核心类。这个类在处理大量像素操作时尤其有用,因为它允许直接访问图像数据的内存缓冲区,而无需通过昂贵的属性访问。`BitmapData`提供了一种优化的方法...
BitmapData.zip 文件是一个包含 Delphi 开发中使用的 BitmapData 单元的压缩包。这个单元主要是为了实现图像处理和颜色查找功能,对于 Delphi 开发者来说,它提供了一个高效且方便的工具来搜索和操作图像数据。让...
BitmapData.pas 和 kbKernel.pas 这两个文件在IT领域中主要涉及到图像处理和自动化操作,特别是游戏或图形应用中的找图找色功能。在本文中,我们将深入探讨这两个关键概念及其在实际编程中的应用。 首先,...
delphi 找图找色 BitmapData.pas 使用方法请到原作者yeye55的blog查看, http://yeye55blog.blog.163.com/blog/static/19724102120111043252016/
它可能包含了开发者对代码结构、主要模块、关键算法的解释,以及一些开发过程中的心得和技巧,对于学习和改进源码非常有帮助。 总的来说,"植物大战僵尸"的AS3(CS5)源码是一个生动的实例,展示了AS3在游戏开发中...
源码中会用到BitmapData对象来处理位图数据,以及MovieClip对象来管理动画和交互。 4. **事件监听**:在Flash中,通过添加事件监听器来响应用户的鼠标点击、拖动等操作。源码中会看到如“addEventListener”这样的...
as2.0 模拟火焰 import flash.display.*...var blueSpot: BitmapData = new BitmapData( clipBounds.xMax, clipBounds.yMax, true, 0 ) blueSpot.draw( blueSpotClip, new Matrix() ) blueSpotClip.removeMovieClip()
在本文中,我们将深入探讨Flash图片放大技术的原理和实现方式,主要基于提供的"Flash图片放大技术源码实例.rar"中的源代码。该实例通过点击图片右下角的放大按钮,实现了图片的平滑放大效果,它巧妙地利用了两幅不同...
AS3.0游戏18例源码包是一个针对初学者设计的资源集合,它提供了18款基于ActionScript 3.0(AS3.0)编程语言开发的简单小游戏的完整源代码。这个源码包旨在帮助新手快速理解和掌握AS3.0在游戏开发中的应用。...
此外,源码中可能还包括了一些优化技巧,比如缓存AsBitmap或使用位图数据(BitmapData)进行绘图,以提高性能。如果源码使用了DisplayObject的cacheAsBitmap属性,那么在动画运行过程中,只有首次绘制时会消耗计算...
BitmapData类实例 运用噪声制作一些好的效果 源码
【720 as 3D Flash 源码详解】 Flash AS3 3D 技术是Adobe Flash Platform中用于创建交互式3D图形的一种方式。这个“720 as 3D flash 源码”是一个适用于初学者的实例,它提供了在AS3(ActionScript 3)环境中构建3D...
EaselJS的位图数据EaselJS的BitmapData将AS3(例如BitmapData)添加到EaselJS。例1 // create BitmapData by HTMLImageElement_bmd01 = new createjs.BitmapData(HTMLImageElement);_bitmap01 = new createjs.Bitmap...
在 Flash 环境中,我们可以使用`Camera.get()`获取摄像头,`BitmapData.draw()`捕获图像,然后将图片编码为base64,这与HTML5的`canvas.toDataURL()`方法类似,可以将图像转换成base64字符串,方便在网络上传输。...
标签 "flash源码" 提醒我们关注的重点是代码本身,学习和理解代码结构、编程技巧以及如何利用ActionScript来实现特定功能。对于初学者,这可能是了解ActionScript语法和面向对象编程的一个好例子。而对于有经验的...
Flex虚拟翻书源码是一种基于Adobe Flex技术实现的互动式电子书应用,它模拟了真实的翻书效果,为用户提供了隔空翻页的体验。在本文中,我们将深入探讨Flex虚拟翻书源码的工作原理、核心技术和实现方法,以及如何进行...