发新帖  新投票  回帖 
12193个阅读者,42条回复 | 打印 | 订阅 | 收藏
wu341

发表时间:2021-5-9 16:03

【唱响五月红 织锦山河情】我是一只鱼



wu341 发表在 特效绝美 华声论坛 http://bbs.voc.com.cn/forum-105-1.html





[全屏欣赏]



学习用纯代码做一个水波...






支持华声论坛【唱响五月红 织锦山河情】五月活动,谢谢欣赏!








[本帖最后由 兰蕙hn 于 2021-5-9 17:02 编辑]

本帖助威记录

小家碧玉ABC +5
你的帖子可以上新闻联播了
2021-05-21 11:19:38
泠馨 +5
你的帖子可以上新闻联播了
2021-05-18 17:55:48
幽兰2016 +5
你的帖子可以上新闻联播了
2021-05-15 10:54:19
若相爱 +5
你的帖子可以上新闻联播了
2021-05-13 13:25:26
岩新yx +5
你的帖子可以上新闻联播了
2021-05-12 11:18:28
总计:魅力70点 助威14查看所有助威>>

本帖最近评分记录
兰蕙hn   2021-5-9 17:06  金钱  +20   五月的风温暖,家国的情厚爱
兰蕙hn   2021-5-9 17:06  魅力  +20   五月的风温暖,家国的情厚爱
 
wu341

回复时间:2021-5-9 16:06
主场景一张图片转换为影片剪辑实例名称 mc ;
新建一图层写上代码:



// 创建Rippler对象,传入要产生波纹的对象、波纹强度、波纹宽度。;
var rippler:Rippler = new Rippler(mc,120,4);
var cout:int = 0;
this.addEventListener( Event.ENTER_FRAME, enterFrame );
function enterFrame( eve:Event ):void
{
if (cout%4==0)
{
if ( rippler != null )
{
var xr:int = Math.random() * stage.stageWidth;
var yr:int = Math.random() * stage.stageHeight;
var sr:int = Math.random() * 10 + 5;
rippler.drawRipple(xr, yr, sr, 0.85);
}
}
cout++;
}



Rippler类:

package
{
import flash.display.BitmapData;
import flash.display.BitmapDataChannel;
import flash.display.BlendMode;
import flash.display.DisplayObject;
import flash.events.Event;
import flash.filters.ConvolutionFilter;
import flash.filters.DisplacementMapFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;




/**
* Rippler 类是一个用于创建水波纹效果。
* @author David Lenaerts(修改fengzi)
* @创建时间 未知
* @修改时间 2018-10-27
* @version 1.1.0
*/
public class Rippler implements IDispose
{
// The DisplayObject which the ripples will affect.
private var _source: DisplayObject;

// Two buffers on which the ripple displacement image will be created, and swapped.
// Depending on the scale parameter, this will be smaller than the source
private var _buffer1: BitmapData;
private var _buffer2: BitmapData;

// The final bitmapdata containing the upscaled ripple image, to match the source DisplayObject
private var _defData: BitmapData;

// Rectangle and Point objects created once and reused for performance
private var _fullRect: Rectangle; // A buffer-sized Rectangle used to apply filters to the buffer
private var _drawRect: Rectangle; // A Rectangle used when drawing a ripple
private var _origin: Point = new Point(); // A Point object to (0, 0) used for the DisplacementMapFilter as well as for filters on the buffer

// The DisplacementMapFilter applied to the source DisplayObject
private var _filter: DisplacementMapFilter;
// A filter causing the ripples to grow
private var _expandFilter: ConvolutionFilter;

// Creates a colour offset to 0x7f7f7f so there is no image offset due to the DisplacementMapFilter
private var _colourTransform: ColorTransform;

// Used to scale up the buffer to the final source DisplayObject's scale
private var _matrix: Matrix;

// We only need 1/scale, so we keep it here
private var _scaleInv: Number;

/**
* 构造函数,创建一个Rippler实例。
* @param source 水波对象,通常是位图,也可以是任何显示对象。
* @param strength 水波的强度,通常是50左右。
* @param scale 波纹大小,默认是2。波纹越大,水波速度越快。
*/
public function Rippler(source: DisplayObject, strength: Number, scale: Number = 2)
{
var correctedScaleX: Number;
var correctedScaleY: Number;

_source = source;
_scaleInv = 1 / scale;

// create the (downscaled) buffers and final (upscaled) image data, sizes depend on scale
_buffer1 = new BitmapData(source.width * _scaleInv, source.height * _scaleInv, false, 0x000000);
_buffer2 = new BitmapData(_buffer1.width, _buffer1.height, false, 0x000000);
_defData = new BitmapData(source.width, source.height);

// Recalculate scale between the buffers and the final upscaled image to prevent roundoff errors.
correctedScaleX = _defData.width / _buffer1.width;
correctedScaleY = _defData.height / _buffer1.height;

// Create reusable objects
_fullRect = new Rectangle(0, 0, _buffer1.width, _buffer1.height);
_drawRect = new Rectangle();

// Create the DisplacementMapFilter and assign it to the source
_filter = new DisplacementMapFilter(_buffer1, _origin, BitmapDataChannel.BLUE, BitmapDataChannel.BLUE, strength, strength, "wrap");
_source.filters = [_filter];

// Create a frame-based loop to update the ripples
_source.addEventListener(Event.ENTER_FRAME, handleEnterFrame);

// Create the filter that causes the ripples to grow.
// Depending on the colour of its neighbours, the pixel will be turned white
_expandFilter = new ConvolutionFilter(3, 3, [0.5, 1, 0.5, 1, 0, 1, 0.5, 1, 0.5], 3);

// Create the colour transformation based on
_colourTransform = new ColorTransform(1, 1, 1, 1, 127, 127, 127);

// Create the Matrix object
_matrix = new Matrix(correctedScaleX, 0, 0, correctedScaleY);
}

/**
* 绘制波纹,设置绘制的一些参数。
* @param x 纹波原点的x坐标。
* @param y 纹波原点的y坐标。
* @param size 在第一次冲击的纹波直径的大小,通常为20以内。
* @param alpha 在第一次冲击的纹波alpha值,通常为0.85。
*/
public function drawRipple(x: int, y: int, size: int, alpha: Number): void
{
var inv:Number=Math.random() * _scaleInv+0.02
var half: int = size >> 1; // We need half the size of the ripple
var intensity: int = (alpha * 0xff & 0xff) * alpha; // The colour which will be drawn in the currently active buffer

// calculate and draw the rectangle, having (x, y) in its centre
_drawRect.x = (-half + x) * inv;
_drawRect.y = (-half + y) * inv;
_drawRect.width = _drawRect.height = size * inv;
_buffer1.fillRect(_drawRect, intensity);
}

/**
* 获取实际的波纹图像。
*/
public function getRippleImage(): BitmapData
{
return _defData;
}

/**
* 清除对象内部引用、侦听等(销毁对象前调用此方法)。
*/
public function dispose () : void
{
_source.removeEventListener(Event.ENTER_FRAME, handleEnterFrame);
_buffer1.dispose();
_buffer2.dispose();
_defData.dispose();
}

/** 实现水波动画效果 */
private function handleEnterFrame(event: Event): void
{
// a temporary clone of buffer 2
var temp: BitmapData = _buffer2.clone();
// buffer2 will contain an expanded version of buffer1
_buffer2.applyFilter(_buffer1, _fullRect, _origin, _expandFilter);
// by substracting buffer2's old image, buffer2 will now be a ring
_buffer2.draw(temp, null, null, BlendMode.SUBTRACT, null, false);
// scale up and draw to the final displacement map, and apply it to the filter
_defData.draw(_buffer2, _matrix, _colourTransform, null, null, true);
_filter.mapBitmap = _defData;
_source.filters = [_filter];
temp.dispose();
// switch buffers 1 and 2
switchBuffers();
}

/** 切换缓冲器1和2 */
private function switchBuffers(): void
{
var temp: BitmapData;
temp = _buffer1;
_buffer1 = _buffer2;
_buffer2 = temp;
}
}
}


/**
* IDispose 清除对象内部引用、侦听等,为之后使用null进行垃圾回收,提供完全销毁保障。
*/
interface IDispose
{
/**
* 清除对象内部引用、侦听等(销毁对象前调用此方法)。
*/
function dispose():void;

}

[本帖最后由 wu341 于 2021-5-9 16:13 编辑]


本帖最近评分记录
兰蕙hn   2021-5-9 16:56  金钱  +20   感谢疯老师分享
兰蕙hn   2021-5-9 16:56  魅力  +20   感谢疯老师分享
 
兰蕙hn
原创音画组

回复时间:2021-5-9 16:56
前排了




----------------------------------------------
取个网名叫“兰蕙”,并不是真的认为自己就是兰心蕙质的女人,而是把这作为我的一种追求,一种境界。
 
绘紫手

回复时间:2021-5-9 17:02
疯老师又有新玩意儿分享了,腻害




----------------------------------------------
了解我的人~无需解释~不了解我的人~解释不了。。。
 
绘紫手

回复时间:2021-5-9 17:03
按此在新窗口浏览图片




----------------------------------------------
了解我的人~无需解释~不了解我的人~解释不了。。。
 
秋水如泓

回复时间:2021-5-9 17:11
疯帅老师威武,这代码,看得我眼花缭乱,只能慢慢学习哈,谢谢老师分享。

 
秋水如泓

回复时间:2021-5-9 17:19
喜欢这一汪水池,清澈见底。
鱼儿游得欢实,激起的波纹涟漪美极了。
曲曲好听,渲染题意给力,喜欢。
疯帅老师的作品精益求精,学习了。


[本帖最后由 秋水如泓 于 2021-5-9 17:22 编辑]

 
秋水如泓

回复时间:2021-5-9 17:22
问好疯帅老师,谢谢老师大力支持活动。夏安

 
伯懿

回复时间:2021-5-9 17:29
老师纯代码做的水波这么逼真,背景太漂亮。感谢老师无私好资源分享。收藏了。问好!




----------------------------------------------
愿与草木,随遇而安.
 
伯懿

回复时间:2021-5-9 17:30
歌曲深情动听,节奏动感十足,歌词入心,听醉了!分享老师的精彩,好贴狠赞




----------------------------------------------
愿与草木,随遇而安.
 
雨水煮茶

回复时间:2021-5-9 19:01
不知道老师这是2.0的代码还是3.0的,我试了一下好像都不行

 
芬韵之雅

回复时间:2021-5-9 19:51
疯帅老师厉害👍这代码,看得眼花缭乱,谢谢老师分享,欣赏问候

 
芬韵之雅

回复时间:2021-5-9 19:52
歌曲好听,节奏感很棒,歌词入心,听醉了!分享老师的精彩,好贴狠赞

 
竹影泉声

回复时间:2021-5-9 19:52
水波清澈见底,还有金鱼快活的游,老师威武,还有代码分享,收藏慢慢的学。美帖盛赞!




----------------------------------------------
“窗竹影摇书案上,野泉声入砚池中。少年辛苦终事成,莫向光明惰寸功。”
 
acb158

回复时间:2021-5-9 19:56
虽不懂代码,但也要说一句:漂亮!!!

 
竹影泉声

回复时间:2021-5-9 19:59
流水声清澈,歌曲美妙动听,醉赏!




----------------------------------------------
“窗竹影摇书案上,野泉声入砚池中。少年辛苦终事成,莫向光明惰寸功。”
 
兰蕙hn
原创音画组

回复时间:2021-5-9 21:20
这清澈见底的水波涟漪效果真是太漂亮了,保存收藏,空了学习制作




----------------------------------------------
取个网名叫“兰蕙”,并不是真的认为自己就是兰心蕙质的女人,而是把这作为我的一种追求,一种境界。
 
兰蕙hn
原创音画组

回复时间:2021-5-9 21:25
这些活泼自在的金鱼在水里还能听到这么好听的歌曲,一定快活极了哈




----------------------------------------------
取个网名叫“兰蕙”,并不是真的认为自己就是兰心蕙质的女人,而是把这作为我的一种追求,一种境界。
 
兰蕙hn
原创音画组

回复时间:2021-5-9 21:27
感谢疯老师精彩分享,辛苦了哦




----------------------------------------------
取个网名叫“兰蕙”,并不是真的认为自己就是兰心蕙质的女人,而是把这作为我的一种追求,一种境界。
 
百灵

回复时间:2021-5-9 21:44
好厉害的wu341 代码还能做的这么逼真的效果 赞




----------------------------------------------
音乐永远是我灵魂的伊甸园;;;
 
发新帖 新投票
 回帖
查看积分策略说明快速回复主题
你的用户名: 密码:   免费注册(只要30秒)


启用 Html 代码
使用个人签名
(请您文明上网理性发言!并遵守相关规定贴文发布前,请确认贴文内容完全由您个人创作或您得到了版权所有者的授权。版权声明
   



Processed in 0.025760 s, 10 q - sitemap,