필유홈2.0

admin | write

웹을 잠깐 찾아봤는데 아무래도 없는 듯해서, 직접 만들어봤다. 별 거 아닌데 오래 걸렸다-_-; 기본적인 원리는 다음과 같다.

const T1:int=144;    // 큰 변의 길이. 작은 변의 길이와 황금비율이다
const T2:int=55;    // (표시되지 않는) 작은 변의 길이. 큰 변의 길이와 황금비율이다
const ANGLE:Number=72*Math.PI/180;    // 5각형의 내각 72도의 라디안 값

var real:Shape=new Shape();

real.graphics.beginFill(0xaabbff, 1);
real.graphics.lineStyle(1,0xff6699,1,true);
real.graphics.moveTo(Point.polar(T1,-ANGLE).x,Point.polar(T1,-ANGLE).y);
for(var i=0;i<5;i++)
{
    real.graphics.lineTo(Point.polar(T2,(i-1)*ANGLE+ANGLE/2).x,
                         Point.polar(T2,(i-1)*ANGLE+ANGLE/2).y);
    real.graphics.lineTo(Point.polar(T1,i*ANGLE).x,Point.polar(T1,i*ANGLE).y);
}
real.graphics.endFill();

이건 Shape 인스턴스일 뿐이고 위의 코드에서는 화면(stage)에 표시(addChild)하는 부분은 없다. 실제로 활용하기 위해서는 MovieClip 등의 인스턴스를 만들고 그 안에 이걸 추가해준 뒤에 그 인스턴스를 다시 stage에 자식으로 추가하거나 한 뒤에 사용해야 정석이다...라는 당연한 얘기는 생략.

만약 변의 교차를 그리고 싶다면 for 문 앞의 moveTo 라인을 삭제하고 for 문 안을 다음으로 바꾸면 된다. 이 경우는 당연히(?) 속을 채울 수 없다.

    real.graphics.moveTo(Point.polar(T1,(i-1)*ANGLE).x,Point.polar(T1,(i-1)*ANGLE).y);
    real.graphics.lineTo(Point.polar(T1,(i+1)*ANGLE).x,Point.polar(T1,(i+1)*ANGLE).y);

설명을 잘 못 알아듣겠다면(말주변이 없어서-_-) 그냥 다음 플래시 파일을 다운받아 볼 것;


star3.fla

위 파일의 소스


황금비율 혹은 황금분할에 대해선 만국기의 보편적 상징에 대하여(새창) 등의 문서를 참고할 것.




'프로그래밍' 카테고리의 다른 글

actionscript로 별 그리기  (0) 2008/07/02
[마리가 연주하는 음악]에 부쳐  (0) 2008/06/28
[actionscript 3.0] 소리 페이드인(Sound fade-in)  (0) 2008/05/17
플래시 이것저것  (6) 2008/05/09

지난 달에 산 만화 중에 ← 이런 만화가 있다. 이 작가(후루야 우사마루)는 사실 [파이]라는 애로 만화-_- 때문에 알게 된 작가였는데, 단순한 애로 만화가로 판단했던 게 실수였달까. 꽤나 괜찮은 만화였다.

만화방에서 꽤나 흥미진진하게 감상한 뒤에 구매까지 결정한 계기는, 실은 내용보다는 그림 때문이다. 뭐, 같은 이유 때문에 [코제트의 초상]도 같이 사긴 했는데... 후자는 사실 아직 포장도 안 뜯어봤다-_- (애니메이션도 있다던데 그것도 아직 못 봤다)

어쨌든 내용을 떠나서, 만화에 등장하는 톱니바퀴들의 이미지와 세계관이 꽤 인상적이었다. 그래서 어제 (학교도 안 가고) 집에서 대충 만들어본 게 ↓ 이거.




언제나처럼, 새로고침을 연타해주시길.




이건 보너스.




'프로그래밍' 카테고리의 다른 글

actionscript로 별 그리기  (0) 2008/07/02
[마리가 연주하는 음악]에 부쳐  (0) 2008/06/28
[actionscript 3.0] 소리 페이드인(Sound fade-in)  (0) 2008/05/17
플래시 이것저것  (6) 2008/05/09

각설하고,

소리(Sound) 인스턴스(instance)의 음량(volume)은 그 자체로 조절할 수 없습니다. 아시다시피(?) SoundTransform 클래스로만 변경이 가능하죠. 또한 transform을 거치는 인스턴스에는 tween을 줄 수 없기 때문에(문법상으로는 문제가 없지만 실행해보면 당연히 tween이 안 먹힙니다) 페이드인(fade-in)을 구현하는 데 어려움이 있었습니다.

그래서 찾아본 결과:
Fading sound using AS3 (새창)

요약하자면 다음 fla 소스(임의로 행순서를 바꾸고 주석을 달았습니다):
var fadeInIncr = 0.1;   // 음량 전역변수
var soundFadeInTimer:Timer = new Timer(100,30);
var snd:Sound = new Sound(new URLRequest("myLoop.mp3"));
var trans:SoundTransform = new SoundTransform(fadeInIncr, 0);
var channel:SoundChannel = snd.play(0, 1, trans);

soundFadeInTimer.addEventListener("timer", soundFadeIn);
soundFadeInTimer.start();

function soundFadeIn(e:TimerEvent){   // 이벤트 핸들러
    fadeInIncr += 1/30;

    var sAmbienceVol:SoundTransform = new SoundTransform(fadeInIncr, 0);
    channel.soundTransform = sAmbienceVol;
}


수정:
위 방법으로는 여러 개의 인스턴스에 각각 페이드인 효과를 구현할 수 없다는 내용의 장문-_-을 썼다가, 별 의미 없어서 지웠습니다. 여러 개의 인스턴스에서 사용하려면 ENTER_FRAME 이벤트 핸들러(즉 idle 함수)에서 for문 돌려가며 해당 인스턴스의 음량 변수를 가지고 와서 변경하면 됩니다(물론 SoundTransform을 통해서). 타이머 클래스에는 currentCount라는 속성(property)이 있는데, 이걸 사용해도 되겠죠. 방법은 여러가지. 페이드아웃 역시 마찬가지로 구현하면 됩니다.

페이드인/페이드아웃을 구현한 예제 (새창)




3월부터 플래시(Flash)라는 녀석을 처음으로 만지게 됐다. ...이유는 묻지 마시라. 워낙 시각적인 센스도 없고 그쪽으로는 잼병이기에, 죄다 볼품없는 것들뿐이다. 그냥 나라는 바보가 액션스크립트(ActionScript)라는 프로그래밍 언어를 공부해온 흔적들이랄까. 갖다 붙이자면 랜덤함의 미학... 뭐, 나중에 돌아보면 피식, 이러겠지.


배경음악은 math-rock 밴드 toe의 past and language.




ball


rain


fluid


ball_3


ekg



night_sky (5월 14일 추가)



나도 이딴 것들을 내가 왜 만들었는지 모르겠다. 그냥 이것들을 가만히 들여다보고 있으면 시간은 잘 가더라.




필유홈2.0
일단은 (복)학생...

카테고리

분류 전체보기 (181)
음악 (50)
(28)
게임 (23)
영화 (18)
(12)
응용프로그램 (9)
프로그래밍 (12)
엑셀 (3)
우리말 (2)
기타 (24)
 
Total : 137255
Today : 53 Yesterday : 146
-_-동맹

믹시

블로그 예절 캠페인



Creative Commons License
이 곳은 크리에이티브 커먼즈 코리아 저작자표시-비영리 2.0 South Korea 라이센스에 따라 이용하실 수 있습니다.