한글버전

Flash 프로그램 상의 Document Class 는 Field

Field.as 내용

package 
{
	import flash.display.Sprite;
 
	public class Field extends Sprite
	{
		public function Field() //이름 같은 녀석은 꼭 하나 있어야 하며, 이건 무조건 실행됨.
		{
			var u:Main = new Main;
 
			u.studentName = "아저씨";
 
			u.say();
 
			u.이렇게말해봐("아아아아아아아");
		}
	}
}

Main.as 내용

package 
{
	import flash.display.Sprite;
 
	public class Main extends Sprite
	{
		// <- 주석표시
		/*
			여러줄을 쓸 수 있는 주석표시
		*/
 
		public var 변수명:String = "내용"; 
		// var 는 variable 의 약자로 변하는 수. 즉 변수를 의미하는 단어입니다. 즉 변하는 값이 들어가는 것.
 
		public var studentName:String = "황상필"; //글자
		public var studentNumber:Number = 0; //숫자
		public var studentGood:Boolean = false; //true
 
		public function Main()
		{
 
		}
 
		public function 이렇게말해봐(:String):void{
			trace("음....",);
		}
 
		public function 값을바꿔라(:String):String{
			return+ "어허허";
		}
 
		public function say():void{
			trace(studentName, "은(는) 말한다.");
		}
 
		public function howOldAreYou():void{
			trace("나는 ", studentNumber, "살 입니다.");
		}
	}
}

sample code

package 
{
	import flash.display.Sprite;
 
	public class Main extends Sprite
	{
		// <- 주석표시
		/*
			여러줄을 쓸 수 있는 주석표시
		*/
 
		public var 변수명:String = "내용"; 
		// var 는 variable 의 약자로 변하는 수. 즉 변수를 의미하는 단어입니다. 즉 변하는 값이 들어가는 것.
 
		public var studentName:String = "황상필"; //글자
		public var studentNumber:Number = 0; //숫자
		public var studentGood:Boolean = false; //true
 
		public function Main()
		{
			trace("TEST");
			trace(studentName);
 
			say();
			howOldAreYou();
 
		}
 
		public function say():void{
			trace(studentName, "은(는) 말한다.");
		}
 
		public function howOldAreYou():void{
			trace("나는 ", studentNumber, "살 입니다.");
		}
	}
}

AS3으로 iOS용 개발시 주의사항. 코드편

모바일에선 데스크탑에 비해 처리능력이 많게는 100분의 1 에서 10분의 1 까지 사양이 떨어진다. 따라서 몇가지 노하우가 필요한데 어도비에서 언급한 문서가 있어 몇 부분만 조금 옮겨놓는다.

Type annotations을 사용하기.

var x; // 안좋음.
var x:int; // 좋음.

Static 형식의 변수 및 함수 사용하기.

private const myPI:Number = 2 * Math.acos(0); // 안좋음!
private static const myPI:Number = 2 * Math.acos(0); // 좋음!

특정 클래스를 인스턴스화 한 다수의 개체가 동일한 값을 가질 경우 이를 static으로 바꿔주는게 메모리 누수를 적게 한다.

private static function makeFaces(size:int):Vector.<Sprite>

마찮가지로, function에 있어서도 동일하다. 컴파일 타임에서 정확한 함수가 결정되어 지기 때문에 효율적이다.

상속되지 않을 경우 final class 혹은 경우에 따라 final method로 해주자.

public final class TruchetTiles

이는 static 함수를 사용할 때 의 이점과 비슷한 이점이 있다. 이 또한 정확한 함수를 찾는 시간을 줄여주기 때문이다.

public final function setOrigin(xo:int, yo:int):void

상속해도 분명 안쓰는 녀석들이 있으니 그녀석들을 final로 처리해준다.

이벤트 대신 함수 객체를 사용하자.

public function doSomething() : void 
{ 
  // ... 
  m_evD.dispatchEvent(new Event("done")); 
} 
public function doSomethingBetter(whenDone : Function) : void 
{ 
  // ... 
  whenDone(); 
}

갈수록 불편한 진실이 늘어간다. 흑… 이벤트 오브잭트는 다양한 internal data sturcture가 이 이벤트를 트랙킹하기 위해 있어야 함으로 안쓰는게 좋다고 한다.

하나의 이벤트를 단 한번만 들어라

private var enterFrameMux:FunMux = new FunMux; 
// ... 
 
// only one listener for ENTER_FRAME so it only needs 
// to get dispatched once 
addEventListener(Event.ENTER_FRAME, enterFrameMux.invoke); 
// ... 
 
// animate dice each frame 
enterFrameMux.addFun(function():void { 
// ... animDiceMux.invoke(dur); }); 
// ... 
 
// z sort each frame 
enterFrameMux.addFun(function():void { 
zss.sortChildren(); 
});

하나의 리스너를 추가하고, 이 하나의 리스너가 다수의 핸들러를 클라이언트 측에서 알 수 있도록 해줘야 한다는 이야기. 꼬이지 않아야겠구나.

오브잭트를 재사용 하기.

public function doSomething() : void 
{ 
  var a : Array = new Array(); 
  for (var i : Number = 0; i < aMillion; ++i) { 
    a.length = 0; 
    // Better than: a = new Array(); 
    // ... 
  } 
}

당연한 이야기인듯.

Mac에서 Dropbox 사용에 관한 몇가지.

특정 폴더를 dropbox와 연계시킬 필요가 있을 때 가 있을 때가 있다. 아래에서는 newFolder 폴더를 dropbox의 newFolder 폴더로 매치시키는 방법을 예로 들어 보면… 우선 Terminal에서 /Applications/Utilities 로 이동 후

ln -s ~/Dropbox/newfolder ~/newFolder

이와 같이 하면 ~/newFolder에 파일을 저장할 때, 실제로는 ~/Dropbox/newfolder로 저장하게 된다. 실은 이 같은 기능을 하는 어플리케이션이 있는데 MacDropAny, SymbolicLinker, DropLink 등이 있다.

이를 잘 활용하면 Address Book의 정보(Library/Application Support/Address Book)를 Dropbox 폴더로 옮긴 후 symbolic link를 만들면 동일한 주소록을 사용할 수 있다. 그러나 Python script를 쓰는 어플리케이션이 있을 경우 꼬일 수 있으니 조심해야할 듯. 그리고…itunes, iphoto 파일을 이같은 방식으로 링크 걸면 애러가 많은 듯 하니 이건 안하는게 좋은 듯 하다.

다른 기능으로는 LAN Sync 기능이 있는데, 같은 local network에 있을 경우 특정 폴더를 싱크시킬 수 있다. 윈도우랑 맥이랑 동시에 될 것 같은데…안해봐서 모르겠다. 그러나 적어도 OS X의 file sharing이 그다지 편하지는 않으니 이것도 나름 괜춘한듯.

그 외에는…대용량 메일 보낼 때 Share폴더에 넣고 보내면 편한 부분이 있고, 상대방이 Dropbox를 쓰지 않으면 airdropper.com 서비스를 쓰면 된다고들 한다.

이와 관련한 또다른 재미있는 서비스가 있는데 sendtodropbox.com 이다. 이건.. 파일을 이메일을 사용하여 드랍박스에 보낼 수 있다.

Adobe Air 의 어플리케이션 기본 속성

각 AIR 설치 패키지는 XML로 정의되어 있는 서술 파일이 있다. 이 파일은 구조는 변경하면 안되지만 각 노드의 순서는 상관없다.

참고 : Air의 설치 파일은 기본적으로 압축된 Zip파일 형식이이기 때문에 Air 파일의 구조를 예상하거나 서술 파일을 읽어볼 수 있다.

———————————————————————–

1. 기본 셋팅

id

어플리케이션을 확인할 때 쓰인다. 이 확인 과정은 어플리케이션을 업데이트 할 때 어플리케이션의 출처를 확인하는대 쓰이며 LocalConnection class를 통해 사용되어진다.

보통 class package를 이름 붙일 때 처럼 붙이는걸 추천한다.
ex ) net.sangpil-research.applicationName

Filename : 어플리케이션이 설치되었을 때 파일의 이름으로 사용된다. applications/name.app 이런 식이 아닐까…

Version : 작성자에 의해 정의되는 어플리케이션의 버전임. 업데이트시 중요하다. Updater.update() 메서드를 사용해서 어플리케이션을 업데이트 할 때 참고하는 듯.

Description :
Air 어플리케이션을 설치하는 동안 installer에 표시되는 내용. 간단한 설명정도는 할 수 있겠지.

Name :
프로그램 실행 시 윈도우 창의 타이틀 바에 표시되는 이름, 꼭 필요하지 않지만 넣기를 추천한다.

Copyright information
OX X에서 About 정보에 표시되는 저작권 정보임.

———————————————————————-

2. 설치 셋팅

installFolder

Air 어플리케이션은 설치시 기본적으로 window일 경우 Program Files 폴더에 들어가고, OS X 인 경우 Applications 폴더에 들어간다. 이 설치되는 기본 폴더 하에서 특정 이름으로 폴더를 만들어 넣고 싶을 때 정의한다. Adobe 프로그램들이 죄다 Adobe폴더 안에 들어가는 것 처럼.

programMenuForder

이건 Window 운영체제 안에서만 사용된다. 음 구체적으로는 무슨 말인지 모르겠다.

———————————————————————–

3. 윈도우 셋팅 : 나중에 구체적으로 적어둘 듯. 우선 큰 아웃라인만.

content
어플리케이션이 실행될 때 사용되는 최초의 SWF 나 HTML 파일의 URL을 적어주는 곳임.

title
최초 윈도우의 타이틀 바에 사용되어 지는 이름임.

appearance 와 transparency
System Chrome은 Air 어플리케이션 윈도우를 둘러싸는 부분으로서 설치되는 OS마다 다르다. 최대, 최소, 복구 버튼등이 각 OS마다 다른 모양을 하고 있기 때문. Air에서는 systemChrome, transparent, visible 등을 사용할 수 있다. 상세 내용은 나중에.

Resizing
최소, 최대화 혹은 사이즈 조정을 가능하게 할지 말지에 대해 결정하는 부분임. 기본적으로 true값을 기본값으로 가짐.

Window sizing 및 positioning

가로, 세로, 위치 등을 정의해줌. root SWF 파일에서 읽는다. HTML의 경우라면 OS에 의해서 되거나. 쩝.

icns 구조 간단 요약.

BEGIN:VEVENT //이벤트 시작.
CREATED:20101009T185955Z //생성시간
UID:E6DC39B5-2678-4F82-BC27-3732B8EF5351 //ID
DTEND;TZID=Asia/Seoul:20101010T053000 //이벤트 끝나는 시간.
TRANSP:OPAQUE //투명도
SUMMARY:testtest //제목
DTSTART;TZID=Asia/Seoul:20101010T050000 //이벤트 시작시간.
DTSTAMP:20101009T190002Z //이건 뭐지. eng : properties are specified to assist in proper sequencing of multiple free/busy time requests.
SEQUENCE:2 //수정 횟수
END:VEVENT //이벤트 끝.