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

搜索
查看: 2202|回复: 1
上一主题 下一主题

[特效 & 粒子 & 滤镜] 【9RIA—伱永远不可以】—【s7教你做特效】3. 位图放大—显示器

[复制链接] TA的其它主题
发表于 2018-2-7 17:54:30 | 显示全部楼层 |阅读模式

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

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

x
转载:9RIA游戏开发者社区(天地会)
作者:伱永远不可以(原天地会大神)


大概是要发个专题吧....把自己学到的总结下,顺便能给不懂的同学们提供思路!
【s7教你做特效】系列教程(总目录)



效果:--鼠标乱移动一下就能看见效果咯


大家知道显示器放大了其实长这样:
QQ截图20180207174654.jpg
--
这次就是模拟这种效果

RGB原理就不多说,说说实现原理吧:

QQ截图20180207174709.jpg
--接下来只要把 像素逐个分解就好了:
QQ截图20180207174720.jpg

代码,复制到帧上即可【里面没有什么复杂的API,请注意提示哦】-----主要用到:BitmapData的 setPixel getPixel  没啥难度哦,但是效果不错!!!
[Actionscript3] 纯文本查看 复制代码
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Rectangle;

//放大镜的大小
var glassW:uint=15
var glassH:uint=15

var bmp:Bitmap =new Bitmap (new Pic())//#####请将这个Pic类 换成自己的########
addChild(bmp)

//放大镜-----glassW*3 之所以乘以三 是因为 要分解成RGB三种颜色
var glass:Bitmap=new Bitmap (new BitmapData (glassW*3,glassH,false,0x0))
glass.scaleX=2
glass.scaleY=2*3
addChild(glass)

this.addEventListener ( Event .ENTER_FRAME ,update)
//更新
function update(e:Event ):void 

{
        
        glass.x=mouseX//-glass.width *.5
        glass.y=mouseY//-glass.height *.5
        
        glassEffect()
}


function getRGB(c:uint ):Object 
{
        var rgb:Object ={}
        //把颜色值分解成 RGB了!
        rgb.r=c>>16 & 0xff
        rgb.g=c>>8 & 0xff
        rgb.b=c & 0xff
        
        return rgb
}

function getColor(r:uint,g:uint,b:uint):uint
{
        return r << 16 | g << 8 | b//合成颜色
}

function glassEffect():void 
{
        for(var i:int=0;i<glassW;i++)
        {
                for(var j:int=0;j<glassH;j++)
                {
                        var c:uint=bmp.bitmapData .getPixel (mouseX+i,mouseY+j)
                        glass.bitmapData .setPixel (0,0,c)
                        piexl(i*3,j,c)
                }
        }
        
}
//将分解后的颜色显示
function piexl(cx:uint,cy:uint,color:uint):void 
{
        var rgb=getRGB(color)
        glass.bitmapData .setPixel (cx,cy,getColor(rgb.r,0,0))
        glass.bitmapData .setPixel (cx+1,cy,getColor(0,rgb.g,0))
        glass.bitmapData .setPixel (cx+2,cy,getColor(0,0,rgb.b))
        
}



TKCB:因为作者没有提供源文件,但是为了新手理解,所以特意简单的做了一下分享给大家
无标题-1.fla (203.45 KB, 下载次数: 1)
发表于 2018-2-8 10:21:15 | 显示全部楼层
T大 就是厉害!
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /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)



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