오늘 포스트는, 어제 잠시 보았던 cocos2d소스를 정말 최소한 수정하여, 정말 간단한 시계어플(?)을 만드는 것이다.
사실 말이 시계 어플이지, 아무런 UI도 없다. 사실 시계는 우리에게 시간을 알려주는것이 목적이므로, 그 기본에 정말 충실한 어플이다.

HelloWorld 어플에서 수정해야 하는 부분은 HelloWorldLayer.h와 m 파일이다.

시간을 찍어주고, 저장하고 있을 label을 멤버로 올리고(기존 "HelloWorld"를 저장하던 부분), 스케쥴러를 1초마다 동작하게 하여, 시간을 다시 업데이트 해주는 함수를 추가한다. 이게 끝이다. 이러면 시계가 된다. 앱스토어에 존재하는 수만은 시계 어플들은 여기서 시작한다, 여기다가 배경 사진 그럴사한거 넣어주고, 폰트도 이쁜놈으로 넣어주고, 배치를 그럴사하게 해주면.. 앱스토에 올려놓고 팔거나, 무료로 배포할수 있는 것이다. 이 모든걸 1시간도 안걸려서 만들수 있다. 이후 sprite를 이야기 하고 나서, 이 시계 어플에 배경을 넣고 좀 꾸며 보기로 하자.

바로 소스를 보자.
 

//

//  HelloWorldLayer.h

//  

//



// When you import this file, you import all the cocos2d classes

#import "cocos2d.h"


// HelloWorldLayer

@interface HelloWorldLayer : CCLayer

{

    CCLabelTTF *label; // --> 이걸 추가했다. 아래 프로퍼티 같은건 선언하지 않았다. 기능 구현에만 충실하자.!!!!

}


// returns a CCScene that contains the HelloWorldLayer as the only child

+(CCScene *) scene;


@end


 


 

//

//  HelloWorldLayer.m

//  

 
// 추가된 함수. 매초마다 호출되어 시간을 찍어준다. 아래 코드들은 시간을 찍거나 사용하는 어플에서는 공통으로 사용할수 있는 코드이다. 

- (void) updateTime

{

    NSDate *now = [[NSDate alloc] init];

    NSLocale *locale = [NSLocale currentLocale];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    [dateFormatter setLocale:locale];


    [label setString:[dateFormatter stringFromDate:now]];

    [dateFormatter release];

    [now release];

}



// on "init" you need to initialize your instance

-(id) init

{

// always call "super" init

// Apple recommends to re-assign "self" with the "super" return value

if( (self=[super init])) {

// create and initialize a Label

                // 멤버 변수를 사용하도록, 이전 소스에서 한부분만 수정. 옆에 폰트도 바꿨음. 

label = [CCLabelTTF labelWithString:@"Hello World" fontName:@"AppleGothic" fontSize:32];


// ask director the the window size

CGSize size = [[CCDirector sharedDirector] winSize];

// position the label on the center of the screen

label.positionccp( size.width /2 , size.height/2 );

// add the label as a child to this Layer

[self addChild: label];

        

        [self schedule:@selector(updateTime) interval:1];// 이것이 바로, 매초마다 호출되게 하는 스케줄러 설정부분.

}

return self;

}

 

끝났다. 여러분은 이제 시계를 만들었다.

소스에 특별한 설명을 할만한 부분이 없으나, update함수를 매초마다 호출하게 하는 방법은 어떻게 하나?? 고민하였을텐데. 바로 위에 나오는 schedule 메소드를 사용하면 된다. 사용하는 문법은 xcode에서 타이핑하면 줄줄줄 바로 나온다. 여기서 등장하는 @selector가 무엇이냐면, 우리가 C/C++을 할때에는 함수 포인터를 사용해서, 타이머 콜백등을 등록해두거나 하는데, objective C 에서는 그렇게 하지 않고, selector라고 하는 것을 사용한다, 함수를 만들고 선언하면, 각 함수는 고유한 SEL값을 가지게 되는데, 그 값을 관리하는 테이블에 실제로 그 함수로 연결해주는 주소를 따로 관리하고 있다. 우리는 콜백을 달거나, 특별히 딜레이를 줘야 할경우가 생긴다면, 앞으로 @selector()를 사용하면 된다.

interval은 1은 1초마다를 뜻한다. 1/60을 하면 60프레임이 되는거고, 아무것도 안넣으면 매프레임마다 호출되게 된다.


또 본인이 개발할때 폰트를 Marker Felt만 써야 되는줄 알고 완전 힘들게 이미로 분리해서 하나씩 썼었는데, 전혀 그럴필요가 없다. 앞으로 cocos2d를 사용해서 글자를 찍고 싶으면 아래 리스트에 나오는 폰트중 아무거나 하나 골르면 된다. 그리고, 최근에 추가된 여러폰트들도 있을것으므로, 인터넷 검색을 통해서 찾아서 사용하면 된다.


CCLabelTTF가 지원하는 폰트들(외부폰트를 사용할수도 있음)

 

Family name: AppleGothic

Font name: AppleGothic

Family name: Hiragino Kaku Gothic ProN

Font name: HiraKakuProN-W6

Font name: HiraKakuProN-W3

Family name: Arial Unicode MS

Font name: ArialUnicodeMS

Family name: Heiti K

Font name: STHeitiK-Medium

Font name: STHeitiK-Light

Family name: DB LCD Temp

Font name: DBLCDTempBlack

Family name: Helvetica

Font name: Helvetica-Oblique

Font name: Helvetica-BoldOblique

Font name: Helvetica

Font name: Helvetica-Bold

Family name: Marker Felt

Font name: MarkerFelt-Thin

Family name: Times New Roman

Font name: TimesNewRomanPSMT

Font name: TimesNewRomanPS-BoldMT

Font name: TimesNewRomanPS-BoldItalicMT

Font name: TimesNewRomanPS-ItalicMT

Family name: Verdana

Font name: Verdana-Bold

Font name: Verdana-BoldItalic

Font name: Verdana

Font name: Verdana-Italic

Family name: Georgia

Font name: Georgia-Bold

Font name: Georgia

Font name: Georgia-BoldItalic

Font name: Georgia-Italic

Family name: Arial Rounded MT Bold

Font name: ArialRoundedMTBold

Family name: Trebuchet MS

Font name: TrebuchetMS-Italic

Font name: TrebuchetMS

Font name: Trebuchet-BoldItalic

Font name: TrebuchetMS-Bold

Family name: Heiti TC

Font name: STHeitiTC-Light

Font name: STHeitiTC-Medium

Family name: Geeza Pro

Font name: GeezaPro-Bold

Font name: GeezaPro

Family name: Courier

Font name: Courier

Font name: Courier-BoldOblique

Font name: Courier-Oblique

Font name: Courier-Bold

Family name: Arial

Font name: ArialMT

Font name: Arial-BoldMT

Font name: Arial-BoldItalicMT

Font name: Arial-ItalicMT

Family name: Heiti J

Font name: STHeitiJ-Medium

Font name: STHeitiJ-Light

Family name: Arial Hebrew

Font name: ArialHebrew

Font name: ArialHebrew-Bold

Family name: Courier New

Font name: CourierNewPS-BoldMT

Font name: CourierNewPS-ItalicMT

Font name: CourierNewPS-BoldItalicMT

Font name: CourierNewPSMT

Family name: Zapfino

Font name: Zapfino

Family name: American Typewriter

Font name: AmericanTypewriter

Font name: AmericanTypewriter-Bold

Family name: Heiti SC

Font name: STHeitiSC-Medium

Font name: STHeitiSC-Light

Family name: Helvetica Neue

Font name: HelveticaNeue

Font name: HelveticaNeue-Bold

Family name: Thonburi

Font name: Thonburi-Bold

Font name: Thonburi

 
 

위의 시계어플을 실행시킨 동영상을 마지막으로 첨부한다.

 

다음포스트에서 sprite에 대해서 이야기 해보자.
 

'코딩하고 > iOS' 카테고리의 다른 글

VoodooHDA 64비트 빌드 그리고, nVidia HDMI 제거.  (2) 2011.08.15
iOS용 게임 개발기 -5-  (0) 2011.08.10
iOS용 게임 개발기 -4-  (0) 2011.08.01
iOS용 게임 개발기 -3.1-  (0) 2011.07.11
iOS용 게임 개발기 -3-  (0) 2011.07.11
블로그 이미지

커뉴

이 세상에서 꿈 이상으로 확실한 것을, 인간은 가지고 있는 것일까?

,