태터데스크 관리자

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

태터데스크 메시지

저장하였습니다.

 

 

 

 
분류 전체.. (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
«   2017/07   »
            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 : 1,911,632
+ Today : 191
+ Yesterday : 231
  

 

 

 

iPhone _해당되는 글 6건
2010.11.15   아이팟터치 4, 무료 혹은 일부 현금!!! 원하는 대로 약정 판매 실시!!! (2)
2010.05.10   4만원짜리 아이폰! Java의 우수성의 재발견!!! (6)
2010.03.17   모바일용 포토샵, Photoshop.com Mobile (1)
2010.02.01   아이폰 블록격파 게임 만들기 
2009.08.07   아이폰 마술(iPhone Magic), 아 이 아저씨 너무 우껴~ (5)
2009.07.29   아이폰, 아이팟터치 사용자 공짜로 SMS 보내는 방법!!! 파란 FreeSMS 

 

아이팟터치 4, 무료 혹은 일부 현금!!! 원하는 대로 약정 판매 실시!!!
+   [마이크로소프트웨어]   |  2010.11.15 16:17  



아이폰 4를 사기엔 기다려야 하는 기간이 부담스럽거나 아직 남은 3GS의 약정 때문에 부담스러워 아이팟터치 4를 사려고 계획중인 분들께 희소식!!!


에그 2 약정으로 아이팟터치 4 32GB 모델을 무료 혹은 약간의 비용을 지불하고 구입하실 수 있습니다.


아시다시피 아이팟터치 4는 무선 인터넷 연결을 위해 에그와 함께 사용하는 것이 편리하니 꽤 매력적인 조건이라고 생각됩니다.


보다 자세한 내용은 아래 기사를 참조해주세요.


아 저도 필리핀 간 큰아들과의 페이스타임용으로 하나 질렀다는 캬캬캬캬캬캬캬...


근데 빨리 안 와요! 신청자가 많은 탓인지 신청 순서대로 보내준다고 합니다.


--------------------------------------------------------------------------------------------------------------------------

이미선 기자 init@imaso.co.kr, init.egloos.com


무료로 제공되는 최신 아이팟 터치 4 이벤트가 많은 이들의 이목을 집중시키고 있다.

판매 첫 날부터 이어진 판매 상승곡선이 이와 같은 관심을 증명해 준다.

이는 와이브로와 통합 상품으로 제공됨에 따라 단말기 비용 부담이 없어진 데 따른 결과로 분석된다.

이번 이벤트를 주최한 월간 마이크로소프트웨어에 따르면 아이팟 터치 4와 와이브로 통합 상품을 선보인 후 아이팟의 가격에 부담을 느껴온 소비자들의 구매가 줄을 잇고 있다.

이에 회사측은 당초 11월 초까지 예정돼 있던 이벤트 기간을 연장한다고 밝혀 아직까지 구매하지 못한 소비자들에게 희소식이 되고 있다.

> 아이팟 터치 + 에그 2 통합 상품 신청하기 <

아이팟 터치 4의 가장 큰 특징은 아이폰 4와 같은 페이스 타임 기능으로, 아이폰 4 및 아이팟 터치 4 사용자들과 무료로 화상 통화를 할 수 있다.

다만 이를 위해서는 무선 통신을 가능케 하는 와이파이 연결이 필수.

이에 따라 어디서나 와이브로를 활용할 수 있는 에그가 필수다.


월간 마이크로소프트웨어가 선보인 아이팟 터치 4와 에그 2 통합 상품은 32GB 모델에 한해 3년 약정 가입시 월 2만 7,000원의 에그 사용료만 부담하면 아이팟 터치 4와 에그 2가 모두 무료로 제공된다.

2년 약정 가입시에는 아이팟 터치 4 단말기 가격이 18만 원으로 대폭 인하된다.

여기에 와이브로 가입비와 UICC까지 제공되고 가입 후 처음 14일간은 사용료도 부과되지 않아 특히 얼리어답터와 화상 통화가 잦은 연인, 해외에 자녀를 유학 보낸 학부모, 가족의 해외 출장이 잦은 가정에서 인기를 얻고 있다.

이번 통합상품은 해당 신청 페이지(http:// www.imaso.co.kr)에서 할 수 있다.

월간 마이크로소프트웨어 정희용 대표는 “다양한 소비자들이 최신 아이팟 터치 4와 와이브로 단말기인 에그의 통합 상품을 구매하고 있다”며 “아이팟 터치 4 사용의 필수품인 에그와 함께 구입하면 단말기 비용 없이 에그의 월 사용료만 부과되기 때문에 비용의 부담이 적다”고 소개했다.

이어 그는 “물량이 한정돼 있으니 서둘러 구매해야 원활한 공급이 가능하다”고 권고했다.


아이팟 터치 4 제품 소개 |  http://www.apple.com/kr/ipodtouch/

에그 2 제품 소개 |  http://www.show.co.kr/index.asp?code=WAD0000


> 아이팟 터치 + 에그 2 통합 상품 신청하기 <

신고




     4G, 4세대, egg, iPhone, ipod, ipodtouch, 가격, 개발자, 무료, 블로그, 아이팟, 아이팟터치, 아이팟터치4 가격, 아이폰, 약정, 에그, 에그2, 할인
     7   2
2011.01.08 21:14
비밀댓글입니다
BlogIcon supra sale 2012.12.06 15:30 신고
Individuals thinking about creating customized wines labeling through Individual Wines can begin in MyReviewsNow. net's Premium Meals and Wines Website.

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

 

 

4만원짜리 아이폰! Java의 우수성의 재발견!!!
+   [PlayPhone]   |  2010.05.10 05:10  


4만원짜리 아이폰~! 믿어지시나요? 무려 약정 없이 4만원이라면요!

네 이 말도 안되는 얘기는 중국산 짝퉁 아이폰 이야기입니다.
Java로 만들었다는 이 짝퉁 아이폰의 판매가는 265위안(한화로 약 4~5만원) 선입니다. =_=;

그럼 당연히 터치 따위는 안 되겠지요!
됩니다. =_=;

아 그럼 하다 못해 중력센서 따위는 없겠지요!
있습니다. ㅎㄷㄷㄷㄷ

아 그럼 걍 전화 기능은 없고 PMP구나!
전화 됩니다. OTL

일단 사진 한장 보실까요?

사용자 삽입 이미지

어느 게 진짜 아이폰 박스일까요?

2초 이상 망설였다면 당신은 멀었다! 쿨럭!!


그것도 개그냐!! - 출처: 웃긴 짤방 - Google 이미지

한국에서는 안 되지만 중국에서는 전화도 잘 된다고 합니다.

사용자 삽입 이미지

이건 시작 화면 이미지고요.

사용자 삽입 이미지

더 자세한 내용은 서명덕 기자가 올린 기사 http://news.imaso.co.kr/archives/149 에서 확인할 수 있습니다.

아! 이 짝퉁 아이폰은 배터리 교체가 가능하고, 무려 배터리도 두 개나 들어있답니다.

Java의 우월성을 다시금 실감하게 되는 제품인데요.

그나저나 4만원이라면 액정 값은 나오는 건가요? =_=;

신고




     iPhone, java, 개발자, 마소, 마이크로소프트웨어, 블로그, 서명덕, 짝퉁아이폰, 호랭이
     0   6
BlogIcon ASH84 2010.05.04 10:43 신고
가격은 참 착하네요^^
호랭이 2010.05.04 11:01 신고
그러게요. 사실 말이 안 되는 가격이죠.
BlogIcon 학주니 2010.05.04 11:14 신고
이게 그 중국에서 나왔다는.. -.-;
BlogIcon 브리야 2010.05.04 12:40 신고
장난감으로 한개 사면 좋겠네여 ㅋㅋ
그런데...이글만 봐서는 머가 자바의 우월성인지 알수가 없네여 -_-;
BlogIcon ooti 2010.05.05 12:53 신고
어플리케이션 속도가 빠르다면 꽤 쓸만한 디바이스가 될것 같은데요..
호랭이 2010.05.10 05:08 신고
생각보다 성능은 그다지 좋지 않은 모양입니다.

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

 

 

모바일용 포토샵, Photoshop.com Mobile
+   [PlayPhone]   |  2010.03.17 14:25  


아이폰용 포토샵이 있는 건 잘 아시죠?

PC에서 쓰는 포토샵과 비교한다면,, 무ㅓ.. 좀 실망스럽긴 하지만요

사실 모바일에서 사용하는데도 한계가 있잖아요ㅎㅎ

모바일에서 사용하기에 충분한 기능들이니 저는 이 정도로도 충분히 만족합니다.


그럼 이제부터 모바일 포토샵을 파헤쳐 보겠습니다~


이 녀석이 모바일 포토샵이예요.

이 애플리케이션 역시 사진을 바로 찍을 수도 있고, 있는 사진을 사용할 수도 있군요.

이미지 편집과 관련된 애플리케이션들은 아마도 다 이런 가 봐요.


이번에도 앨범에 저장돼 있는 이미지를 선택해 보렵니다.


케이크예요.

저희 사무실에서 자축파티했거든요ㅋㅋ

축하할 일이 뭐였는지 궁금하시죠~?

비밀ㅋㅋㅋ


위의 이미지처럼 상단과 하단에 기능 버튼들이 있어요.

위의 버튼들이 이미지 편집용이고요, 밑의 버튼들은 취소, 뒤로가기, 앞으로 가기, 업로드 등의 버튼이예요.


상단 첫 번째 버튼은 <CROP> 기능을 합니다.


Crop

Straighten

Rotate

Flip

두 번째 버튼부터 본격적으로 이미지에 효과를 줄 수 있어요.

이 효과들은 화면의 왼쪽을 선택하느냐, 오른쪽을 선택하느냐에 따라 강도(?)가 달라진답니다 :)



Exposure

Saturation

Tint

Black & White

Contrast

세 번째 버튼을 볼까요?

전문 용어를 모르겠으니 설명 없이 이미지가 보기로 해요ㅎㅎ


Sketch

Soft Focus

Sharpen

으흐흐~

이번에는 마지막 버튼이예요ㅋㅋㅋ


요런 기능들이 있어요~


Pop

Vignette Blur

Warm Vintage

Rainbow

White Glow

Soft Black & White

여기까지가 모바일 포토샵의 기능들이었습니다.

이미지 하단의 버튼들은 그냥 보시면 아시겠죠?

왼쪽부터 차례로 <취소>, <앞으로 가기>, <뒤로가기> 버튼이고요, 마지막꺼는 <저장>하고 <업로드>까지 할 수 있어요.



업로드를 하려고 하니 저렇게 로그인을 하라고 하네요.

저는 계정이 없고, 또 만들기 귀찮으므로 패스!!!!!!!!!!


여기까지가 모바일 포토샵의 사용기 였습니다ㅎㅎ


이미선 기자(initssun@gmail.com) | IT 전문 잡지 <마이크로소프트웨어>와 신개념 스마트폰 전문 웹진 <플레이폰>의 기자이며, 개인 블로그(http://init.egloos.com)도 운영하고 있습니다. IT 업계에서 보기 드문(?) 여기자로, 어딜 가나 사랑받는 기자...........가 되고 싶습니다. 지금 이 시간에도 여러분에게 생생하고 발빠른 스마트폰 뉴스를 전해드리기 위해 발에 땀이 나도록 혹은 엉덩이에 땀띠가 나도록 고군분투하고 있답니다.

신고




     iPhone, Playphone, 개발자, 블로그, 아이폰, 포토샵, 플레이폰
     0   1
BlogIcon transfomator 2010.03.17 15:01 신고
기능은 아직 만족스럽지 못 하지만 모바일 포토샵이 존재하는군요
좋은정보 감사합니다 :)

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

 

 

아이폰 블록격파 게임 만들기
+   [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

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

 

 

아이폰 마술(iPhone Magic), 아 이 아저씨 너무 우껴~
+   [아이티 이야기]   |  2009.08.07 18:33  



아이폰은 그 자체로도 놀랍지만

아이폰이 만들어가는 새로운 문화들 또한 혀를 내두르게 합니다.

이 사람은 원래 마술사인것 같은데요.

아이폰을 이용해서 재미있는 마술을 하네요!

잘 보면 응용해서 써먹을 수 있을 것 같기도 하고요. ㅎㅎ
신고




     iPhone, Magic, 개발자, 마술, 마술사, 아이폰
     1   5
BlogIcon 준근 2009.08.07 20:40 신고
아,,,,, 정말 한번 써보고 싶어요.
(도대체 언제 출시되는거냣!!!)
호랭이 2009.08.08 01:03 신고 
ㅎㅎ 곧 나옵니다.
BlogIcon iPhoneArt 2009.08.08 00:05 신고
관련글 링크했습니다. 마술하는 App 에 관한 글이에요~:)
저분도 많이 넣어두셨네요. 하핫 :)
호랭이 2009.08.08 01:10 신고 
ㅎㅎ 재미있네요!
dada 2010.02.19 15:07 신고
안녕하세요^^ 아이폰 전용 가죽지갑케이스/실크하드케이스 소개해 보려구요^^
제가 사용하고 있는 케이스 인데요 정말 값싸고 실용적이고 이뿝니다
다른 케이스 씌운상태에서도 들어가고 떨어뜨려도 이탈된다거나 기스가 난다거나 한적 한번도 없었습니다.
다양한 제품이 있으니 한번 구경해보세요~ 적극강추합니다!~!~!~!

지금 초특가 세일이라고 해서 5천원도 안하네요~^^


아래 링크 걸어놨으니 한번 가서 보세요~

http://blog.naver.com/timberlanman

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

 

 

아이폰, 아이팟터치 사용자 공짜로 SMS 보내는 방법!!! 파란 FreeSMS
+   [아이티 이야기]   |  2009.07.29 18:08  


야후가 그렇듯...

파란또한 여러분의 관심 밖에 있지만 참으로 재미있고 다양한 시도들을 끊임없이 하고 있습니다.

http://flytgr.tistory.com/345

다만 사람들이 관심을 가져 주지 않는 탓에 그 재미있고 다양한 시도들이 꽃을 피워보기도 전에 시들어 버리고 마는 것이죠.

님하 관심 좀!!! 굽슨굽슨

사용자 삽입 이미지


그렇다면 이번 시도는 어떨까요?

아이폰이나 아이팟 터치를 사용하고 있는 사용자들이 100% 완전 공짜로 문자를 보낼 수 있는 소프트웨어와 서비스라면?

네 그렇습니다.

이번엔 파란이 아이폰과 아이팟 터치에서 무료로 문자 메시지를 마구마구 보낼 수 있는 Free SMS 라는 이름의 애플리케이션을 발표했습니다.

사용자 삽입 이미지

앱스토어를 통해서 받을 수도 있고요.

http://app.paran.com/sms/info.jsp 요기에서 [Paran Free SMS 설치하기]를 클릭해서 설치하셔도 됩니다.

단, 한 가지 조건이 있습니다.

파란 이메일 계정을 가지고 있어야 합니다.

애플리케이션 실행 시 파란 이메일로 접속해서 문자를 보내는 형태로 사용하는 듯하고요.

동시에 다섯 명에게 SMS를 보낼 수 있는 기능과,
최근 보낸 문자 편집 & 재전송 기능
아이폰이나 아이팟 터치 자체의 주소록 연동 기능
입력 내용 한 번에 지우기
최근 보낸 번호 선택 등의 편의 기능이 제공됩니다.

아 역시 아이폰으로 바꿔야 하는 건가...

아 추가 설명이 있습니다.

파란 홍보 담당자를 통해 확인해 보니 파란 FreeSMS를 이용해서 보낼 수 있는 무료 문자의 개수가 제한이 있네요.

FreeSMS는 기존에 파란에서 인터넷 사용자들에게 서비스하고 있는 무료 문자 서비스(PC 전용)를 아이폰과 아이팟 터치에서도 사용할 수 있도록 만든 것이고요.

그래서 앞서 설명 드린 것처럼 파란 메일 계정이 꼭 필요하고
메일 사용량에 따라 무료로 사용할 수 있는 SMS의 월간 개수가 30~300 개로 차등 지급됩니다.

전체 SMS의 사용량은 PC와 단말기 통합 개수입니다.

예를들어, 한 달간 100개를 보낼 수 있는 분이  PC에서 50개를 이미 사용했다면 아이폰이나 아이팟에서는 남은 50개만 사용할 수  있는 겁니다.



사용자 삽입 이미지

신고




     freesms, iPhone, ipod touch, 개발자, 무료 문자, 무료 문자 소프트웨어, 아이팟터치, 아이폰, 아이폰 애플리케이션, 앱스토어
     1   0

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

 

<<이전 | 1 | 다음>>

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

 

티스토리 툴바