守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 1280|回复: 1

[华丽特效] 沙子物理粒子特效

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    52620
    钢镚
    1422

    开源英雄守望者

    发表于 2015-7-15 15:04:54 | 显示全部楼层 |阅读模式




    1. package
    2. {
    3.     import com.bit101.components.*;
    4.     import flash.display.*;
    5.     import flash.events.*;
    6.     import flash.geom.*;
    7.     import flash.net.navigateToURL;
    8.     import flash.net.URLRequest;
    9.     import flash.net.URLVariables;
    10.    
    11.     [SWF ( width = 465, height = 465, frameRate = 60 )];
    12.     public class Main extends Sprite
    13.     {
    14.         
    15.         private var _CANVAS:BitmapData = new BitmapData ( stage.stageWidth , stage.stageHeight , false , 0 ) ;
    16.         
    17.         //宣伝用//////////////////////
    18.         private var _S0:PushButton ;
    19.         /////////////////////////////
    20.         
    21.         private var _B0:PushButton ;
    22.         private var _B1:PushButton ;
    23.         private var _B2:PushButton ;
    24.         private var _B3:PushButton ;
    25.         
    26.         private var _CLICK:Boolean = false ;
    27.         private var _COLOR:uint = 0x836034;
    28.         private var _BX:int = 0 ;
    29.         private var _BY:int = 0 ;
    30.         
    31.         
    32.         
    33.         
    34.         public function Main():void {
    35.             
    36.             addChild ( new Bitmap ( _CANVAS ) ) ;
    37.             
    38.             //宣伝用////////////////////////////////////////////////////
    39.             _S0 = new PushButton ( this, 465-100 , 0, "Ad:kuma-flashgame" ) ;
    40.             _S0.addEventListener ( MouseEvent.CLICK , function ():void { var url:URLRequest = new URLRequest ( "http://kuma-flashgame.blogspot.com/" ) ; navigateToURL( url ); } ) ;
    41.             //////////////////////////////////////////////////////////
    42.             
    43.             _B0 = new PushButton ( this,  10 , 25, "ERASE" ) ;
    44.             _B1 = new PushButton ( this, 120 , 25, "WALL" ) ;
    45.             _B2 = new PushButton ( this, 230 , 25, "SAND" ) ;
    46.             _B3 = new PushButton ( this, 340 , 25, "WATER" ) ;
    47.             _B1.enabled = false ;
    48.             
    49.             _B0.addEventListener ( MouseEvent.CLICK , function ():void { _COLOR = 0x000000 ; _B0.enabled = false ; _B1.enabled = true  ; _B2.enabled = true  ; _B3.enabled = true  ; } ) ;
    50.             _B1.addEventListener ( MouseEvent.CLICK , function ():void { _COLOR = 0x836034 ; _B0.enabled = true  ; _B1.enabled = false ; _B2.enabled = true  ; _B3.enabled = true  ; } ) ;
    51.             _B2.addEventListener ( MouseEvent.CLICK , function ():void { _COLOR = 0xF7E779 ; _B0.enabled = true  ; _B1.enabled = true  ; _B2.enabled = false ; _B3.enabled = true  ; } ) ;
    52.             _B3.addEventListener ( MouseEvent.CLICK , function ():void { _COLOR = 0x80A2F0 ; _B0.enabled = true  ; _B1.enabled = true  ; _B2.enabled = true  ; _B3.enabled = false ; } ) ;
    53.            
    54.             stage.addEventListener ( MouseEvent.MOUSE_DOWN , function ():void { _CLICK = true ; } ) ;
    55.             stage.addEventListener ( MouseEvent.MOUSE_UP   , function ():void { _CLICK = false; } ) ;
    56.             addEventListener ( Event.ENTER_FRAME , RUN ) ;
    57.             
    58.         }
    59.         
    60.         
    61.         
    62.         
    63.         public function RUN ( e:Event ):void {
    64.             
    65.             _CANVAS.lock() ;
    66.             
    67.             ////////////////////////////////////
    68.             for ( var I:int = 200 ; I < 250 ; ++ I ) {
    69.                
    70.                 if ( Math.random() < .1 ) {
    71.                     _CANVAS.setPixel ( I , 60 , 0xF7E779 ) ;
    72.                 }
    73.                
    74.             }
    75.             
    76.             ////////////////////////////////////
    77.             if ( _CLICK && 60 < mouseY && 60 < _BY ) {
    78.                
    79.                 for ( var J:int = 0 ; J < 20 ; ++ J ) {
    80.                     var R:Number = J / 20 ;
    81.                     _CANVAS.fillRect ( new Rectangle ( _BX * R + mouseX * ( 1 - R ) , _BY * R + mouseY * ( 1 - R ) , 5 , 5 ) , _COLOR ) ;
    82.                 }
    83.                
    84.             }
    85.             _BX = mouseX ;
    86.             _BY = mouseY ;
    87.             
    88.             ////////////////////////////////////
    89.             for ( var X:int = 0 ; X < _CANVAS.width ; ++ X ) {
    90.                
    91.                 for ( var Y:int = _CANVAS.height - 1 ; Y >= 0 ; -- Y ) {
    92.                     
    93.                     var C:uint = _CANVAS.getPixel ( X , Y ) ;
    94.                     if ( C == 0 ) {
    95.                         continue ;
    96.                     }
    97.                     
    98.                     if ( C == 0xF7E779 ) {
    99.                         
    100.                         var T:uint ;
    101.                         var TX:int ;
    102.                         
    103.                         {//落下
    104.                             T = _CANVAS.getPixel ( X , Y + 1 ) ;
    105.                             if ( T == 0 ) {
    106.                                 _CANVAS.setPixel ( X , Y     , T ) ;
    107.                                 _CANVAS.setPixel ( X , Y + 1 , C ) ;
    108.                                 continue ;
    109.                             }
    110.                            
    111.                             //水より砂の方が重い,適当な確率で場所の置換を許す。
    112.                             if ( T == 0x80A2F0 && Math.random() < .5 ) {
    113.                                 _CANVAS.setPixel ( X , Y     , T ) ;
    114.                                 _CANVAS.setPixel ( X , Y + 1 , C ) ;
    115.                                 continue ;
    116.                             }
    117.                         }
    118.                         
    119.                         {//左右移動
    120.                             TX = X + Math.floor ( Math.random() * 7 ) - 3 ;
    121.                             T = _CANVAS.getPixel ( TX , Y ) ;
    122.                             if ( T == 0 ) {
    123.                                 _CANVAS.setPixel (  X , Y , T ) ;
    124.                                 _CANVAS.setPixel ( TX , Y , C ) ;
    125.                                 continue ;
    126.                             }
    127.                            
    128.                             //水より砂の方が重い,適当な確率で場所の置換を許す。
    129.                             if ( T == 0x80A2F0 && Math.random() < .8 ) {
    130.                                 _CANVAS.setPixel (  X , Y , T ) ;
    131.                                 _CANVAS.setPixel ( TX , Y , C ) ;
    132.                                 continue ;
    133.                             }
    134.                         }
    135.                         
    136.                     }
    137.                     
    138.                     if ( C == 0x80A2F0 ) {
    139.                         
    140.                         {//落下
    141.                             T = _CANVAS.getPixel ( X , Y + 1 ) ;
    142.                             if ( T == 0 ) {
    143.                                 _CANVAS.setPixel ( X , Y     , T ) ;
    144.                                 _CANVAS.setPixel ( X , Y + 1 , C ) ;
    145.                                 continue ;
    146.                             }
    147.                         }
    148.                         
    149.                         {//左右移動
    150.                             TX = X + Math.floor ( Math.random() * 7 ) - 3 ;
    151.                             T = _CANVAS.getPixel ( TX , Y ) ;
    152.                             if ( T == 0 ) {
    153.                                 _CANVAS.setPixel (  X , Y , T ) ;
    154.                                 _CANVAS.setPixel ( TX , Y , C ) ;
    155.                                 continue ;
    156.                             }
    157.                         }

    158.                     }
    159.                     
    160.                 }
    161.                
    162.             }
    163.             
    164.             
    165.             _CANVAS.unlock() ;
    166.             
    167.         }
    168.         
    169.     }
    170.    
    171. }
    复制代码





    本文来自:http://wonderfl.net/c/2rWu

    本帖子中包含更多资源

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

    x
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-24 01:34
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    0

    主题

    38

    帖子

    868

    积分

    上士

    Rank: 5Rank: 5

    威望
    20
    贡献
    0
    金币
    14
    钢镚
    0
    发表于 2017-10-26 01:06:34 | 显示全部楼层
    感谢分享!~
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

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

    本版积分规则

    
    关闭

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

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2024-3-29 09:30 , Processed in 0.072405 second(s), 31 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

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