`
hereson
  • 浏览: 1450998 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

变形实例-source

阅读更多

涂抹原理

橡皮擦原理

import flash.geom.Point;
//产生多个图形
function crtShapes(_num:Number) {
        for (var i:Number = 0; i<_num; i++) {
                var line:MovieClip = _root.createEmptyMovieClip("line"+i, _root.getNextHighestDepth());
                line.color_num = random(0xFFFFFF);
                line.f_color_num = random(0xffffff);
                line._rotation = random(360);
                /**/
                line.onEnterFrame = function() {
                        this._rotation++;
                };
                line._x = random(Stage.width);
                line._y = random(Stage.height);
                line.points = new Array();
                crtDots(line, 10);
        }
}
//产生每个图形的绘图坐标点序列
function crtDots(holder:MovieClip, _num:Number) {
        var r:Number = 20+random(10);
        var da:Number = Math.PI*2/(_num-1);
        holder.points.push(new Point(r*Math.sin(da), r*Math.cos(da)));
        for (var i:Number = 1; i<_num; i++) {
                var temp_r:Number = r+random(5);
                var ps:Point = new Point(temp_r*Math.sin(da*i), temp_r*Math.cos(da*i));
                holder.points.push(ps);
        }
        drawShape(holder);
}
//绘制图形
function drawShape(_mc:MovieClip) {
        _mc.clear();
        _mc.lineStyle(1, _mc.color_num, 100);
        _mc.beginFill(_mc.f_color_num, 50);
        _mc.moveTo(_mc.points[0].x, _mc.points[0].y);
        for (var i:Number = 1; i<_mc.points.length; i++) {
                _mc.lineTo(_mc.points[i].x, _mc.points[i].y);
        }
}
//利用mc1去涂抹mc2
function leave(mc1:MovieClip, mc2:MovieClip) {
        if (mc1.hitTest(mc2)) {
                //生成全局坐标序列pss
                var c_pos:Point = mc1.pos.clone();
                var pss:Array = new Array();
                for (var i = 0; i<mc2.points.length; i++) {
                        var obj:Point = mc2.points[i].clone();
                        mc2.localToGlobal(obj);
                        pss.push(new Point(obj.x, obj.y));
                }
                //检查距离,同时生成被修改id序列
                var change_id:Array = new Array();
                for (var i = 0; i<pss.length; i++) {
                        var dis:Number = Point.distance(c_pos, pss[i]);
                        if (dis == 0) {
                                dis = .1;
                        }
                        if (dis<mc1.r) {
                                change_id.push(i);
                                if (mc1.type == "out") {
                                        var rx:Number = (pss[i].x-c_pos.x)/dis;
                                        var ry:Number = (pss[i].y-c_pos.y)/dis;
                                        pss[i].x += (mc1.r-dis)*rx*mc1.a/5;
                                        pss[i].y += (mc1.r-dis)*ry*mc1.a/5;
                                } else if (mc1.type == "in") {
                                        var rx:Number = (pss[i].x-c_pos.x)/dis;
                                        var ry:Number = (pss[i].y-c_pos.y)/dis;
                                        pss[i].x -= (mc1.r-dis)*rx*mc1.a/5;
                                        pss[i].y -= (mc1.r-dis)*ry*mc1.a/5;
                                } else if (mc1.type == "rotate") {
                                        var angle:Number = Math.atan2(pss[i].x-c_pos.x, pss[i].y-c_pos.y);
                                        var d_angle:Number = (mc1.r/dis-1)*(1-mc1.a)*.05+.02*mc1.a;
                                        pss[i].x = c_pos.x+dis*Math.sin(angle+d_angle);
                                        pss[i].y = c_pos.y+dis*Math.cos(angle+d_angle);
                                } else if (mc1.type == "rotate2") {
                                        var angle:Number = Math.atan2(pss[i].x-c_pos.x, pss[i].y-c_pos.y);
                                        var d_angle:Number = -(mc1.r/dis-1)*(1-mc1.a)*.05-.02*mc1.a;
                                        pss[i].x = c_pos.x+dis*Math.sin(angle+d_angle);
                                        pss[i].y = c_pos.y+dis*Math.cos(angle+d_angle);
                                }
                                //update temp_mc  
                                temp_mc.moveTo(pss[i].x, pss[i].y);
                                temp_mc.lineTo(pss[i].x, pss[i].y+.5);
                        }
                }
                //将被改变的关键点坐标装化到mc2的local坐标,并回填到mc2的points中去
                if (change_id.length) {
                        for (var i = 0; i<change_id.length; i++) {
                                var obj:Point = pss[change_id[i]].clone();
                                mc2.globalToLocal(obj);
                                mc2.points[change_id[i]] = new Point(obj.x, obj.y);
                        }
                        drawShape(mc2);
                }
        }
}
//涂抹初始化
function initDoub(_type:String, r:Number, a:Number) {
        var doub:MovieClip = _root.createEmptyMovieClip("doub", _root.getNextHighestDepth());
        doub.type = _type;
        doub.r = r;
        doub.a = a;
        doub.lineStyle(r*2, 0, 20);
        doub.lineTo(.5, 0);
        doub.startDrag(true);
        doub.onPress = function() {
                mouse_down = true;
        };
        doub.onRelease = function() {
                mouse_down = false;
                temp_mc.clear();
        };
        doub.onEnterFrame = function() {
                if (mouse_down) {
                        this.pos = new Point(this._x, this._y);
                        temp_mc.clear();
                        temp_mc.lineStyle(2, 0xFF0000);
                        for (i in _root) {
                                if (typeof (_root[i]) == "movieclip" && _root[i] != doub) {
                                        leave(this, _root[i]);
                                }
                        }
                }
        };
}
//生成待变形形状
crtShapes(50);
//初始化涂抹工具      类型:_type:in/out/rotate/rotate2  半径:r  强度:a 
initDoub("rotate", 100, .5);
//临时图层,显示被涂抹的关键点
_root.createEmptyMovieClip("temp_mc", _root.getNextHighestDepth());

 

分享到:
评论

相关推荐

    代码变形乱序demo

    总结起来,"代码变形乱序demo"是一个展示如何通过对源代码进行变形和乱序处理来增强其安全性的实例。change.exe和source.exe这两个文件为我们提供了一个直观的学习平台,通过对比分析,可以深入理解这两种技术的实现...

    傅立叶快速变换算法实例源码

    This packet contains the C source for a mixed-radix FFT routine. It performs a fast discrete Fourier transform (FFT) of a complex sequence, x, of an arbitrary length, n. The output, y, is also a ...

    flex写的变形效果

    `bin`目录可能包含编译后的Flex应用或库,而`examples`可能存放了展示变形效果的实例代码。`source`目录则可能包含源代码,这对于理解变形效果的实现机制非常有帮助。 深入学习Flex变形效果,你需要掌握...

    五个Unity源码实例

    - 音频系统(AudioSource和AudioClip):播放和管理音频资源,实现钢琴音效的播放。 - 键盘输入监听:捕捉键盘按键,根据键位触发相应的音符播放。 - 自动演奏:通过编程生成音乐序列,实现自动演奏功能。 这些...

    3DMAX 沙发实例

    你可以尝试为沙发添加简单的动画,如坐垫的弹性变形,以增加互动性。 7. **学习资源**:在学习过程中,参考“新建文件夹 (3)”内的文件,可能包含步骤截图、模型文件或说明文档,这些都是深入理解教程的重要辅助...

    opencv3实例代码

    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它包含了大量的图像处理和计算机视觉的算法,广泛应用于图像分析、机器学习、人脸识别等领域。OpenCV3是该库的一个重要版本,它在前一版本...

    张正友相机标定Opencv实现实例源码

    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,包含了众多图像处理和计算机视觉的算法。在相机标定中,OpenCV提供了丰富的函数和工具,使得开发者能够方便地进行标定工作...

    Silverlight 源码 图片缩放实例

    在本文中,我们将深入探讨Silverlight技术,特别是关于图片缩放的实现实例。Silverlight是Microsoft推出的一个跨浏览器插件,用于创建丰富的交互式Web应用程序,具有强大的图形处理能力和多媒体支持。图片缩放功能在...

    Advanced 3D Game Programming with DirectX 10.0 source code part1

    5. **流输出阶段**:新引入的流输出阶段允许开发者将渲染结果作为输入数据反馈给后续的几何处理,实现复杂的几何变形和后处理效果。 6. **多线程支持**:DirectX 10鼓励并行处理,支持在多个线程上执行渲染任务,以...

    Java笔记编辑查看器实例源代码.rar

    Java笔记编辑查看器,变形的构造函数。把File对象也放该函数内,以使引用FileIO对象的类更整洁,因为每次文件目录树收起时也触发valueChanged函数,所以此处加if判断是否是收起操作。该判断条件来源与打印((JTree) e...

    arc_source22_UDF运动_udf刚体_刚体运动UDF_一个调试udf的宏_动网格udf.zip

    该压缩包文件“arc_source22_UDF...总之,这个压缩包提供了一个关于如何使用UDF实现刚体运动和动网格的实例,对于理解和开发此类应用具有很高的参考价值。学习和理解这些内容,有助于提升在CFD领域的编程和建模能力。

    opencv_tutorials2.4.3

    **OpenCV**(Open Source Computer Vision Library)是一个开源计算机视觉库,广泛应用于图像处理、视频分析和模式识别等领域。OpenCV 2.4.3 版本在原有基础上进行了更新和优化。 ##### 1.1 Linux环境下的安装 - **...

    利用CSS3实现文字折纸效果实例代码

    本实例通过使用CSS3的变形(transform)、定位(positioning)和阴影(shadow)属性,以及伪元素(pseudo-elements)等特性,将文字呈现出立体、多层次的效果。以下是对实现这个效果的详细解析: 1. **背景设置**:...

    基于开源工具的数据分析

    标题《基于开源工具的数据分析》和描述《数据之魅:基于开源工具的数据分析 data-analysis-with-open-source-tools》指出了文档的主题和焦点是数据科学领域中使用开源工具进行数据分析的实践和方法。这里提到的开源...

    算法技术手册(Algorithms in Nutshell)英文版

    - **单源最短路径**(Section 6.4 Single-Source Shortest Path):求解从单个源节点到图中所有其他节点的最短路径问题的算法。 - **所有对最短路径**(Section 6.5 All Pairs Shortest Path):求解图中任意两点...

    flash 类文件 greensock-as3.zip

    4. **添加实例**:将创建的动画实例添加到舞台或者显示列表的某个层次。 5. **控制动画**:可以随时启动、停止、反转或调整动画,以适应用户交互或其他事件。 通过深入学习和实践,开发者可以充分利用GreenSock AS3...

    数字摄影后期处理软件

    Zerene Stacker v1.04 64bit版是FOSI(Free and Open Source Software Initiative)发布的一个版本,它提供了一个直观且功能强大的平台,用于处理一系列相同主题的照片,通过计算每张图片的差异,将最佳细节整合到...

    控件以及双指放大缩小图片、单指拖动图片_Android.rar

    - 使用`Bitmap`的`createBitmap(Bitmap source, int width, int height, Bitmap.Config config)`方法创建缩放后的位图,避免在缩放过程中频繁加载原图,提高性能。 - 使用`Bitmap.createBitmap()`和`Canvas`进行...

Global site tag (gtag.js) - Google Analytics