发新帖  新投票  回帖 
12270个阅读者,42条回复 | 打印 | 订阅 | 收藏
发表时间:2021-5-9 16:03

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



wu341 发表在 重庆申博官网 华声论坛 http://zqsbgw.216sun.com/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   五月的风温暖,家国的情厚爱
 
回复时间: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
水波清澈见底,还有金鱼快活的游,老师威武,还有代码分享,收藏慢慢的学。美帖盛赞!




----------------------------------------------
“窗竹影摇书案上,野泉声入砚池中。少年辛苦终事成,莫向光明惰寸功。”
 
回复时间: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.025241 s, 10 q - sitemap,
网站地图 申博现金网登入 菲律宾申博娱乐手机版下载 申博官网代理登入
金沙真人娱乐场 菲律宾申博娱乐开户 申博网上牛牛娱乐 申博账号注册
牡丹国际娱乐网址 菲律宾申博太阳城客户端下载 红树林时时彩平台登入 伟德国际1946直营网
菲律宾太阳娱乐官方 沙龙游戏怎么登入 菲律宾申博娱乐管理网 菲律宾太阳娱乐官方
申博怎么注册登入 太阳城申博娱乐 申博官网下载登入 老虎机微信支付充值
XSB638.COM 888sbib.com XSB595.COM 155TGP.COM 568XTD.COM
218sunbet.com 157PT.COM 987jbs.com 678XTD.COM 987sj.com
886XTD.COM vi138.com 8LSS.COM 758sunbet.com 136PT.COM
286sunbet.com 156tt.com 698DC.COM 761cw.com 297PT.COM