Flash+actionScript 3.0으로 만든 비 내리는 효과.

날 참 후덥지근.

14/8/3 일

비 내리는 효과 actionScript 3.0 소스 코드:
var rains:Array=new Array();
var mapsContainer = new Sprite();

var g = 0.3; //중력

function init(){ //초기 설정
     rainsInit();
     addEventListener(Event.ENTER_FRAME, onLoop);
}
function onLoop(e:Event){ //매 프레임 실행 함수
     rainMove(rains, 320);
}
function rainMove(rains:Array, yLimit:int){ //비 움직임 처리
     for(var i=0; i < rains.length; i++){
          if(rains[i].y < yLimit){  
               rains[i].vy += g;
               rains[i].x += rains[i].vx;
               rains[i].y += rains[i].vy;
          }else{
               rainBreak(rains[i]); 
               if(rains[i].aniClear){
                    rains[i].vy = 1;
                    rains[i].x = Math.floor(Math.random()*600)-100;
                    rains[i].y = Math.floor(Math.random()*-600)-50;
                    rains[i].aniClear = false;
               }               
          }
     }
}
function rainBreak(rain){ //비 땅에 떨어져 부서지는 애니 실행
     if(rain.currentFrame == 1){ //첫 프레임일 경우
          rain.gotoAndPlay(2);
     }else if(rain.currentFrame == 9){ //애니 끝 프레임 도달
          rain.aniClear = true;
     }
}
function rainsInit():void{//비 배치 초기화
     addChild(mapsContainer);
     this.setChildIndex(mapsContainer, 0); //맨 뒤에 배치.
     for(var i:uint=0; i<50; i++){
          var b = new rainM(); //비 무비클립 객체 생성
          b.gotoAndStop(1);
          b.x = Math.floor(Math.random()*500)+1; //초기 x위치
          b.y = Math.floor(Math.random()*300)+1; //초기 y위치
          b.vx = 1; //초기 가로 속도
          b.vy = 1; //초기 세로 속도
          b.aniClear = false; //무비클립 플레이 조절용
          rains.push(b); //생성된 비 배열에 추가
          mapsContainer.addChild(b); //생성된 비 컨테이너에 담기
     }
}
init();

* 오늘 웹 서핑 중 발견한 흥미로운 것: 볼프강 폰 켐펠렌(Wolfgang von Kempelen: 1734~1804)이 1770년 제작해 합스부르크 왕가의 마지막 군주였던 마리아 테레지아(Maria Theresia: 1717~1780)에게 선물한 체스 두는 오토마톤 The Turk. 사실은 안에 사람이 들어가 로봇을 조종하여 체스를 두는 것이었다고 한다.
위키피디아의 The Turk 항목(영문)


earth.nullschool.net에서 1시쯤 캡쳐한 이미지.
한국까지 올라온 12호 태풍 나크리가 소멸되어가는 상황과
남쪽에서 11호 태풍 할롱(Halong)이 커지고 있는 모습이 선명하게 보인다.

* 역시 웹 서핑 중 발견한 흥미로운 웹페이지.
HTML5+JavaScript 조합으로 만든 듯 보이는 지구의 바람 현황을 그래픽적으로 볼 수있는 페이지: http://earth.nullschool.net
마우스 드래그를 이용해 지구상의 위치를 바꾸거나 마우스 휠로 확대, 축소 등이 가능하다.

 

눈발이 몇 송이 날리다가 이내 함박 눈이 펑펑 날리기 시작.
꽤나 쌓일 듯 보였던 눈은 강렬한 석양 햇살에 모두 녹아 마치 눈이 내린 적 없는 듯 보일 정도로 사라져 버렸다.

Flash CS4+ActionScript 3.0으로 눈 내리는 효과를 간만에 다시 만들어 봤다.
* 눈송이의 낙하 속도를 눈송이의 크기와 연계시켜 작은 눈송이일 수록 천천히 내리게 표현했다.
* 눈송이들을 생성하여 snowTray란 스프라이트에 추가시킨 뒤 화면에는 snowTray로 한꺼번에 추가시켰다.

15/3/11 수

backMovie, snowMovie란 이름의 배경, 눈송이 무비클립을 라이브러리에 만들어 뒀다.

var snowNum = 80; //눈 송이 수 설정.
var snowArr:Array = new Array();
var snowTray:Sprite = new Sprite();
var back:MovieClip = new backMovie();

function init(){
     addChildAt(back,0); //배경화면 맨 밑에 붙이기
     back.x=-100; back.y=-45;
     snowInit(); //눈들 초기화
     addChildAt(snowTray,1); //눈들 화면에 붙이기
     stage.addEventListener(Event.ENTER_FRAME,loop);
}
function loop(e:Event){
     snowMove();
}
function snowInit(){ //눈들 생성, 초기화
     for(var i=0; i < snowNum; i++){
          var sn:MovieClip = new snowMovie();
          snowTray.addChild(sn);
          var size = Math.random()*0.3+0.1; //눈 크기 초기화
          sn.scaleX = sn.scaleY = size;
          sn.x = Math.floor(Math.random()*550)-50; //눈 최초 위치 초기화
          sn.y = Math.floor(Math.random()*300);
          sn.vx = Math.floor(Math.random()*3); //눈 수평 속도 초기화
          sn.vy = size * 10; //눈 낙하속도 눈의 크기에 의해 초기화
          snowArr.push(sn);
     }
}
function snowMove(){ //눈들 움직임 처리
     for(var i=0; i < snowNum; i++){
          snowArr[i].x += snowArr[i].vx;
          snowArr[i].y += snowArr[i].vy;
          if(snowArr[i].y > 410){ //눈이 화면 아래로 넘어갈 때 처리
               snowArr[i].y = -20;
               snowArr[i].x = Math.floor(Math.random()*550)-50;
               var size = Math.random()*0.3+0.1; //눈 크기 초기화
               snowArr[i].scaleX = snowArr[i].scaleY = size;
               snowArr[i].vy = size * 10;
               continue;
          }
     }
}


장마스럽게 온종일 줄기차게 비가 내렸다.

16/7/1 금

스테이지에 빗줄기용 선 무비클립을 3개 올려놓고 각도와 Bright 속성을 약간씩 바꿔준 뒤 이름을 각각 'rainMov1~3"까지로 주고 무비클립의 x 위치를 매 프레임 바꾸는 무식한 방식으로 비내리는 것 표현. 나무등의 배경은 무비클립으로 만든 뒤 Blur 필터를 줘서 뿌옇게 표현.

var rain1:MovieClip = rainMov1;
var rain2:MovieClip = rainMov2;
var rain3:MovieClip = rainMov3;

function init(){
addEventListener(Event.ENTER_FRAME, loop);
}
function loop(e:Event){
rain1.x = Math.random()*stage.stageWidth-30;
rain2.x = Math.random()*stage.stageWidth-40;
rain3.x = Math.random()*stage.stageWidth-50;
}

init();