9RIA-伱永远不可以 发表于 2018-2-7 17:22:34

【9RIA—伱永远不可以】—【s7教你做特效】1. 叠加模式的应用—光斑效果

本帖最后由 TKCB 于 2018-2-7 17:35 编辑

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


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


【叠加模式】(混合模式BlendMode)
可以到下面的网站先了解:
AS3 BlendMode(混合模式)的测试 ——http://www.11ria.com/forum.php?mod=viewthread&tid=737


----效果如下:

---------------
新手们可千万别一看到代码就头晕的--


1.初始化个mcVec Vector.<MovieClip> r来储存 光斑MC 【Vector效率比Array高,而且有代码提示哦!】
----mcLayer:Sprite 用于显示 光斑的

//装入MC的
var mcVec:Vector.<MovieClip>=new Vector.<MovieClip>()
//
var mcLayer:Sprite =new Sprite()
//
addChild(this.mcLayer )

2.写个函数叫 initMc() 用来初始化 光斑的! n是光斑数量-
//初始化光斑-------------------------
function initMc(n:uint=20):void
{
      
      while(n-->0)
      {
                var mc:MovieClip =new MovieClip ()
                drawCirle(mc.graphics )//画圆
                //在舞台上上随机分布
                mc.x=stage.stageWidth *Math.random ()
                mc.y=stage.stageHeight *Math.random ()
                //设置速度,
                mc.vx=Math.random ()*2-1
                mc.vy=Math.random ()*2-1
                //让MC看起模糊些
                var b:Number =Math.random ()*4+1
                mc.filters =
                mc.blendMode =BlendMode.ADD
                //加入到显示容器
                this.mcLayer .addChild (mc)
---请看代码注释!

3.让MC动起来!

//移动MC---------------
function move():void
{
      var mc:MovieClip
      for(var i in mcVec)
      {
                mc=mcVec

4.这些函数都准备好了,来一个驱动吧,就用 帧事件好了
this.addEventListener ( Event .ENTER_FRAME ,update)
//更新
function update(e:Event ):void

{
      move()
}

看看效果吧!
attach://953.swf


源代码【直接粘贴到帧上运行--须注意,舞台背景不能为白色啊,请随便画个渐变什么的,不然看不见哦】:
import flash.events.Event;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.Graphics;
import flash.display.BlendMode;
import flash.filters.BlurFilter;

//装入MC的
var mcVec:Vector.<MovieClip>=new Vector.<MovieClip>()
//
var mcLayer:Sprite =new Sprite()
//
addChild(this.mcLayer )
this.initMc (50)
this.addEventListener ( Event .ENTER_FRAME ,update)


//初始化光斑-------------------------
function initMc(n:uint=20):void
{
      
      while(n-->0)
      {
                var mc:MovieClip =new MovieClip ()
                drawCirle(mc.graphics )//画圆
               
                mc.x=stage.stageWidth *Math.random ()
                mc.y=stage.stageHeight *Math.random ()
               
                mc.vx=Math.random ()*2-1
                mc.vy=Math.random ()*2-1
               
                var b:Number =Math.random ()*4+1
                mc.filters =
                mc.blendMode =BlendMode.ADD
               
                this.mcLayer .addChild (mc)
                mcVec.push (mc)
      }
      
}

//画圆-----------------
function drawCirle(g:Graphics ):void
{
      g.beginFill (Math.random ()*0xffffff,0.8)
      g.drawCircle (0,0,Math.random ()*10+12)
      g.endFill ()
}

//移动MC---------------
function move():void
{
      var mc:MovieClip
      for(var i in mcVec)
      {
                mc=mcVec
                mc.x+=mc.vx
                mc.y+=mc.vy
                //简单的边界检测---
                mc.x=mc.x>stage.stageWidth?0:mc.x
                mc.x=mc.x<0?stage.stageWidth:mc.x
                mc.y=mc.y>stage.stageHeight ?0:mc.y
                mc.y=mc.y<0?stage.stageHeight:mc.y
      }
}
//更新
function update(e:Event ):void

{
      move()
}

该有的都有了,现在有了封装好的两个效果 ...1.本帖效果 2.位图爆破
---使用方法就变得简单多了
var sls:LightSpot =new LightSpot ()
//参数:num:光斑数量 r: 光斑大小 rect :光斑生存范围 pic:光斑的图片
sls.init ({num:20,r:20,rect:new Rectangle (-50,-50,600,450)})
sls.show (this)


下载:



页: [1]
查看完整版本: 【9RIA—伱永远不可以】—【s7教你做特效】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)