태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

 

 

 

 
분류 전체.. (1308)
마이크로소.. (132)
민수네 가족 (17)
호랭이 사.. (141)
열이아빠의.. (7)
PlayPhone (98)
NetworkON (1)
ratharn의.. (10)
큐브 해법 (10)
사람들 (6)
개발 이야기 (94)
아이티 이.. (539)
영어 이야기 (2)
좋은책 이.. (8)
대기중인.. (1)
발명 이야기 (2)
건강하게.. (15)
개발자  블로그  마이크로소프트  호랭이  LG전자  구글  마소  아이폰  마이크로소프트웨어  삼성전자 
 free offers
└>free offers
 online pharma..
└>online pharma..
 Go here
└>Go here
 visit my webp..
└>visit my webp..
 Go Source
└>Go Source
«   2018/12   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
+ ITViewpoint
+ 도이모이
+ with okgosu
+ 학주니닷컴
+ 열이아빠의 RI..
+ Gsong.s Blog
+ 비주얼스튜디..
+ 광파리의 글로..
+ LovedWeb
+ 블루오션의 터..
+ 울지 않는 벌새
+ PC 지존
+ 디지털통
+ 아크비스타
+ 고독한 프로그..
+ Total : 2,082,868
+ Today : 12
+ Yesterday : 19
  

 

 

 

SDK _해당되는 글 5건
2010.02.01   아이폰 블록격파 게임 만들기 
2009.09.30   도넛 출시요... (1)
2009.08.11   Windows 7 Application 개발이야기 (1)
2009.08.11   소프트웨어 개발자를 위한 윈도우7 세미나 제 1탄 (2)
2008.10.07   한국 개발자 배려 안 한 LG모바일개발자네트워크 (12)

 

아이폰 블록격파 게임 만들기
+   [PlayPhone]   |  2010.02.01 07:44  


속속 아이폰 앱스토어의 개발자 성공 스토리가 소개되는 가운데 회사 일과는 별도로 아이폰 앱이나 게임 개발을 준비하는 소프트웨어 개발자들을 자주 보게 됩니다. 그 덕분인지 요즘 아이폰이나 안드로이드 개발자 좀 구해달라는 요청도 많이 받게 되는데요. 물론 아이폰 앱을 만든다고 모두가 억만장자가 될 수 있는 것은 아닐테지만 개발자와 침체되어 있던 중소 개발사들에 활력소가 되어주고 있는 것만은 확실한 듯합니다. 이처럼 아이폰 앱이나 게임 개발을 준비하는 분들을 위해 월간 마소에서는 매달 아이폰과 안드로이드 개발 방법을 연재하고 있는데요. 이중에 재미있는 글을 하나 옮겨봅니다. 아이폰 개발을 준비하고 계시는 분들께 도움이 되면 좋겠습니다.

출처| 아이마소 |

지난 시간에는 cocos2d를 이용하여 벽돌 깨기의 기초가 되는 공과 막대를 그리고 움직여 보았다. 이번 호에서는 그 뒤를 이어서 벽돌을 그리고 공과 벽돌의 충돌과 격파를 실현해보려 한다. 그럼 본론에 들어가기에 앞서 cocos2d 관련 이야기들을 풀어본다.

이창신 iasandcb@gmail.com, http://ias.myid. net|현재 모바일 애플리케이션 개발에 몰두하고 있다.

cocos2d의 새 버전이 역시나 지난 달 필자가 원고를 마감한 후 출시되었다. 주요 변경사항은 다음과 같다.

- 사운드 엔진이 OGG Vorbis 형식의 파일을 지원하게 되었다.
- AtlasSprite와 TextureAtlas의 많은 향상이 이루어졌다.
- 액션과 스케줄러의 성능과 안정성 또한 향상되었다.
- 물론 그밖에도 많은 버그 수정과 개선이 있었다.

cocos2d 0.7.2

특히 아틀라스 쪽과 액션·스케줄러 쪽은 cocos2d를 사용하는 많은 개발자들의 열성적인 피드백과 참여가 있었다.

이런 점에서 cocos2d 프로젝트는 매우 성공적으로 진행되고 있다고 볼 수 있는데, 지난 4월 말에 미국 앱스토어 유료 애플리케이션 1위를 차지한 StickWars라는 애플리케이션이 cocos2d를 쓴 것으로 알려지며 개발자들이 이를 무척이나 반기는 분위기다.

아이폰 OS 3.0과의 호환성

이미 아이폰 개발 프로그램에 가입한 개발자들에게는 공지가 나갔는데, 앞으로 출시할 애플리케이션뿐만 아니라 기존 애플리케이션들도 모두 아이폰 OS 3.0과의 호환성을 테스트해야 한다.

애플의 이렇듯(?) 과감한 업그레이드 정책은 예전부터 유명한데(몇 년 전에는 매킨토시의 CPU를 PowerPC에서 인텔로 바꾸면서 유니버설 바이너리 제공을 사실상 의무화했었다), 앞으로 나올 아이폰에 기본 탑재될 OS 버전인 만큼 개발자 스스로도 신경 써야 할 부분이기도 하다.

cocos2d를 기반으로 만든 애플리케이션의 경우, cocos2d 자체의 아이폰 OS 3.0과의 궁합이 무척 궁금할 것이다.

마침 http:// code.google.com/p/cocos2d-iphone/wiki/SDKCom patibility3_0에 정리되고 있는데, 요약하자면 이에 심각한 문제는 없다. cocos2d와의 호환성이 이제 애플도 신경써야 할 만큼 중요한 사안이어서 아이폰 OS 3.0 정식판 출시 전까지 말끔히 해결될 것으로 보인다.

더불어 아마도 이달 말쯤 나올 cocos2d 0.8부터 이런 호환성 문제를 대체로 해결한 상태이니 cocos2d를 사용하여 아이폰 OS 3.0 애플리케이션을 개발하는 경우에는 0.8(또는 SVN 리비전으로는 909 이후)을 사용하기를 권한다.

프로젝트 템플릿

지난 달에 소개했던 cocos2d 프로젝트 템플릿은 0.7.1 기준이라 이번에 나온 0.7.2를 쓸 수 없다.

결국 템플릿을 따로 만들어야 하는데, 마침 http://groups.google.com/group/cocos2d-iphone-discuss/browse_thread/thread/a9ce5d5733 af2d54/4bd99d0ef9f3c380에 cocos2d 프로젝트 템플릿을 만드는 좋은 방법이 나와 이번 글에 소개하려 한다.

먼저 http://cocos2d-iphone-discuss.googlegroups.com/ web/cocos2d-template_0_7_2.zip을 받아 적당한 곳에 압축을 풀면 cocos2d라는 디렉토리가 생기고 그 밑으로 내용물이 생겨난다.

이후 터미널에서 다음과 같이 디렉토리를 생성한다(혹시 아이폰 SDK를 기본 디렉토리에 설치하지 않았다면 해당 디렉토리로 잡아주길 바란다).

mkdir -p “/Developer/Platforms/iPhoneOS.platform/Developer/ Library/Xcode/Project Templates/Game”

이어서 조금 전 압축을 푼 cocos2d 디렉토리 이하를 위에서 생성한 디렉토리(/Developer/Platforms/iPhoneOS.platform /Developer/Library/Xcode/Project Templates/Game)로 복사한다. 그런 후에 Xcode를 실행하고 Preferences -> Source Trees(상단 탭에 있음)를 선택한 다음에, 하단의 + 버튼을 눌러 Setting Name은 COCOS2D_ROOT, Display Name은 cocos2d, Path는 자신의 cocos2d가 있는 디렉토리를 각각 입력한 후 적용한다.

이제 확인을 위해 File -> New Project를 선택하면 Game 카테고리에 cocos2d가 나온다.


 

그럼 서론을 마치고 본격적인 과정에 돌입해보자.

회고

 

바로 이 달의 이야기를 시작하려는 찰라, 이번 호부터 연재를 보는 독자에게는 정말이지 생뚱맞아 보일 수도 있고 또 지난달부터 따라온 독자라도 복습 차원에서 지난 시간의 내용을 되돌아볼 필요가 있겠단 생각이 든다.

따라서 지난 이야기를 잠시 해본다. 먼저 cocos2d 템플릿으로 BrickBreak라는 프로젝트를 생성한 다음, <리스트 1>의 코드로부터 시작하자(모두 프로젝트의 Classes 밑으로 들어간다).

<리스트 1> BrickBreakAppDelegate.h

    #import <UIKit/UIKit.h>
    #import "cocos2d.h"
    @interface BrickBreakAppDelegate : NSObject <UIApplicationDelegate> {

    UIWindow *window;

    }

    @property (nonatomic, retain) UIWindow *window;
    @end

<리스트 2> BrickBreakAppDelegate.m

    #import "BrickBreakAppDelegate.h"
    #import "GameScene.h"
    @implementation BrickBreakAppDelegate

    @synthesize window;
    - (void)applicationDidFinishLaunching:(UIApplication *)application {
    // NEW: Init the window
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [window setUserInteractionEnabled:YES];
    //[window setMultipleTouchEnabled:YES];
    //[[Director sharedDirector] setLandscape: YES];
    [[Director sharedDirector] setDisplayFPS:YES];
    [[Director sharedDirector] attachInWindow:window];
    [window makeKeyAndVisible];
    [window release];
    [[Director sharedDirector] runWithScene:[GameScene node]];
    }

    - (void)dealloc {
    [window release];
    [super dealloc];
    }

    - (void)applicationWillResignActive:(UIApplication *)application {
    [[Director sharedDirector] pause];
    }

    - (void)applicationDidBecomeActive:(UIApplication *)application {
    [[Director sharedDirector] resume];
    }

    - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
    [[TextureMgr sharedTextureMgr] removeAllTextures];
    }

    @end

<리스트 3> GameScene.h

    #import <Foundation/Foundation.h>
    #import "cocos2d.h"

    @interface GameScene : Scene {
    }

    @end

    @interface GameLayer : Layer {
    int ballX;
    int ballY;
    int deltaX;
    int deltaY;
    int barX;
    int barY;
    BOOL isBallMoving;
    Sprite *ball;
    Sprite *bar;
    }

    @property (nonatomic, retain) Sprite *ball;
    @property (nonatomic, retain) Sprite *bar;

    - (void)move:(ccTime)delta;
    @end

<리스트 4> GameScene.m

    #import "GameScene.h"
    #import <QuartzCore/QuartzCore.h>

    CGImageRef CreateRectangleImage(int pixelsWide, int pixelsHigh, float red, float green, float blue, float alpha, BOOL wantCircle) {

    CGImageRef theCGImage = NULL;
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef theBitmapContext = CGBitmapContextCreate (NULL, pixelsWide, pixelsHigh,
      8, 0, colorSpace, kCGImageAlphaNoneSkipFirst);
    if (theBitmapContext != NULL) {
    CGContextSetRGBFillColor(theBitmapContext, red, green, blue, alpha);

    if (wantCircle) {
    CGContextFillEllipseInRect(theBitmapContext, CGRectMake(0, 0, pixelsWide, pixelsHigh));
    } else {

    CGContextFillRect(theBitmapContext, CGRectMake(0, 0, pixelsWide, pixelsHigh));
    }
    theCGImage=CGBitmapContextCreateImage(theBitmapContext);
    CGContextRelease(theBitmapContext);
    }

    CGColorSpaceRelease(colorSpace);
        return theCGImage;
    }

    @implementation GameScene
    - (id)init {
    if (self = [super init]) {
    [self addChild:[GameLayer node] z:1];
    }
    return self;
    }

    @end
    @implementation GameLayer
    @synthesize ball, bar;

    - (void)move:(ccTime)dt {
    if (ballX < 0 || ballX > 320) {
    deltaX = -deltaX;
    }

    if (ballY > 480 || (ballY < 30 && ballX > barX - 30 && ballX < barX + 30)) {
    deltaY = -deltaY;
    }

    ballX += deltaX;
    ballY += deltaY;
    [ball runAction:[MoveTo actionWithDuration:dt position:cpv(ballX, ballY)]];
    }

    - (id)init {
    if (self = [super init]) {
    CGImageRef ballImage=CreateRectangleImage(20, 20, 1.0, 1.0, 1.0, 1.0, YES);
    self.ball = [[Sprite alloc] initWithCGImage:ballImage];
    ballX = 160;
    ballY = 30;
    deltaX = 1;
    deltaY = 1;
    ball.position = cpv(ballX, ballY);
    [self addChild:ball];
    CGImageRelease(ballImage);
    [self schedule:@selector(move:)];

    CGImageRef barImage=CreateRectangleImage(60, 10, 1.0, 1.0, 1.0, 1.0, NO);
    self.bar = [[Sprite alloc] initWithCGImage:barImage];
    barX = 160;
    barY = 10;
    bar.position = cpv(barX, barY);

    [self addChild:bar];
    CGImageRelease(barImage);
    isTouchEnabled = YES;
    }
    return self;
    }

    - (BOOL)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView: [touch view]];
    int x = location.x;
    barX = x;
    [bar runAction:[MoveTo actionWithDuration:0.1 position:cpv(barX, barY)]];
    return kEventHandled;
    }

    @end

이 글에 소개된 프로젝트 템플릿을 쓰는 경우에 MenuScene 클래스 코드도 자동으로 생성되는데, 여기에서는 쓰이지 않는다(하지만 지우지는 말 것).

BrickBreakAppDelegate는 일종의 부트스트랩(bootstrap)으로, GameScene이라는 본격적인 게임 화면 처리 클래스를 불러오기 위한 사전 준비 작업을 맡는다. GameScene에서 각각의 쓰임새는 다음과 같다.

- CreateRectangleImage : 주어진 크기와 색의 원과 직사각형을 그린다.
- move : 공을 움직이고 막대와의 충돌을 감지한다.
- ccTouchesEnded : 터치 입력을 받아 막대를 움직인다.

그리고 지난 달 코드와 달라진 부분이 조금 있으므로 앞의 코드로 갱신하기를 바란다. 이쯤해서 회고를 마치고 다음 이야기를 시작한다. 이어서 추가할 것은 바로 벽돌이다.

벽돌

벽돌이 공이나 막대와 다른 점은 다음과 같다.

- 벽돌은 움직이지 않는다.
- 공과 충돌하면 파괴된다.
- 여러 개가 동시에 화면에 나온다.

벽돌은 흰색 정사각형으로, 38×38의 크기를 갖고 화면 중상단에 8개씩 8줄을 깔려 한다. 벽돌 크기를 38×38로 한 것은 한 픽셀씩 여백을 두어 벽돌끼리 붙어 보이지 않게 하기 위해서다.

이를 위해 우선 GameScene.h에 bricks라는 배열을 인스턴스 변수로 추가한다.

<리스트 5> bricks 인스턴스 변수가 추가된 GameScene.h

    #import <Foundation/Foundation.h>
    #import "cocos2d.h"

    @interface GameScene : Scene {
    }

    @end
    @interface GameLayer : Layer {

    int ballX;
    int ballY;
    int deltaX;
    int deltaY;
    int barX;
    int barY;

    BOOL isBallMoving;
    Sprite *ball;
    Sprite *bar;
    NSMutableArray *bricks;
    }

    @property (nonatomic, retain) Sprite *ball;
    @property (nonatomic, retain) Sprite *bar;
    @property (nonatomic, retain) NSMutableArray *bricks;

    - (void)move:(ccTime)delta;
    @end

bricks는 벽돌들을 저장할 곳인데, 동적으로 변경될 것이라 NSMutableArray 타입을 썼다.

참고로 Objective-C(더 정확히는 Foundation 프레임워크)는 대부분의 데이터 컨테이너 타입(심지어 문자열까지)에 불가변형(immutable)과 가변형(mutable)의 구분이 있다.

배열의 경우도 NSArray가 불가변형이며 초기 생성 이후에는 내용물에 변경을 가할 수 없다.

반면 가변형 배열인 NSMutableArray는 생성 후 얼마든지 원소를 추가 및 삭제할 수 있다.


<리스트 6> GameScene.m에서 벽돌 초기화 부분

    @implementation GameLayer
    @synthesize ball, bar, bricks;

    (중략)

    - (id)init {
    if (self = [super init]) {
    CGImageRef ballImage=CreateRectangleImage(20, 20, 1.0, 1.0, 1.0, 1.0, YES);
    self.ball = [[Sprite alloc] initWithCGImage:ballImage];
    ballX = 160;
    ballY = 30;
    deltaX = 0;
    deltaY = 0;
    ball.position = cpv(ballX, ballY);
    [self addChild:ball];
    CGImageRelease(ballImage);
    [ball release];
    [self schedule:@selector(move:)];

    CGImageRef barImage=CreateRectangleImage(60, 10, 1.0, 1.0, 1.0, 1.0, NO);
    self.bar = [[Sprite alloc] initWithCGImage:barImage];
    barX = 160;
    barY = 10;
    bar.position = cpv(barX, barY);

    [self addChild:bar];
    CGImageRelease(barImage);
    [bar release];
    self.bricks = [[NSMutableArray alloc] initWithCapacity:8];

    for (int i = 0; i < 8; i++) {
    NSMutableArray *brickRow = [[NSMutableArray alloc] initWithCapacity:8];
    [bricks addObject:brickRow];

    for (int j = 0; j < 8; j++) {
    CGImageRef brickImage = CreateRectangleImage(38, 38, 1.0, 1.0, 1.0, 1.0, NO);
    Sprite *brick = [[Sprite alloc] initWithCGImage:brickImage];
    brick.position = cpv(j * 40 + 1 + 19, i * 40 + 1 + 19 + 80);

    [self addChild:brick];
    [brickRow addObject:brick];
    CGImageRelease(brickImage);
    [brick release];
    }

    [brickRow release];
    }

    isTouchEnabled = YES;
    }

    return self;
    }

    (후략)

먼저 bricks 프로퍼티의 게터, 세터 생성을 위해 @synthesize에 bricks를 추가했다.

GameLayer의 init 메소드에서 8×8의 이중 루프를 통해 벽돌의 스프라이트를 생성하고 화면에 추가하고 있다.

첫 번째 루프에서는 한 줄에 해당하는 brickRow라는 배열을 생성하여 bricks에 추가하고, 두 번째 배열에서 brickRow에 벽돌 스프라이트를 추가한다.

이때 화면 레이어에도 바로 추가하여 벽돌 데이터뿐만 아니라 화면 초기화도 함께 한다.


격파

지금까지 한 것을 실행해보면 좀 황당한 실행 화면이 나타난다.

공이 벽돌을 그대로 통과하는 것이다! 공을 막대로 쳐내는 것처럼, 공이 벽돌과 부딪히면 벽돌이 파괴되는 처리가 필요하다.

우선 공과 벽돌의 충돌 판정이 필요한데, 앞서 공과 막대의 경우와 같이 move 메소드에서 처리한다.

공과 막대 사이의 충돌과 달리 공과 벽돌은 충돌할 수 있는 방향이 4면이므로 충돌에 따른 반사도 Y 방향 반사와 더불어 X 방향의 반사도 발생할 수 있다.

파괴의 시각적인 효과는 간단히 Sprite 클래스(실은 조상 클래스인 CocosNode)의 visible 프로퍼티를 NO로 설정하는 것으로 구현했다.

따라서 충돌 판정시 이미 visible 프로퍼티가 NO인 벽돌은 바로 다음으로 넘어가야 한다.

<리스트 7> 벽돌 판정이 추가된 GameLayer의 move 메소드

    - (void)move:(ccTime)dt {
    if (ballX < 0 || ballX > 320) {
    deltaX = -deltaX;
    }

    if (ballY > 480 || (ballY < 30 && ballX > barX - 30 && ballX < barX + 30)) {
    deltaY = -deltaY;
    }

    for (NSMutableArray *brickRow in bricks) {
    for (Sprite *brick in brickRow) {
    if (!brick.visible) {
    continue;
    }

    int brickBallDeltaX = brick.position.x - ballX;
    int brickBallDeltaY = brick.position.y - ballY;

    if (brickBallDeltaX < 29 && brickBallDeltaX > -29) {
    if (brickBallDeltaY < 19 && brickBallDeltaY > - 19) {
    brick.visible = NO;
    deltaX = -deltaX;
    }
    }

    if (brickBallDeltaY < 29 && brickBallDeltaY > -29) {
    if (brickBallDeltaX < 19 && brickBallDeltaX > - 19) {
    brick.visible = NO;
    deltaY = -deltaY;
    }
    }
    }
    }

    ballX += deltaX;
    ballY += deltaY;

    [ball runAction:[MoveTo actionWithDuration:dt position:cpv(ballX, ballY)]];
    }

벽돌 초기화처럼 이중 루프가 도는데 문법적으로 foreach에 해당하는 for (Type iterator in arrays) 방식을 써서 간결함을 확보해보았다.

이제 실행해보면 공이 벽돌과 충돌하지 않고 보통의 벽돌 깨기처럼 진행된다.

단, 벽돌이 막대와 가깝게 있으므로 조심할 것(이렇게 한 데에는 다음 달 연재를 위한 복선이 깔려 있다)!

과제

이번에도 독자에게 예제를 보완하는 작업을 과제로 내보려 한다.

첫 번째는 MenuScene이다. 보통 게임은 바로 본 게임 화면을 시작하는 대신, 오프닝 화면으로 한숨 돌리게 한 다음에 게임 시작을 사용자가 명시적으로 할 수 있도록 한다.

MenuScene의 구현은 또한 Scene간의 전환을 공부할 수 있게 해주는 좋은 소재이기도 하다.

두 번째는 게임 오버 처리이다. 공이 막대 밑으로 빠지는 경우에 게임 오버 메시지를 보여주고 처음부터 다시 할지 아니면 메뉴 화면으로 돌아갈지 물어봐주는 센스가 필요할 것이다.

이때 MenuScene에서 주로 쓰이는 MenuItem 등을 활용할 수 있으니 MenuScene 구현은 확실히 쓸모가 많다.

역시나 다음 시간에 필자의 구현과 비교할 수 있는 기회를 제공할 것이다.

6월에는 애플 관련 개발자들의 최대 행사인 WWDC가 열린다.

이 컨퍼런스에서 아이폰 OS 3.0에 대한 공개적인 논의가 또 한번 봇물을 이룰 것으로 보이며, 어쩌면 NDA(비공개 조약)도 풀려 아이폰 OS 3.0에 대해 자유롭게 이야기 나눌 수 있게 될지도 모르겠다.

그 가능성이 현실이 되면 아이폰 OS 3.0의 게임 기능 관련 강화 쪽, 즉 Game Kit에 대해 알아보는 기회를 가져볼 생각이다.





     cocos2d, iPhone, SDK, 개발자, 게임개발, 마소, 마이크로소프트웨어, 블로그, 블록격파, 아이폰, 이창신, 호랭이
     0   0

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

도넛 출시요...
+   [ratharn의 임베디드 세상]   |  2009.09.30 02:24  


최근 Android 운영체제에 대한 관심이 많아지고 있습니다.
Google 만들었다는 것과 오픈 소스라는 점이 강점이 되어 유행처럼 번지고 있습니다.

수년전에 임베디드 리눅스가 지금과 같은 붐이 일은적이 있었습니다.
그때 PalmPalm Tech니 MIZI 리눅스와 같은 회사들이 임베디드 리눅스를 탑재한
단말기를 소개하기도 했습니다.

임베디드 리눅스의 경우 오픈소스, 무료라는 것 때문에 쉽게 접근했다가 많은 회사들이
개발 중간에 어려움을 겪기도 했습니다.

하지만 Android 운영체제의 경우 OS 및 GUI가 다 제공된다는 점 때문에 기존의 임베디드 리눅스와는 다르게
빠르게 도입되고 있습니다. 물론 둘다 커널은 리눅스 커널입니다. 하여튼 Android의 행보는 지켜봐야할 중요한
기술중의 하나입니다. 도넛은 Android 1.6 버전의 코드명입니다.

응용 프로그램을 만들 SDK는 다음 링크에서 확인할 수 있습니다.
http://android-developers.blogspot.com/2009/09/android-16-sdk-is-here.

도넷에 대한 기능은 다음과 같은 Google 비디오에서 확인할 수 있습니다.


도넛출시는 이전부터 되었습니다. 스마트폰 개발 업체중 대표적인 업체인 HTC에서 도넛 버전의
운영체제 이미지를 금일 릴리스 했다고 해서 Android 운영체제에 대해 잠시 살펴봤습니다.

요게 제 방에 있는 안드로이드 폰 입니다.

사용자 삽입 이미지








     Android, dounet, ratharn, SDK, 구글, 도넛, 라단, 안드로이드, 업데이트, 임베디드 시스템
     0   1
2010.03.27 18:50 신고
안드로이드 우리
개임하자! 우리도 상관 따원 필요 없어!

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

Windows 7 Application 개발이야기
+   [개발 이야기]   |  2009.08.11 19:34  


<정희재>

첫번째 이야기

Windows 7 의 행보에 관한 여러가지 추측들이 분분한 가운데, Beta 버전을 거쳐 RC(Release Candidate) 버전 출시에 이어 RTM(Release To Manufacture) 버전까지 출시되었다. 이미 많은 개발자들과 일반 사용자들이 Windows 7 에 관심을 가지고 있으며, 관심에 그치지 않고 Beta 버전과 RC 버전 그리고, RTM 버전까지 설치를 하여 사용을 하고 있는 실정이다.

이제 Windows PC 개발자라면 Windows 7 Application 개발을 준비해야 할 때가 온듯하여, Windows 7 Application을 개발하기 위한 간단한 방법들에 대한 강좌를 개설한다.

부디 많은 개발자들이 이 블로그에서 필요한 정보들을 얻어 가길 바란다.

사용자 삽입 이미지
           [ Windows 7 바탕화면 ]

C++ 개발자들도 관심을 가져도 실망하지 않을 것이다. Windows Vista라는 운영체제가 일반유저 들에게 많은 사랑을 받지 못한 것처럼 C++ 개발자들에게서도 애정과 관심을 받지 못했던 것을 아마도 Microsoft사 에서 눈치를 챈 모양이다.

Windows 7 SDK를 설치해 보면 Windows 7 API에는 C++ 개발자들을 위한 배려를 충분히 느낄 수 있을 것이다.

Windows 7 용 Application 개발을 위해서는 다음과 같은 내용들이 준비되어야 한다.

 

  1. Windows 7 RC 버전 설치
    (2009년 8월 20일 다운로드 중지예정)
    http://msdn.microsoft.com/ko-kr/evalcenter/dd353271.aspx
  2. Microsoft Visual Studio 2008 설치
  3. Visual Studio 2008 SP1 설치
    http://www.microsoft.com/downloads/details.aspx?FamilyID=FBEE1648-7106-44A7-9649-6D9F6D58056E&displaylang=en 




     2008, c++, RTM, SDK, Visual Studio, windows 7 RC, windows7, 개발자, 비주얼스튜디오, 윈도우7
     0   1
BlogIcon NeoKim 2009.08.11 19:55 신고
와우... 요즘 윈도우 7 깔아놓고 쉬게하고 있었는 데 좋은 정보 감사!합니다.

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

소프트웨어 개발자를 위한 윈도우7 세미나 제 1탄
+   [개발 이야기]   |  2009.08.11 14:26  


사용자 삽입 이미지

아는 분들만 알고 모르는 분은 아무도 모르시겠지만

호랭이는 요즘 몇몇 개발자들과 함께 윈도우7 개발자 스터디 모임 같은 걸 하고 있습니다.

그리고 그 모임활용의 일환(?)으로 MSDN 세미나를 개최하게 되었는데요.

첫번째 시간인 만큼 윈도우 7 전반의 내용을 다루고 있어 딱 어느 분야에 일하는 분들이 아니더라도

윈도우7 출시 이후 달라질 개발 환경이나 소프트웨어 심지어는 하드웨어들의 환경이 어떻게 달라질 지에대해서도 얘기해 드리는 자리를 마련하게 되었습니다.

이미 사전등록이 많이 되어 있으니 좀 서둘러서 신청을 하셔야 재미있는 세미나를 함께하실 수 있을 듯합니다.

일단 손발이 오그라드는 세미나 초대 동영상을 한번 봐 주시죠.

동영상 중반에 정말 아무나 할 수 없는 놀라운 동영상 촬영 테크닉이 적용된 화면이 나옵니다.



8월 20일 목요일 저녁 7시부터 포스코센터 서관 5층에서 진행될 이 세미나의 등록 신청은

http://msdn.microsoft.com/ko-kr/ee373735.aspx 에서 하시면 되고요.

꼭 오셔서 재미있고 유익한 정보 많이 얻어가시길 바라겠습니다.

다음은 초청 동영상의 '나름' 메이킹 필름입니다.



감사합니다.

그럼 그날 뵙겠습니다.

아참! 전에 서피스 써 보고 싶다고 하셨던 분도 이 세미나에 오시면 써 보실 수 있습니다.




     MSDN, SDK, Trensfer Windows 7, windows7, 개발자, 멀티터치, 서피스, 세미나, 윈도우7
     1   2
BlogIcon ooti 2009.08.11 17:22 신고
나도 저분들 나이가 되어서도 저렇게 놀 수 있을까...
호랭이 2009.08.11 17:29 신고 
낼모레 마흔인 형아들이(어쩌면 몇 명은 이미 마흔) 저러고 놀다니... 아 부끄러워~

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

한국 개발자 배려 안 한 LG모바일개발자네트워크
+   [개발 이야기]   |  2008.10.07 17:00  



오늘 LG전자가 휴대폰 소프트웨어 개발자들을 위한 웹 서비스를 오픈했다는 보도자료가 올라왔습니다.


실제로 오픈된 건 9월 말경인 듯한데요.


LG 모바일 개발자 네트워크(http://developer.lgmobile.com)라는 이 사이트에 접속하면 LG전자의 휴대폰에서 구동되는 소프트웨어 제안을 할 수 있으며, 휴대폰 기술 정보 등을 확인할 수 있습니다.


또, 자바 ME 기반의 SDK와 플래시 라이트의 소프트웨어 가이드 라인 등을 제공받을 수도 있으며, 이를 이용해 LG휴대폰에서 사용할 수 있는 애플리케이션이나 게임, 콘텐츠 등의 새로운 프로그램을 개발할 수 있답니다. 리눅스 SDK도 제공할 예정이라고도 하고요.


모바일 소프트웨어 개발자들이 각 분야에 대한 개발 사항에 대해 토론할 수 있는 포럼과 커뮤니케이션 채널도 지원하고 있는데요.


LG전자는 이 서비스를 통해 개발자들에게 LG 휴대폰 정보와 SDK를 제공하고, 애플리케이션 및 서비스 제안 등을 받으려고 한다는데요...


국내 휴대폰 기업들이 소프트웨어 개발에 관심을 가지고 진입장벽을 낮추려는 노력을 한다는 건 참으로 감사한 일입니다.


게다가 보도자료에 올라온 누님들도 어찌나 이뿌신지!!!

아주 그냥 감사할 따름입니다.


버트! 그러나!!!


몇 가지 우려되는 점들이 있습니다.

첫 번째 문제(?)는 이 사이트가 영어 사이트라는 겁니다.


뭐 글로벌 서비스로 개설된 거니 영어로 만들어지는 게 당연하다고 생각합니다.


개발자 쯤 되면 영어 정도는 기본으로 하면서 개발도 쭉쭉 잘하고 창조적이며, 기획 능력도 뛰어나야 하는 거니까(OTL) 왜 영어만 지원 하냐고 반문하는 건 바보 멍청이나 하는 짓인 걸까요?

개발자들은 아무렇지도 않은데 호랭이만 지가 영어 못하니까 자격지심에 열불내는 걸까요?

이건 영어를 하고 못하고의 문제를 떠나 편의를 고려하지 않은 데 더 큰 문제가 있다는 생각이 듭니다.

대표적인 글로벌 IT 회사이면서 악의 축으로 대표되기까지하는 MS조차도 MSDN 사이트의 콘텐츠들을 최대한 한글화 하기 위해 많은 비용을 투자하고 있는 실정입니다.

국내 기업조차 한국 개발자들은 뒷전으로하고 한글 지원은 전혀 없이 영어 사이트를 오픈한다는 건 한국 개발자들을 외면한 처사가 아닌가 생각됩니다.

또 한가지는 다른 휴대폰 개발업체들처럼 플랫폼을 제공하고 그 안에서 개발자나 개발사들이 각자 만든 애플리케이션을 유통할 수 있도록 하는 게 아니라

애플리케이션이나 서비스에 대한 제안을 받는 창구로 사용하겠다고 하는 점입니다.

전자는 분쟁의 소지가 적습니다.

좋은 기획으로 좋은 애플리케이션을 만들었다면 소비자들이 그에 상응하는 결과를 내 줄 것이기 때문입니다.

그것이 유료든 아니면 그저 다운로드 수만 체크할 수 있는 무료 서비스든 말입니다.

그런데 아이디어를 제안한다는 건

그 아이디어를 통해 LG전자에 크든 작든 학습과 참고의 여지를 제공할 수는 있을 지언정

아이디어가 제품으로 만들어진 후에 그 아이디어에 대한 소유권을 행사하는 게

굉장히 모호할 수도 있다는 점입니다.

사이트가 영어로 되어 있는 탓에 이에 대해 얼마나 규정이 세밀하게 잘 정의되어 있는지는 모르겠습니다.

읽을 수도 없고 읽고 싶지도 않습니다.

호랭이는 개발자도 아니고 애플리케이션 만들어서 LG휴대폰 사이트에서 팔아먹을 생각도 없지만

개발자 네트워크 서비스를 시작한다기에 반가운 마음에 찾아간 사이트가 온통 영어 천지라서

실망한 마음에 적어보는 포스트입니다.

뎅장... 영어 못하면 이제 국내 기업들에게도 푸대접 받는 거군요.

아 이 사이트에서 우연히 한글을 찾았습니다.


찾아보기 버튼이 한글로 돼 있네요!!!




     LG, LG전자, LG휴대폰, SDK, 개발자, 모바일 소프트웨어, 모바일 애플리케이션, 자바FX, 휴대폰, 휴대폰 개발, 휴대폰 소프트웨어, 휴대폰 애플리케이션
     1   12
BlogIcon 학주니 2008.10.07 18:15 신고
찾아보기만 한글로 되어있군요.. -.-;
국내 개발자들을 위한 한글 사이트도 따로 운영해줬으면 좋겠는데..
그런데 누님들이 참 착하군요 ^^
BlogIcon 마소호랭이 2008.10.07 18:16 신고 
네 저런 착한 분들은 20세 부터 국가에서 연금으로 생활할 수 있도록 지원해 드려야 한다능!!!
BlogIcon 담덕01 2008.10.07 18:24 신고
그러네요.. 개발자이면서 영어 못하는 저는..
찬밥신세 받는거군요.. ㅠ.ㅠ
BlogIcon 마소호랭이 2008.10.07 19:00 신고 
OTL 영어 못하면 사람도 아니삼??? ㅠ_ㅠ
BlogIcon 오랜친구 2008.10.07 23:43 신고
한국은 영어 못하는 것보다 안 예뻐서 찬밥인 경우가 더 많습니다요. ㅠㅠ
BlogIcon 호랭이 2008.10.08 06:10 신고 
이뿌자나!!!! 버럭버럭
지나가다 2008.10.08 12:27 신고
찾아보기를 한글로 한게 아니라 디폴트가 클라이언트 언어에 따라 다르게 나옵니다.
즉 영문 브라우저에서 보면 "Browser..."으로 보입니다. ㅋㅋ
BlogIcon 호랭이 2008.10.08 13:15 신고 
아하!
다른 버튼들은 영문이던데 저거만 한글이길레 특이해서 ㅋㅋㅋ
BlogIcon JNine 2008.10.09 00:43 신고
그래도 저런 Open정책이 생겼다는 것에 점수를 주고 싶습니다. 그리고, 제가 조금 더 뒤져봤는데 제안서 양식이 있어서 프로그램 만든 것과 제안서를 접수하면 회사쪽의 제안 담당 팀에서 컨택을 하는 것 같습니다. 그리고 제안서 양식에 가격을 적는 부분이 있어서 LG측과 가격 네고를 통해서 수익을 얻는 구조입니다.

그리고 SDK 사용자 매뉴얼 중간 중간에 Samsung이 눈에 띈다는... 자세한 사항은 트랙백으로 남깁니다. ㅎㅎ
BlogIcon 호랭이 2008.10.09 01:06 신고 
네 저도 그 점에서는 큰 발전이라고 생각하고 있습니다. ㅎㅎ
좋은 정보 감사합니다.
Jonnhn 2008.10.19 08:58 신고
여자분 이뿌시당 0_o
호랭이 2008.10.19 09:28 신고 
호랭이 블로그에 예쁘지 않은 누님은 모시질 않습니다... ㅎㅎ

아이디 
비밀번호 
홈페이지 
비밀글   

 

<<이전 | 1 | 다음>>

마소호랭이's Blog is powered by Daum