Bitmap打造被风吹散flash特效

本文介绍了一种使用ActionScript实现的Bitmap特效——风吹散效果。通过动态改变像素位置模拟风力作用下图像粒子分散的效果,并提供了两种实现方式:一种为简单风吹散效果,另一种增加了鼠标交互功能。
Bitmap特效,被风吹散效果。
详细代码:
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.filters.BlurFilter;
import flash.geom.Point;
import flash.geom.Rectangle;
/**
* ...
* @author flashk
*/
public class Min extends Sprite
{
public var a_mc:MovieClip;
private var bd:BitmapData;
private var bds:BitmapData;
private var ps:Array;
public function Min() {
bd = new BitmapData(1420, 300, true);
bds = new BitmapData(a_mc.width, a_mc.height, true);
bds.draw(a_mc);
var bp:Bitmap = new Bitmap();
bp.bitmapData = bd;
this.addChild(bp);
start();
}
private function start():void {
ps = new Array();
for (var i:int = 1; i
for (var j:int = 1; j
ps.push(new Po(i, j, bds.getPixel32(i, j),bds.width));
}
}
this.addEventListener(Event.ENTER_FRAME, render);
this.removeChild(a_mc);
}
private function render(event:Event):void {
var po;
//bd.fillRect(new Rectangle(0, 0, bd.width, bd.height), 0);
bd.applyFilter(bd, new Rectangle(0, 0, bd.width, bd.height), new Point(0, 0), new BlurFilter(2, 2, 1));
bd.lock();
var len = ps.length;
for (var i:int = 0 ; i
po = ps[i];
po.move();
bd.setPixel32(po.x, po.y+80, po.color);
}
bd.unlock();
}
}
}
class Po {
public var x:Number;
public var y:Number;
public var color:uint;
private var speed:Number;
private var r:Number = 0;
private var by:Number;
public function Po(x:Number, y:Number, color:uint,w:Number) {
this.x = x;
this.y = y;
this.color = color;
this.speed = Math.random() * 10 - (w - x) / 2;
//r = Math.random() * 50;
this.by = y;
}
public function move():void {
speed += 0.5;
if(speed>0){
this.x += speed;
r += 10;
this.y = this.by + Math.sin(r* Math.PI/180)*50;
}
}
}
[1b]源文件和swf下载
[img]/uploads/allimg/090513/1742130.gif[/img]
[/1b]
[url=http://www2.flash8.net/UploadTeach/200905/20090504181500637.rar][1b]s2demo.rar[/1b][/url]
[1b]:[/1b]
再来玩个加鼠标控制的,美女被风吹散...
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.filters.BlurFilter;
import flash.filters.ColorMatrixFilter;
import flash.geom.ColorTransform;
import flash.geom.Point;
import flash.geom.Rectangle;
/**
* ...
* @author flashk
*/
public class Min extends Sprite
{
public var a_mc:MovieClip;
private var bd:BitmapData;
private var bds:BitmapData;
private var ps:Array;
private var ns:uint;
private var checks:Array;
private var noise:BitmapData;
private var randomSeed:Number;
private var image:BitmapData;
private var rect:Rectangle;
private var cTra:ColorTransform;
private var vectorList:Array;
private var num:uint = 10000;
public function Min() {
noise = new BitmapData(a_mc.width, a_mc.height, false, 0x000000);
randomSeed = Math.floor(Math.random() * 0xFFFF);
noise.perlinNoise(a_mc.width, a_mc.height, 4, randomSeed, false, false, 1 | 2 | 0 | 0 );
image = new BitmapData(465, 465, true, 0);
this.addChild(new Bitmap(image));
rect = new Rectangle( 0, 0, 465, 465 )
cTra = new ColorTransform(1, 1, 1, 0.9, 0, 0, 0, 0)
bd = new BitmapData(600, 450, true);
bds = new BitmapData(a_mc.width, a_mc.height, true,0x00FFFFFF);
bds.draw(a_mc);
var bp:Bitmap = new Bitmap();
bp.bitmapData = bd;
ps = new Array();
start(1);
this.removeChild(a_mc);
}
private function start(s:uint):void {
ns = s;
vectorList = [];
for (var i:int = s; i
for (var j:int = 1; j
vectorList.push(new Po(i, j, bds.getPixel32(i, j),bds.width,this));
}
}
this.addEventListener(Event.ENTER_FRAME, render);
}
private function render(event:Event):void {
image.colorTransform( rect, cTra );
image.lock();
var len:uint = vectorList.length;
for (var i:uint = 0; i
var body:Po = vectorList[i];
body.speed += 0.4;
if(body.speed>0){
var col:Number = noise.getPixel(body.px, body.py);
body.ax += ((col >> 16 & 0xFF) - 128)/1000;
body.ay += ((col >> 8 & 0xFF) -128)/1000;
body.vx += body.ax;
body.vy += body.ay;
body.px += body.vx;
body.py += body.vy;
body.ax *= .975;
body.ay *= .975;
body.vx *= .92;
body.vy *= .92;
}
if (body.px
vectorList.splice(i, 1);
len -= 1;
}
image.setPixel32( body.px, body.py+100, body.color );
}
image.unlock();
}
}
}
class Po {
public var x:Number;
public var y:Number;
public var color:uint;
public var speed:Number;
private var r:Number = 0;
private var by:Number;
public var vx:Number = 0;
public var vy:Number = 0;
public var ax:Number = 0;
public var ay:Number = 0;
public var px:Number;
public var py:Number;
public function Po(x:Number, y:Number, color:uint,w:Number,eventLis:Object) {
this.x = x;
this.y = y;
this.px = x;
this.py = y;
this.color = color;
this.speed = Math.random() * 15 - (w - x) / 3 -20;
this.by = y;
}
}
[1b]鼠标控制swf效果:
[img]/uploads/allimg/090513/1742130.gif[/img]
[/1b]
[url=http://www2.flash8.net/UploadTeach/200905/20090504181605312.rar][1b]s2wind-mouseControl.rar[/1b][/url]
本文转自:http://www.5uflash.com/flashjiaocheng/Flashdonghuatexiao/5002.html
【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值