웹을 돌아댕기다보면 긁어와야 할 것들이 있습니다. 이 소스 역시 긁어와야만 했습니다. 전에 링크만 가져왔었다가 세월이 흘러 사이트가 사라지고 나면 남는게 없더군요. 그래서 걍 긁어옵니다. 한글 타이핑 효과 |
| | 잡동사니 |
| 2009.12.10 14:50 |
http://cafe.naver.com/flashdev/43078
소스는 frame에 붙여넣으면 됩니다. 어줍잖게 Vector를 썼는데 array로 바꾸면 flash cs3에서도 정상동작합니다.
위 링크에 있는 것과 같은 효과를 만들어 봤습니다.
잡동사니에 딱 어울리는 글 같군요. 어따 써먹을데나 있을까 모르겠네요.^^;
천천히 쓰다가 빨리쓰고 랜덤하게 오타치고 지우고 다시쓰게 하고 하면...
한글 낱자의 유니코드 값을 구하는 공식은 (초성×588)+(중성×28)+(종성) + 0xAC00 입니다.
유니코드 완성형이 그런식으로 배열되어 있습니다. 그리고 자음, 모음도 그 순서가 매겨져 있습니다.
초중종성 분리하는 함수는 getElements입니다. 위의 공식을 역산하여 초중종성을 분리합니다.
현재 코드상 모음을 따로 추출할 필요가 없고 초성의 자음만 추출하면 되어서 자음에 대한 순서만 cho배열로 매겨져 있습니다.
자음의 시작 번째는 0x3131입니다. 0다음에 3인 이유는 초성에 사용할 수 없는 ㄳ 이 2번에 위치하기 때문입니다.
윈도우즈를 사용하신다면 보조프로그램 > 시스템도구 > 문자표에서 각 유니코드의 값을 확인 할 수 있습니다.
//자음의 디폴트 값은 0x3131이다.
var cho:Vector.<int> = Vector.<int>([
0, 1, 3, 6, 7, //'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ',
8, 16, 17, 18, 20, //'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ',
21, 22, 23, 24, 25, //'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ',
26, 27, 28, 29 //'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'
]);
var txt = new TextField();
txt.width=350;
addChild(txt);
var arr=getElementsAtString("우헤헤헤 ok바리");
var time=0;
var len=arr.length;
var buf='';
var time2=0;
addEventListener(Event.ENTER_FRAME, typing);
function typing(e:Event) {
if (time<len) {
var tmp=arr[time][time2];
txt.text=buf+tmp;
time2++;
if (time2==arr[time].length) {
buf+=tmp;
time++;
time2=0;
}
} else {
removeEventListener(Event.ENTER_FRAME, typing);
}
}
function getElements(ch) {
//가(0xAC00) 부터 힣(0xd7a3) 까지
if (ch<0xAC00||ch>0xd7a3) {
//한글이 아님
return null;
}
/*
// 초`중`종성 분해
ch = ch - 0xAC00;
초성 = ch / (21 * 28);
중성 = (ch / 28) % 21;
종성 = ch % 28;
*/
ch-=44032;
var third:int = ch%28;
var returnChar=new Array(int(ch/588),int((ch/28)%21));
if (third!=0) {
returnChar[2]=third;
}
return returnChar;
}
function getElementsAtString(str) {
var len=str.length;
var chars = new Array();
for (var i = 0; i<len; i++) {
var char=getElements(str.charCodeAt(i));
if (char==null) {
//한글이 아니면
chars.push([str.charAt(i)]);
} else {
var obj_hangul=[];
for (var j = 0; j<char.length; j++) {
switch (j) {
case 0 :
//초성표시
obj_hangul.push(String.fromCharCode(0x3131+cho[char[0]]));
break;
case 1 :
//초성 + 중성
obj_hangul.push(String.fromCharCode(0xAC00+char[0]*21*28+(char[1]*28)));
break;
default :
//초성 + 중성 + 종성
obj_hangul.push(String.fromCharCode(obj_hangul[1].charCodeAt(0)+char[2]));
break;
}
}
chars.push(obj_hangul);
}
}
return chars;
}
[출처] 한글 타이핑 효과 (uiaa) |작성자 그으냥
