11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 2241|回复: 5
上一主题 下一主题

[特效 & 粒子 & 滤镜] 【9RIA—iloveas】— 我也来一个真正意义上的纯代码水波效果

[复制链接] TA的其它主题
发表于 2018-12-14 18:41:49 | 显示全部楼层 |阅读模式

【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 TKCB 于 2019-3-19 09:10 编辑

转载:9RIA游戏开发者社区(天地会)
作者:iloveas(大神)


纯代码版本47行:
[Actionscript3] 纯文本查看 复制代码
import flash.display.BitmapData;
import flash.display.Shape;
import flash.geom.Matrix;
import flash.display.Bitmap;

var bgShape: Shape = new Shape();
var matrix: Matrix = new Matrix();
matrix.createGradientBox(1280, 960, 0, -320, -240);
bgShape.graphics.beginGradientFill(GradientType.RADIAL, [0x220045, 0x000000], [1, 1], [0, 255], matrix);
bgShape.graphics.drawRect(0, 0, 640, 480);
bgShape.graphics.endFill();
var bgBd: BitmapData = new BitmapData(720, 480, false, 0x000000);
bgBd.draw(bgShape);
addChild(new Bitmap(bgBd));
var waterBm: Bitmap = new Bitmap();
waterBm.blendMode = BlendMode.HARDLIGHT;
waterBm.y = 200;
var waterBd_vec: Vector. < BitmapData > = new Vector. < BitmapData > (72, true);
addChild(waterBm);
var t: int = 0;
var offsets: Array = [];
offsets[0] = new Point();
offsets[1] = new Point();
var fadeOutShape: Shape = new Shape();
var fadeOutMatrix: Matrix = new Matrix();
fadeOutMatrix.createGradientBox(720, 280, Math.PI * 0.5);
fadeOutShape.graphics.beginGradientFill(GradientType.LINEAR, [0x000000, 0x000000], [0, 1], [0, 20], fadeOutMatrix);
fadeOutShape.graphics.drawRect(0, 0, 720, 280);
fadeOutShape.graphics.endFill();
var fadeOutBd: BitmapData = new BitmapData(720, 280, true, 0x00000000);
fadeOutBd.draw(fadeOutShape);
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
var seed: uint = new Date().time;
function enterFrameHandler(event: Event): void
{
        var waterBd: BitmapData = waterBd_vec[t];
        if (waterBd == null)
        {
                waterBd = new BitmapData(720, 280, true, 0x00000000);
                offsets[0].x = t * 10;
                waterBd.perlinNoise(80, 10, 8, seed, true, true, BitmapDataChannel.RED, true, offsets);
                waterBd.copyPixels(waterBd, waterBd.rect, new Point(), fadeOutBd);
                waterBd.colorTransform(waterBd.rect, new ColorTransform(1, 1, 1, 0.7));
                waterBd_vec[t] = waterBd;
        }
        waterBm.bitmapData = waterBd;
        t = (t + 1) % 72;
}


40来行的代码,拷到Flash的帧上即可运行,你也可以把它写在文档类的构造函数里,不过监听器函数最好抽出来。

我可能真的神经病了,这点东西都非要用纯代码~~~
有兴趣的话,我可以把鼠标交互给做上去

想了解相关原理的朋友可以到下面(超详细注释版本),那儿有详细的注释

再上个效果预览
PS:一开始的时候会卡一下,是因为在做缓存处理(在实际项目中,我已经用多线程进行了优化,项目里用到的水波图,面积比这个还要大一倍)




超详细注释版本(TKCB稍微整理了一下):
游客,如果您要查看本帖隐藏内容请回复

注释已经加上,感谢大家的关注!



发表于 2018-12-15 11:51:00 | 显示全部楼层
看看效果!!!
回复

使用道具 举报

发表于 2019-2-28 17:57:27 | 显示全部楼层
这个效果有意思
回复

使用道具 举报

发表于 2019-3-7 17:22:10 | 显示全部楼层
看看啊456789
回复

使用道具 举报

发表于 2019-12-24 17:28:10 | 显示全部楼层
这个效果有意思
回复

使用道具 举报

发表于 2020-2-20 22:54:20 | 显示全部楼层
不错不凑。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表