Flash原创:打造震撼人心的破碎过渡特效【AS 3.0】

2024-03-20 04:32

本文主要是介绍Flash原创:打造震撼人心的破碎过渡特效【AS 3.0】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在2016年寒假,《复仇者联盟2》上映后,网上也推出了Flash小游戏。这是我当年根据效果自己模拟的破碎效果,可能稍微逊色。

在舞台上创建实例名称为img的影片剪辑,文件类填写Fragment。

package 
{//2016.02.11//正弦前锋import flash.display.DisplayObject;import flash.display.Graphics;import flash.geom.Point;import flash.display.Shape;import flash.display.MovieClip;import flash.events.Event;import flash.display.BitmapData;import flash.display.Bitmap;import flash.geom.Rectangle;import flash.events.MouseEvent;import flash.display.Sprite;import flash.utils.Timer;import flash.events.TimerEvent;import fl.transitions.Tween;import flash.geom.ColorTransform;import flash.filters.GlowFilter;public class Fragment extends Sprite{public var img:MovieClip;private var pstartr:Number = Math.random() * 2;private var pcenter:Point = new Point(400,300);private var rounds:Array = [];private var breakpoints:Number = 18;private var pieces:Array = [];private var pieces2:Array = [];private var sps:Number;private var stateW:Number = 800;private var stateH:Number = 600;private var lastR:Number;private var lengths:Array;private var played:Boolean = false;private var compNum:Number = 0;private var timer:Timer = new Timer(5);public function Fragment(){img.gotoAndStop(1);stage.addEventListener(MouseEvent.CLICK,onClick);timer.addEventListener(TimerEvent.TIMER,onTimer);}private function getRound(r:Number,p:Number):Array{var angle:Number = 2 * Math.PI / p;var pstart:Number = pstartr * Math.PI;var pp:Array = [];var i:Number;for (i=1; i<=p; i++){var vp:Number = pstart + angle * (i - 1);var vx:Number = Math.cos(vp) * r + Math.random() / 5 * r;var vy:Number = Math.sin(vp) * r + Math.random() / 5 * r;pp[i] = new Point(Math.round(vx),Math.round(vy));}return pp;}private function getMost(p:Array):Object  //找出坐标取最值的碎片{var t:Point = new Point  ;var i:Number;var u:Array = new Array  ;var o:Object = new Object  ;var xmin:Number = 0;var ymin:Number = 0;t.x = p[1].x;t.y = p[1].y;for (i=1; i<p.length; ++i){u[i] = new Point  ;u[i].x = p[i].x;u[i].y = p[i].y;}for (i=2; i<p.length; ++i){if (t.x > p[i].x){t.x = p[i].x;}if (t.y > p[i].y){t.y = p[i].y;}}xmin = t.x;ymin = t.y;for (i=1; i<u.length; ++i){u[i].x -=  xmin;u[i].y -=  ymin;}o.arr = u;o.x = xmin;o.y = ymin;return o;}private function getPieces(r:Array):MovieClip  //绘制碎片多边形轮廓{var k:MovieClip = new MovieClip  ;k.graphics.beginFill(0x000000,1);k.graphics.lineStyle(0,0x000000);k.graphics.moveTo(r[1].x,r[1].y);for (var i=2; i<r.length; ++i){k.graphics.lineTo(r[i].x,r[i].y);}k.graphics.endFill();return k;}public function breakIt(mc:MovieClip):void  //破裂{var sp_z:Number = (Math.random()>0.2?-1:1)*Math.random() * 5;var sp_y:Number = (mc.y - pcenter.y) * Math.random() / 7-40;var sp_x:Number = (mc.x - pcenter.x) * Math.random() / 7;sp_y = (sp_y < -40) ? -40:40;var sp_rx:Number = (Math.random()>0.2?-1:1)*Math.random() * 10;var sp_ry:Number = (Math.random()>0.2?-1:1)*Math.random() * 10;var sp_rz:Number = (Math.random()>0.2?-1:1)*Math.random() * 10;var dec_x:Number = (mc.x-pcenter.x)/Math.abs(mc.x-pcenter.x)*2;mc.addEventListener(Event.ENTER_FRAME,fl_run);function fl_run(e:Event):void  //运动效果,每帧一循环{mc.z +=  sp_z / sps;mc.y +=  sp_y / sps;mc.x +=  sp_x / sps;mc.rotationX +=  sp_rx / sps;mc.rotationY +=  sp_ry / sps;mc.rotationZ +=  sp_rz / sps;sp_y +=  10 / sps;sp_x -=  dec_x * 2 / sps;if (sps>=4){sps -=  0.01;}if (mc.y > stateH){mc.removeEventListener(Event.ENTER_FRAME,fl_run);mc.visible = false;removeChild(mc);++compNum;if (compNum>=(lengths.length-1)*breakpoints){played = false;}}}}public function main():void{var i:Number;var j:Number;rounds = [];for (i=0; i<=lengths.length-1; ++i){rounds.push(getRound(lengths[i],breakpoints));}for (i=0; i<=lengths.length-2; ++i){var ar:Array = [];pieces[i] = new Array  ;pieces2[i] = new Array  ;for (j=1; j<=breakpoints; ++j){var m:Number= (j+1>breakpoints)?1:(j+1);var ok:Object = new Object  ;var br:Number=((Math.random()>0.6)?15:-15)*Math.random()*2;  //随机生成各个近似同心圆碎片组合ar[1] = rounds[i][j];ar[2] = rounds[i + 1][j];ar[3] = rounds[i + 1][m];ar[4] = rounds[i][m];ok = getMost(ar);ar = ok.arr;pieces[i][j] = getPieces(ar);pieces[i][j].x = ok.x;pieces[i][j].y = ok.y;pieces[i][j].x +=  pcenter.x;pieces[i][j].y +=  pcenter.y;pieces2[i][j] = attachBitmap(img,pieces[i][j],br);addChild(pieces2[i][j]);}}}public function onClick(e:MouseEvent):void{if (! played){pcenter.x = stage.mouseX;pcenter.y = stage.mouseY;if (pcenter.x > stateW / 2){lastR = pcenter.x * Math.sqrt(2);}else{lastR = (stateW - pcenter.x) * Math.sqrt(2);}lengths = new Array(20,80,240,lastR);main();sps = 6;compNum = 0;played = true;img.gotoAndStop(img.currentFrame==img.totalFrames?1:(img.currentFrame+1));timer.start();}}public function onTimer(e:TimerEvent):void{timer.reset();for (var i=0; i<=lengths.length-2; ++i){for (var j=1; j<=breakpoints; ++j){breakIt(pieces2[i][j]);}}}public function attachBitmap(mc:MovieClip,shape:MovieClip=null,brightness:Number=0):MovieClip{var datax:Number = shape.x;var datay:Number = shape.y;var rect:Rectangle = new Rectangle(datax,datay,shape.width,shape.height);var bmp:BitmapData = new BitmapData(stateW*Math.sqrt(2),stateH*Math.sqrt(2),true,0x000000);var nbmp:BitmapData = new BitmapData(shape.width,shape.height,true,0x000000);var gf:GlowFilter=new GlowFilter((Math.random()>0.4)?(0x000000):(0xFFFFFF));var bmp2:Bitmap = new Bitmap  ;var mc2:MovieClip = new MovieClip  ;var mc3:MovieClip = new MovieClip  ;gf.blurX = 2;gf.blurY = 2;gf.strength = 10;bmp.fillRect(bmp.rect,0x000000);bmp.draw(mc);nbmp.lock();nbmp.copyPixels(bmp,rect, new Point(0,0));nbmp.unlock();bmp2.bitmapData = nbmp;mc2.addChild(bmp2);shape.x = 0;shape.y = 0;mc3.addChild(mc2);mc3.addChild(shape);mc2.mask = shape;mc3.z = 20 - Math.random() * 40;mc3.x = datax;mc3.y = datay;mc3.filters = new Array(gf);setBrightness(mc3,brightness);return mc3;}public function setBrightness(obj:DisplayObject,value:Number):void  //亮度调节{var colorTransformer:ColorTransform = obj.transform.colorTransform;var backup_filters:* = obj.filters;value /=  100;if (value >= 0){colorTransformer.blueMultiplier = 1 - value;colorTransformer.redMultiplier = 1 - value;colorTransformer.greenMultiplier = 1 - value;colorTransformer.redOffset = 255 * value;colorTransformer.greenOffset = 255 * value;colorTransformer.blueOffset = 255 * value;}else{value = Math.abs(value);colorTransformer.blueMultiplier = 1 - value;colorTransformer.redMultiplier = 1 - value;colorTransformer.greenMultiplier = 1 - value;colorTransformer.redOffset = 0;colorTransformer.greenOffset = 0;colorTransformer.blueOffset = 0;}obj.transform.colorTransform = colorTransformer;obj.filters.push(backup_filters);}}}

资源地址:http://pan.baidu.com/s/1dEiCj0P

这篇关于Flash原创:打造震撼人心的破碎过渡特效【AS 3.0】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/828289

相关文章

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

什么是 Flash Attention

Flash Attention 是 由 Tri Dao 和 Dan Fu 等人在2022年的论文 FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness 中 提出的, 论文可以从 https://arxiv.org/abs/2205.14135 页面下载,点击 View PDF 就可以下载。 下面我

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

『功能项目』战士的平A特效【35】

我们打开上一篇34武器的切换实例的项目, 本章要做的事情是在战士的每次按A键时在指定位置生成一个平A特效 首先将之前下载的技能拖拽至场景中 完全解压缩后重命名为AEffect 拖拽至预制体文件夹 进入主角动画的战士动画层级 双击第一次攻击 选择Animation 创建事件 创建的动画事件帧放在攻击动画挥剑指定处 命名为PerpetualAtt

第49课 Scratch入门篇:骇客任务背景特效

骇客任务背景特效 故事背景:   骇客帝国特色背景在黑色中慢慢滚动着! 程序原理:  1 、 角色的设计技巧  2 、克隆体的应用及特效的使用 开始编程   1、使用 黑色的背景: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7d74c872f06b4d9fbc88aecee634b074.png#pic_center)   2

如何打造个性化大学生线上聊天交友系统?Java SpringBoot Vue教程,2025最新设计思路

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 | SpringBoot/SSM Python实战项目 | Django 微信小程序/安卓实战项目 大数据实战项目 ⚡⚡文末获取源码 文章目录

Cmake之3.0版本重要特性及用法实例(十三)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧