守望者--AIR技术交流

标题: 沙子物理粒子特效 [打印本页]

作者: 破晓    时间: 2015-7-15 15:04
标题: 沙子物理粒子特效


http://swf.wonderfl.net/swf/usercode/1/11/112c/112cfb89948396a7a1e56bab50a20cc6d21069ad.swf?t=1436943740895

  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. }
复制代码



[attach]1227[/attach]

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

作者: lxz    时间: 2017-10-26 01:06
感谢分享!~




欢迎光临 守望者--AIR技术交流 (http://www.airmyth.com/)