티스토리 툴바


PC에서 보던 걸 폰에서 보고 싶어요


  여러분은 어떤 웹 브라우저를 쓰고 계신가요? 


  저는 금융업무 볼 때나 회사 업무 관련 홈페이지에 접근할 때 외에는 모조리 크롬(Chrome) 웹 브라우저를 사용하고 있습니다. 가볍기도 가볍고, 페이지 로딩 속도가 제일 빠른 것 같더라구요. 물론 다른 웹 브라우저들도 좋은 것들이 많습니다만, 어쨌든 인터넷 익스플로러보다는 훨~~~~~~~~씬 빠른 것이 확실합니다.

  아니면 저를 때리세요. (   ㅡ_ㅡ) =3


  아무튼, 요즘에는 웹 서핑을 하다가 뭔가 볼 거리가 하나라도 있으면, 카톡 그룹 대화방에 들어와있는 친구들에게 링크를 공유해주고 싶을 때가 많아요.  아니면, 한창 웹 페이지를 보고 있는데, 친구들이 불러서 급히 나가야 할때가 있죠.

  근데, 즐겨찾기에 저장하고 나중에 찾아볼려니 귀찮고, 또 막상 나중에 아쉬워서 마저 볼려면 또 검색해서 찾아봐야 하고... 불편하더군요.


  이럴 때 여러분들은 어떻게 하시나요?




웹 페이지의 '테이크 아웃' : 'Chrome to Phone'


  PC와  안드로이드 폰을 쓰시는 분들이라면, '크롬 투 폰(Chrome to Phone)'이라는 어플만 설치하시면 이 모든 것이 간편해집니다. 흐흐. 아, 아이폰 유저들도도 이와 유사한 '사이트 투 폰(Site to Phone)'이라는 어플리케이션을 크롬 웹 브라우저에 설치하시면 이와 유사한 기능을 사용하실 수 있습니다.


  그럼, 이제 크롬 투 폰을 설치해봅시다.


STEP 1. 크롬 웹 브라우저에 '크롬 투 폰' 웹 어플리케이션 설치


  크롬 웹 브라우저의 'Chrome Web Store'나 우측 상단의 [설정 및 관리 - 도구 - 웹 어플리케이션 바로가기]로 접근하여, 'chrome to phone'을 검색해서 설치합니다. 설치가 완료되면, 브라우저 우측 상단에 처음보는 핸드폰 그림이 하나 더 생깁니다. 그러면 웹 브라우저에서의 설치는 완료된 것입니다.






STEP 2. 안드로이드 폰에 '크롬 투 폰' 어플리케이션 설치


  그럼, 이제 스마트 폰에 Chrome to Phone을 설치(혹은 세팅)합니다. Chrome to Phone은 안드로이드 2.2 (프로즌 요거트) 버전 이상에서 기본 탑재되어 있습니다. 이 어플리케이션이 안드로이드 2.2 부터 지원하는 C2DM(Cloud to Direct Messaging)이라는 기능을 이용한 서비스이기 때문이죠.

  설치되어 있는 프로그램 목록을 확인해보시고, 혹시 없으면, 당황하지 마시고 그냥 구글 플레이(Google Play)들어가셔서 새로 다운받으시면 됩니다. ^__^


  어려운 것 하나 없습니다. 설치된 'Chrome to Phone' 어플 실행해서 'Menu버튼-Setting'으로 들어 갑니다.


 계정(Account) 확인하시고, 계정은 폰에 등록된 기본 계정이 자동으로 뜨기 때문에 그냥 바로 넘어가주시면 되고, 'Automatically launch links' 선택하시고 Next!


'Finish'를 눌러주면 설정완료!




STEP 3. PC에서 보던 웹 페이지 폰으로 보내기!


  이제 크롬 투 폰 기능을 사용할 준비가 다 되었습니다. 사용 한번 해볼까요?

  모델 로켓(Model Rocket)을 설계(디자인)할 수 있는 '스페이스 캐드(SpaceCAD)'라는 프로그램의 주문 페이지를 폰으로 보내봅니다. 이 페이지를 띄우고 상태에서 우측 상단의 '크롬 투 폰' 버튼을 한번 클릭!! 콕!


"휴대전화로 전송했습니다."





STEP4. 폰에서 해당 페이지 확인! 테이크 아웃 완료!!


  이제 폰을 그윽~하게 한번 바라봐 줍니다. '자동으로 링크를 띄우기(Automatically launch links)' 설정을 했기 때문에 방금 전송한 웹이 자동으로 스마트폰에 뜹니다~ 짠~




  이렇게 제 폰으로 전송했던 링크는 스마트 폰에서 크롬 투 폰 어플리케이션을 클릭했을 때, 나오는 첫 페이지의 History에서 다시 확인하실 수 있습니다.



  설치도 간단하고 꽤나 유용합니다.


  한번 써 보세요! ^_^

저작자 표시 비영리 변경 금지
Creative Commons License
Creative Commons License


본 포스팅은 구글 레퍼런스 폰 넥서스S(Nexus S)의 운영제체를

안드로이드 2.3에서 안드로이드 4.0으로 업데이트한 내용을 다루고 있습니다.




올 것이 왔구나!! 안드로이드 4.0!!



기다리고 기다리던 안드로이드 4.0 업데이트가 날라왔습니다.

레퍼런스 폰의 특징인 OTA(Over the Air)방식의 업데이트였습니다.

지난 주 금요일, 회사에서 업무를 보고 있었는데,

넥서스S에 평소에는 볼 기회가 거의 없는, 익숙하지 않은 알림(Notification)이 떠 있었습니다.


System update available!!


왔구나 왔어!!

고작 113.6 MB 짜리 업데이트에 사람이 이렇게 설레일 수 있다니!!




Model Number : Nexus S

Android Version : 2.3.4



이제 다시는 보지 못할 내 핸드폰의 OS버전을 다시 한번 확인해주시고~

혹시 모르니까, 이번 기회에 연락처와 중요한 사진들도 백업(back-up)을 한번 해준 뒤, 인스톨 시작!!


예전에도 넥서스S 시스템 업데이트(System Update)를 한번 한적이 있었는데,

그때도 저의 걱정과는 달리, 허무할 정도로 빨리, 그리고 깔끔하게 업데이트가 되었었습니다.

이번에도 그때와 마찬가지로 빨리, 그리고 깔끔하게 업데이트 되었습니다.

역시 '퓨어 구글(Pure Google)'!!



인스톨이 끝나고 처음으로 Nexus S가 4.0 운영체제로 부팅되기를 기다립니다.


SONY | NEX-5N | Normal program | Pattern | 1/60sec | F/4.0 | 0.00 EV | 18.0mm | ISO-2000 | Off Compulsory | 2012:05:05 03:36:09

SONY | NEX-5N | Normal program | Pattern | 1/80sec | F/4.0 | 0.00 EV | 21.0mm | ISO-800 | Off Compulsory | 2012:05:05 03:36:22

SONY | NEX-5N | Normal program | Pattern | 1/60sec | F/4.0 | 0.00 EV | 21.0mm | ISO-640 | Off Compulsory | 2012:05:05 03:36:24


부팅화면 자체가 안드로이드 2.3과는 달라졌습니다.

넥서스S의 부팅화면은 구글의 대표 4색이 4방향으로 뿜어져 나왔다가 다시 원점으로 들어가는 

불꽃놀이 같은 것이었는데요~

안드로이드 4.0의 부팅화면은 뭔가 더 화려하고 활동적인 느낌이네요.


SONY | NEX-5N | Normal program | Pattern | 1/80sec | F/4.5 | 0.00 EV | 44.0mm | ISO-2000 | Off Compulsory | 2012:05:05 03:38:11


신기한 것은 업데이트 후 제일 처음 실행되는 부팅시, 

제가 이전에 깔아놓은 121개 앱에 대해서 최적화 작업을 진행한다는 것이었습니다.

아마도, 기존의 앱을 그대로 사용해도 되는지, 문제는 없는지 체크하는 과정인 것 같습니다.

121개에 대한 확인이었지만, 이 역시 그리 시간이 많이 걸리지는 않았습니다.


업데이트 후 제일 처음 만나는 저 진한 하늘색 글씨체... 깔끔하고 귀여워졌다는 생각이 들었습니다.


SONY | NEX-5N | Normal program | Pattern | 1/60sec | F/4.0 | 0.00 EV | 22.0mm | ISO-1000 | Off Compulsory | 2012:05:05 03:41:13


'Finishing boot.' 이라는 메세지와 함께, 최초 부팅 준비를 끝내고...


SONY | NEX-5N | Normal program | Pattern | 1/60sec | F/4.0 | 0.00 EV | 31.0mm | ISO-800 | Off Compulsory | 2012:05:05 03:41:18


BAM!!!! 드디어 만나게 되었습니다. 안드로이드 4.0 : 아이스크림 샌드위치!!!





Introduing :  Ice Cream Sandwich (Android 4.0.4)






SONY | NEX-5N | Normal program | Pattern | 1/60sec | F/4.0 | 0.00 EV | 18.0mm | ISO-250 | Off Compulsory | 2012:05:05 04:08:26 

  한가지 재밌는 사실은...

  업데이트를 하기 전, 몇 가지 스크린샷을 남겨두기 위해서 이클립스의 안드로이드 개발화면(DDMS)을 켜고, 넥서스S와 PC를 5핀 USB잭으로 연결해 뒀었는데, 기존에 깔아뒀던 USB driver의 작동이 생각보다 훨씬 빨리 이루어지는지 부팅을 시작하자마자 디바이스가 이클립스에서 인식이 된다는 것이었습니다. 그렇지만 다른 명령을 수행할 수 있는 여력이 없는 상태라서 그런지, 스크린샷 명령어는 먹지 않습니다. 스크린 샷 버튼을 눌러도 아무런 화면이 캡춰되지 않았습니다.





안드로이드 2.3.4   vs. 안드로이드 4.0.4


제가 업데이트 전에 찍어줬던 안드로이드 2.3.4 화면입니다.

안드로이드 4.0 업데이트 이후로 어떻게 바뀌었는지 감상해보시죠~ 


안드로이드 OS가 바뀌면서, 메인 테마 컬러가 변했음을 알 수 있습니다.

안드로보이의 색깔인 진한 라임 그린색에서 테마컬러가 진한 하늘색으로 변했는데,

HONEYCOMB의 테마 컬러랑 동일한 것 같습니다.


그 외에도 아이콘 타이틀을 둘러싸고 있던 검정색 투명 풍선이 사라졌고,

아이콘 글자체도 좀더 작고 글자 간격이 좁게 바뀌었습니다.

스크린 샷으로 보면 글자가 작아져 잘 안보일 것 같은데, 실물을 보면 가독성은 오히려 좋아진 느낌입니다.  



업데이트를 진행하면서 임의로 삭제되거나 사라진 앱은 안보이네요.

업데이트 이전 세팅과 동일합니다.



안드로이드 주 검색창이 좀더 얇고 깔끔해졌고, 모든 메인 화면 상단에 자리하고 있습니다.

기존의 검색 위젯은 두껍고 안 예뻐서 삭제해버린 다음, 넥서스S에 달려있는 검색 버튼을 주로 사용하고 있었는데, 이번 것은 아예 배경화면과 동일한 레벨/레이어에 있는 것처럼 보여서 맘에 듭니다.

약간의 변화일 뿐인데도, 배경화면 위에 모든 아이콘들이 떠있는 느낌을 주네요.



제일 하단은 전화걸기, 주소록, 어플리케이션 리스트, 메세지, 인터넷 아이콘들이 자리하고 있고,

바탕화면에 세팅해 놓은 각 아이콘 줄의 높이는 조금씩 낮아진 것 같네요.







설치된 모든 앱을 볼 수 있는 메인 앱 화면입니다.

원래 화면은 스타워즈 영화의 제일 첫 장면, 'A Galaxy far, far away....'처럼, 위 아래로 화면을 스크롤링하며 리스트를 확인하는 형식이었는데, 이제는 한 화면에 딱 앱 20개씩을 보여줍니다.

이전 방식이 보는 재미는 있었지만 앱을 찾기가 어려웠는데, 이 부분은 확실히 개선된 것 같습니다.

다음 페이지를 볼 때의 애니메이션 효과도 포함해서 말이죠.



마지막으로 종료화면입니다. 기존 폰 종료화면보다 확실히 멋져졌군요.

종료 기능 이외에도 핸드폰의 벨소리 모드를 바꿀 수 있는 기능도 추가 되었습니다.





So Far, So Good


  안드로이드 4.0을 넥서스S에 업데이트하고 든 느낌은...

  애니메이션 효과가 상당히 많이 추가가 되어서, 만지는 재미가 늘었다는 것과 그 효과들이 상당히 부드러운 편이라는 것입니다. UI면에서 많은 노력을 한것으로 보이네요.


  특히, 알림(Notification)창에서 각각의 알림을 슬라이드 방식으로 하나씩 하나씩 삭제할 수 있는 제스쳐가 추가 되었고, 홈 버튼을 길게 누르면 뜨는 '최근 사용한 앱(Recent Applications)'화면에서도 동일한 슬라이딩 제스쳐로 아직 일시 정지되어 있는 앱들을 종료시킬 수 있었는데, 이것이 굉장히 인상적이었습니다.


  이번에는 업데이트 이후에 받은 느낌과 가시적인 차이점들에 대해서 다뤄 보았습니다.

  좀더 기능적으로 사용을 해봐야, 이전 OS와의 성능을 비교할 수 있을 것 같습니다만, 아직까지는 만족스럽습니다. 애플이 아이폰 3GS 단말기에 새로운 iOS를 적용해줬을 때, 아이폰 유저들이 그랬던 것 처럼, 갑자기 새폰을 사용하게 된 느낌이 드네요.

  즐거운 한 주가 될 것 같습니다. ^____^







저작자 표시 비영리 변경 금지
Creative Commons License
Creative Commons License


이번에는 XBOX360용 'Kinect Sensor'를 PC에 사용하기 위해 필요한 어댑터에 대해서 알아보겠습니다.



'키넥트 센서'를 PC에서 사용하고 싶어요!


  작년 가을, 키넥트 센서(Kinect Sensor)에 대해서 소개한 적이 있습니다.

  콘솔 게임기 XBOX360 용으로 발배된 키넥트 센서는 당시 다른 시판된 게임용 센서보다도 우수한 성능을 보여주었고, 컴퓨터 OS의 명실상부한 최강자, 마이크로소프트의 작품답게, PC에 활용하기 위한 어플리케이션인 'Kinect for Windows SDK beta' 또한 출시가 된 상태였습니다.


[Kinect] 최고의 모션인식 센서, Kinect Sensor (How I Met the XBOX360 & Kinect Sensor)


  올해 2월 1일에는 Windows용 'Kinect Sensor'인, 'Kinect for Windows'와 정식 개발툴인 'Kinect for Windows SDK v.1.1 '이 출시되어, Kinect 센서를 PC에서 이용하기가 한결 편해졌습니다.


Kinect for Windows 홈페이지




  그러나, 아무래도 개발을 위해서 별도로 'Kinect for Windows'를 구입한 사람보다는, 기존에 XBOX360용으로 '키넥트 센서'를 사서 이용하다가, Windows에 이용해보려고 하는 사람이 훨씬 많을 것으로 예상합니다. 


  실제로, 제 블로그를 찾아오는 주요 유입 검색어 중, 기존 센서를 PC에서 이용하기 위한 방법이나 USB연결을 하기 위한 젠더를 찾는 경우가 많습니다.



  그래서 이번에는 간단하게 기존의 XBOX360용 'Kinect Sensor'를 PC에 사용하기 위해서 필요한 USB 젠더(혹은 어댑터)에 대해서 알아보겠습니다.





그래서 뭐가 필요한데?


  아래가 PC에 'Kinect Sensor'를 사용하기 위해 필요한, USB포트가 있는 AC 어댑터(AC Adapter)입니다.

google | Nexus S | Aperture priority | Center-weighted average | 1/14sec | F/2.6 | 0/0EV | 3.4mm | ISO-100 | Flash did not fire | 2011:09:15 20:02:43


google | Nexus S | Aperture priority | Center-weighted average | 1/12sec | F/2.6 | 0/0EV | 3.4mm | ISO-200 | Flash did not fire | 2011:09:15 20:04:02


  XBOX360용 키넥트 센서를 XBOX360 본체와 연결하는 주황색 부분을 보면, USB처럼 생겼지만 일반적인 USB 타입이 아닌 것을 알 수 있습니다. 그래서 이 부분을 연결해서 일반적인 USB 포트에 맞는 형태로 전환해주는 젠더가 필요합니다. 위 사진에서 오른쪽 두개의 주황색 부분을 연결하고, 제일 왼쪽의 USB 포트를 PC에 연결해 주는 거죠.


  단, 여러분들이 사용하시는 대부분의 USB 제품들은 USB포트가 제공해주는 전력만으로도 구동이 가능한 경우가 많았지만, 키넥트 센서는 일반적인 USB 포트가 제공해줄 수 있는 전력보다 더 많은 전력을 안정적으로 공급받아야 합니다. 따라서, AC 어댑터가 필요합니다.


  최종적으로 연결해야 하는 부분과 순서는 다음과 같습니다.


SONY | NEX-5N | Normal program | Pattern | 1/60sec | F/4.0 | 0.00 EV | 32.0mm | ISO-1600 | Off Compulsory | 2012:05:02 06:09:20

참~ 쉽죠잉?

서로 서로 맞는 모양을 찾아서 꽂아주면 끝~





그래서 어댑터는 어디서 구하는데?


'PC 연결용 키넥트 센서 AC 어댑터'는 '마이크로소프트 스토어(Microsoft Store)''아마존(Amazon)'에서 정품을 구입할 수 있습니다. 언제나, 늘~ 그랬듯이 아마존이 더 싸네요. 마이크로소프트 키넥트 홈페이지에서 제품을 구입할 수 있는 곳이라며 링크를 걸어놓은 두 곳인데, 왜 가격이 다른건지. 흐흐흐 


AC 포트가?? 다르다...!!?

그리고 오른쪽 상단의 United States에 주목합시다

'대한민국'으로 바꾸면, XBOX Accessories 카테고리는 싹~ 사라집니다




'Kinect Accessories'로 검색하는 것이 좋습니다.

다양한 제조사에서 만들고 있고, 가격도 천차만별이니 꼭 확인해보고 삽시다!



  미국 발매 제품을 바로 살 경우에는 AC 어댑터의 날이 다른데, 미국 발매 키넥트 센서의 정격전압이 다음과 같으므로, 흔히 말하는 '돼지코(젠더)'만 사서 이용하셔도 이용하시는데, 문제는 없을 것 같습니다.


[ Kinect Standalone Version(US) Power Supply ]

- Input 100-240V ~0.3A, 47-63Hz

- Output 12V 1.08A




  물론, 우리나라의 G마켓이나, 옥션, 11번가에서도 판매를 하고 있습니다만, 물건이 자꾸 생겼다가 없어졌다가를 반복하네요~ 그리고 가격도 셀러마다 천차만별인 경우가 있는 것 같습니다. 잘 살펴보고 사시길 빕니다.


  한가지 팁을 드리자면, 키넥트 USB 젠더, 키넥트 PC보다는, '키넥트 악세사리(Kinect Accessories)'나 '키넥트 AC 어댑터', '키넥트 Power Supply' 등으로 검색하시는 것이 좋습니다. 대부분의 관련 제품들이 USB 연결보다는, 별도로 사용하기 위한 전력 공급 기능에 초점을 맞춰서 제품명이나 판매명을 택하고 있네요.


참고로 2012년 5월 6일 현재, 우리나라 쇼핑몰에서 직접 판매하는 셀러는 없고, 해외배송 관련 상품만 검색이 되네요. 가끔씩 제품이 들어오기도 하니, 자주 살펴보시면 좋은 결과 있으실 겁니다 ^__^;;


[옥션] XBOX360 키넥트 어댑터 정품 / 키넥트 전원 어댑터 (45,000~60,000원)

         >> 저는 예전에 17,000원 정도에 샀던걸로 기억하는데요 =_=

              마이크로소프트 정품 가격을 보면 저 정도 하는게 뭐 더 비슷하긴 합니다만은..




그럼 행운을 빌어요~ ^___^)/





저작자 표시 비영리 변경 금지
Creative Commons License
Creative Commons License

이전 XNA 관련 글 보기


더보기




Sprite-based Animation


  단일 이미지의 단순 화면 출력을 해봤으니, 이번에는 여러 장의 이미지를 연속으로 보여줌으로써 연속된 동작처럼 보이게 하는 스프라이트 애니메이션(Sprite-based Animation)을 시도해보겠습니다.


  스프라이트(sprite)는 연속된 이미지의 변화로 캐릭터 등에 애니메이션 효과를 나타낼 때 사용합니다. 

  2D 아케이드 게임 속에 등장하는 캐릭터 동작의 대부분은 스프라이트 애니메이션입니다.


  XNA에는 감히! 스프라이트 처리를 위해 준비된 별도의 클래스가 없기 때문에 스프라이트 처리르 위한 클래스를 직접 만들어야 된다고 합니다.(What!!? -_- )


  당연히, 한번만 쓰고 끝낼 기능이 아니기 때문에 별도의 클래스를 제작해둬야겠네요.

  아무튼 시키는대로 해봅니다.



  이번 프로젝트는 크게 아래와 같이 3개의 클래스와 불러들일 이미지들로 구성됩니다.

  





Program.cs  

프로그램 구동시 제일 먼저 불려와서 게임을 Run을 시킵니다.


Game1.cs

게임 화면의 크기, 배경색을 비롯한 게임 전반적인 환경 설정 및 초기 이니셜라이즈(Initialize() 함수)를 시킵니다. 실제적인 게임 진행에 필요한 것들을 정의하고, 이번 포스팅에서 사용하고자 하는 이미지를 로드(LoadContent())하고, 그리기 명령(Draw())을 포함하고 있습니다.


Sprite.cs

앞서 말했듯이, XNA 자체에서는 스프라이트 효과를 주는 함수가 지원되지 않기 때문에, sprite()함수를 별도로 만들고, Game1.cs에서 Upload된 컨텐츠(이미지)를 연속해서 불러서 그리는 Draw() 함수를 정의 해 둡니다.





Sprite.cs 코딩


  Sprite.cs 함수에 들어가 있는 핵심 내용은, 이미지 정보(이미지 텍스처의 개수, 테스처의 가로, 세로 크기)를 불러와서, i 번째 이미지를 출력하는 것입니다.


[ Sprite.cs 코드 보기 ]


더보기




  i.ToString("D4")는 숫자 i를 00XX 형식의 문자열로 바꿔주는 역할을 합니다.

  이런 변환이 필요한 이유는 Game1.cs에서 이미지를 불러올 때, 파일명이 비행0001, 비행0002, ...., 비행0015 이렇게 되어 있기 때문입니다. 읽어들이는 이미지 파일의 파일명 형식에 맞춰준 거죠.

  그리고 'Vector2 pt'는 이미지 출력 위치 좌표를 말합니다.

[ i.ToString("D4") 예시 ]

더보기







Game1.cs 코딩

  Game1 클래스에서는 Sprite를 하나 선언하고,

### csharp
Sprite sp = new Sprite();


  Sprite 클래스의 Load() 함수를 이용해서 16장의 비행00XX 이미지들을 로드합니다.

###csharp
sp.Load(Content, "비행", 15); // 16장의 이미지를 로드한다. (비행0000~비행0015)


  그리고 Sprite 클래스의 Draw() 함수를 이용해서 이미지들을 불러와서 출력하는 시간간격과 이미지의 출력 위치, 색깔 등을 정의합니다.

###csharp
sp.Draw(spriteBatch, (int)(gameTime.TotalGameTime.TotalMilliseconds / 50) % sp.Count(), new Vector2(330, 200), Color.White);

  위 코딩에서 TotalMilliseconds / (숫자) 이 부분의 숫자를 바꾸면 이미지를 그리는 시간 간격을 조절할 수 있으므로, 애니메이션 속도를 조절할 수 있습니다. Vector2( , )는 이미지를 출력할 위지(position)을 나타냅니다. 그리고 Color.(White)에서 색깔 부분을 바꾸면 이미지에 지정한 색을 입히게 됩니다.

왼쪽 부터, Color.White / Color.Aqua / Color.Pink




[ Game1.cs 코드 보기 ]

더보기





F5 : Start Debugging

  '안돌아가는 훌륭한 프로그램보다, 돌아가는 조악한 프로그램이 낫다.'라는 말이 있죠.
  아무렇게 코딩해도 좋다는 말은 아니지만, 그래도 역시 디버깅을 했을 때, 에러가 나는 것 보다 돌아가는 걸 보는 게 훨씬 기분 좋습니다. ^__^


  우선, 16장의 이미지를 그대로 다 사용한 경우입니다.
  비행기가 좌우로 반복해서 롤링(Rolling)을 하는데, 이상하게 다시 중심으로 올때, 끊기는 것 같습니다.
  소스로 사용하신 이미지들을 한장씩 보시면, 이미지 첫장과 이미지 마지막장이 거의 동일한 비행기 이미지를 나타내는데, 이때문에 애니메이션이 약간 부자연스러워 보입니다.



이미지 16장을 모두 사용한 경우의 결과



  아래는 제일 마지막 이미지(비행0015)를 삭제하고, 코딩도 15장만 불러들이도록 수정한 결과 화면입니다.

  완전히 만족할 수는 없지만, 그래도 조금 더 낫네요~ ^____^ 

  자연스럽게 연결되는 애니메이션 소스가 중요하다는 것과, 반복문을 돌릴 때, 첫 이미지와 마지막 이미지가 동일하면, 동일한 화면을 두번 그리게 되니까 조심해야 된다는 교훈을 얻었네요~




마지막 이미지를 제외한 15장의 이미지를 사용한 경우의 결과



  시간이 많이 없어 실습이 더디지만, 재밌네요 ^__^

  

  다음은 스프라이트 애니메이션을 구현하는 코드를 다른 이미지 소스에도 계속 사용할 수 있도록,

  스프라이트 매니저 클래스를 만들어 보겠습니다!! 




SPACECHILD_XNA_Proto1.zip




Reference // 톡톡튀는 XNA를 이용한 단계별 슈팅게임 만들기

톡톡튀는 XNA를 이용한 단계별 슈팅게임 만들기
국내도서>컴퓨터/인터넷
저자 : 최창수,서정만
출판 : 도서출판정일 2011.08.25
상세보기


저작자 표시 비영리 변경 금지
Creative Commons License
Creative Commons License




이전 XNA 관련 글 보기

더보기



 XNA의 기본 동작방식을 알아봤으니, 이제는 게임제작의 제일 기본이 되는 화면 출력을 해볼 차례입니다. 
 
미리 정해놓은 그림을 화면에 로딩해서 띄워보는 거죠. 가장 기본인 만큼 어렵지는 않습니다.
 

STEP 1. 새로운 XNA 프로젝트 생성하기

STEP 2. 화면에 출력할 그림 Content 프로젝트에 추가하기

STEP 3. 화면 해상도 변경해 보기 (800 x 600)

STEP 4. 변수 선언하고 이미지로드 하기

STEP 5. Starting Debugging(F5)

 


 

STEP 1. 새로운 XNA 프로젝트 생성하기

* 혹시, XNA 프로젝트를 생성하실 줄 모른다거나,
기본 화면에 대해서 이해가 필요하신 분은 이전 포스팅을 참고하세요!

 

 

STEP 2. 화면에 출력할 그림 Content 프로젝트에 추가하기

그림과 같은 resource를 추가하는 방법은 간단합니다.
Visual Studio의 프로젝트 탐색창에서 오른쪽 클릭으로 간단히 추가할 수 있죠.
우선, '로딩.png' 파일을 저장했습니다.


[ Content 프로젝트 Name에 오른쪽 클릭 >> Add >> Existing Item ]


 

XNA 지원 Texture

XNA의 Texture는 
기본적으로 < *.png, *tga, *.jpg >를 지원합니다.

다른 것들은 익숙한데, tga는 생소하네요.
검색을 해보니, *tga 포맷은 트루비전 사의 타가보드를 위하여 개발된 그래픽 파일 포맷으로 비디오 게임분야에서 텍스처 및 스크린샷 저장 기능 등을 이용할 때 흔히 사용하는 파일포맷이라고 합니다.

 

* tga 파일 포맷 : TGA(‘TARGA’의 줄임말 / Truevision Advanced Raster Graphics Adapter)

http://ko.wikipedia.org/wiki/TGA

 

 


STEP 3. 화면 해상도 변경해 보기 (800 x 600)

XNA 4.0에서의 기본 해상도는 800 X 480 이라고 합니다.
해상도를 800 x 600 으로 변경해봅니다.
여기서 해당 화면을 전체화면으로 보려면 IsFullScreen 속성을 true로 설정합니다.


 

STEP 4. 변수 선언하고 이미지로드 하기

그림파일은 LoadContent() 함수로 읽어 들이고, Texture2D라는 클래스를 이용하여 이미지를 저장합니다.

Texture2D는 XNA에서 불러들인 2차원 이미지를 저장하는 클래스입니다.

그리고 이미지 출력은 SpriteBatch 클래스의 Draw() 함수로!!
 
  

 

  

STEP 5. Starting Debugging(F5)

 이제 신나는 디버깅만 남았습니다.


결과화면


  로딩이라는 영문글자가 정확하게 정중앙에 오지 않아서 조금 거슬리기는 하지만, 제법 뭔가 로딩하고 있는 느낌의 글자(사실은 이미지)가 출력되었습니다.
  중요한건, 이 예제 그림의 해상도가 딱 800 x 600이기 때문에, 실행창의 크기를 임의로 변경하게 된다면, 글자 주변의 검은색이 창을 가득 채우지 못하는 상황이 발생합니다.
  단, 전체화면으로 실행했을 때는 예외입니다.



  그러면, 좀더 크기가 작은 그림 파일(XNA logo.jpg)을 출력해보겠습니다.
  기존 코딩에 그림파일만 바꿔서 출력 했다면, 그림은 실행창의 최상단 왼쪽에 붙어서 출력될 것입니다.
 
 그림파일의 최상단 왼쪽의 기준점을 (0, 0)으로 설정해둬서 그런 것인데요~ 아래 스크린 샷 처럼 화면의 정중앙에 오도록 만들어봅시다! (약간의 시행착오가 필요하겠죠? ^_^ )


  



### csharp
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
 
            spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
            spriteBatch.Draw(tex, new Vector2(0, 0), Color.White);
             // 이미지의 좌측 상단 좌표 기준, 이미지의 위치
             // 이 부분을 수정해서 위와 같이 만들어보자!
            spriteBatch.End();
 
            base.Draw(gameTime);
        }




소스코드 
 
### csharp
### Game1.cs
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;


namespace Proto0
{
    /// <summary>
    /// This is the main type for your game
    /// </summary>
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        Texture2D tex;
        // 변수 선언


        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
            graphics.PreferredBackBufferHeight = 600;
            graphics.PreferredBackBufferWidth = 800;
            //this.graphics.IsFullScreen = true;
            // 전체화면 활성화
        }


        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            // TODO: Add your initialization logic here


            base.Initialize();
        }


        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);


            tex = Content.Load<Texture2D>("로딩");
            // TODO: use this.Content to load your game content here
        }


        /// <summary>
        /// UnloadContent will be called once per game and is the place to unload
        /// all content.
        /// </summary>
        protected override void UnloadContent()
        {
            // TODO: Unload any non ContentManager content here
        }


        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();


            // TODO: Add your update logic here


            base.Update(gameTime);
        }


        /// <summary>
        /// This is called when the game should draw itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);


            spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
            spriteBatch.Draw(tex, new Vector2(0, 0), Color.White);
            // 이미지의 좌측 상단 좌표 기준, 이미지의 위치
            spriteBatch.End();
            // TODO: Add your drawing code here


            base.Draw(gameTime);
        }
    }


 



/* Reference */
톡톡튀는 XNA를 이용한 단계별 슈팅게임 만들기
 

톡톡튀는 XNA를 이용한 단계별 슈팅게임 만들기
국내도서>컴퓨터/인터넷
저자 : 최창수,서정만
출판 : 도서출판정일 2011.08.25
상세보기




Creative Commons License
Creative Commons License


"나는 네가 어디에 있는지를 알고 있다"



안드로이드에서 말하는 '위치 제공자'란?



  스마트폰 어플 중 많은 어플들이 위치 기반 서비스(LBS, Location Based Service)를 포함하고 있습니다.

  어떤 단말기를 쓰던지, 어떤 운영체제를 쓰던지간에 위치 기반 서비스를 이용하기 위해서는 위치 정보가 필요하고, 또 이러한 위치 정보는 위치에 대한 정보를 제공하는 ‘누군가’가 필요합니다. 이때, 이 '누군가'가 바로 위치 제공자(Location Provider)입니다.

  위치 제공자는 'GPS 모듈'처럼 같이 단말기에 부착된 하드웨어 일 수도 있고, 무선 네트워크나 전화 기지국과 같이 불특정 다수가 이용할 수 있는 기간시설이나 구조물일 수도 있습니다. 위치를 제공해줄 수 있는 기술이 더 는다면 이 위치 제공자도 늘어나게 되겠죠~
 

  어찌 되었든, ‘안드로이드 OS를 탑재한 단말기’에는 기본적으로 하나 이상의 위치 제공자가 존재합니다.

  따라서, 우리가 안드로이드 단말기에서 '구글 맵(Google Map)'과 같은 위치 기반 서비스를 이용할 때, 우리 눈에 보이지는 않지만 단말기 내부에서는, 그 상황에서의 위치를 제공해주는 위치 제공자가 어떤 것들이 있는지를 확인하고, 미리 설정해둔 기준들을 토대로 최적의 위치 제공자를 선택해서 위치 정보를 공급받는 과정을 거칩니다.

  < 안드로이드 프로그래밍 정복>에서 언급한 바와 같이, 최적의 위치 제공자를 판별하는데 이용되는 기준에는 여러가지가 있는데, 안드로이드 OS에서 그 각각의 기준들에 대해 얼마나 가중치를 주고 있는지는 아직 잘 모르겠습니다.

  위치 제공자 목록은 위치 관리자(Location Manager)에 의해서 관리됩니다.






내 폰의 '위치 제공자' 확인하기
  

  그럼 이제.......

-  내 폰에 위치를 제공해줄 수 있는 위치 제공자는 어떤 것들이 있는지,
-  그 중에 최적의 제공자는 무엇인지,
-  지금 쓸 수는 있는건지 

한번 확인해 봅시다. ^_^

  아래는 안드로이드 단말기(Nexus S, Android 2.3.4)의 위치 제공자와 최적 위치 제공자, 그리고 각 위치 제공자의 사용 가능성에 대해서 조사하고 출력하도록한 소스코드와 결과입니다. 소스코드는 < 안드로이드 프로그래밍 정복 : 위치 제공자 >의 내용을 참고하였고 원문 코드와 비교해보면 알겠지만, 이용가능 여부 판별에서 'passive'에 대한 코드를 추가했습니다.

  실내와 실외, GPS on/off 여부에 따라 4가지 Case로 나누어 테스트하였습니다.
  

소스코드

package exam.andexam;


import java.util.List;


import android.app.Activity;

import android.content.Context;

import android.location.Criteria;

import android.location.LocationManager;

import android.os.Bundle;

import android.widget.TextView;


public class C24_GetProvider extends Activity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.c24_getprovider);


// 위치 관리자 구함

LocationManager LocMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);


// 제공자 목록 구해서 출력

List<String> arProvider = LocMan.getProviders(false);

String result = "";

for (int i = 0; i < arProvider.size(); i++) {

result += ("Provider " + i + " : " + arProvider.get(i) + "\n");

}


// 최적의 제공자 조사

Criteria crit = new Criteria();

crit.setAccuracy(Criteria.NO_REQUIREMENT);

crit.setPowerRequirement(Criteria.NO_REQUIREMENT);

crit.setAltitudeRequired(false);

crit.setCostAllowed(false);

String best = LocMan.getBestProvider(crit, true);

result += ("\nbest provider : " + best + "\n\n");


// GPS와 네트워크 제공자 사용 가능성 조사

result += LocationManager.GPS_PROVIDER + " : "

+ LocMan.isProviderEnabled(LocationManager.GPS_PROVIDER) + "\n";

result += LocationManager.NETWORK_PROVIDER + " : "

+ LocMan.isProviderEnabled(LocationManager.NETWORK_PROVIDER)

+ "\n";

result += LocationManager.PASSIVE_PROVIDER + " : "

+ LocMan.isProviderEnabled(LocationManager.PASSIVE_PROVIDER)

+ "\n";


// 결과 출력

TextView EditResult = (TextView) findViewById(R.id.result);

EditResult.setText(result);

}

}



Android 위치 제공자 목록
  - network : 통신망, 3G
  - passive : passive provider. 
                  다른 앱에서 사용한 위치 정보를 수동적으로 가져올 수 있다는 의미
                  (http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html)
  - GPS : GPS





Case1 : 실내, GPS On 



Best Provider : NETWORK




Case2 : 실내, GPS Off
 

 
Best Provider : NETWORK

  
 

Case3 : 실외, GPS On



Best Provider : NETWORK




Case4 : 실외, GPS Off


Best Provider : NETWORK
 

  테스트를 진행하면 알게된 한가지 중요한 사실은,  [ 위치 제공자 사용 가능 여부 ] 판별에서 GPS는 GPS 신호 송수신 여부와 관계없이 장치의 On/Off 여부에 따라 true/false가 변경된다는 것입니다. 즉, GPS 위치 제공자를 사용할 수 있다는 신호가 들어와도 그것이 GPS 신호의 성공적인 수신을 보장해주지 못한다는 이야기이므로, 코딩할 때 유의해야 할 것 같습니다.




테스트 결과와 의문점 


상황별 Best Location Provider Test 결과





  테스트 결과는 다소 기이하게 나왔습니다.
  모든 상황에서 'NETWORK'가 최적의 위치 제공자로 판별된 것입니다.


  아무리 많은 통신기지국이 주변에 있고 그것들을 이용해 위치 계측 정밀도를 높인다하더라도 GPS 신호만큼 정밀할까요? 아마도 아닐 것입니다.


  그렇다면!? 아마도 최적 위치 제공자를 판별하는 기준으로 선언해 놓은 4가지 항목들이 적절치 않았을 수도 있겠죠. 소스 코딩 중에 최적 위치 제공자를 판별하는 기준 선언 부분을 연구해서 적절히 고쳐줄 수 있다면, 결과값은 우리가 일반적으로 예상하는 대로 달라질 수 있을 것 같습니다.

  다음에는 기준을 추가하거나 기준 설정을 수정해보고 결과를 비교해보도록 하겠습니다.



본 포스팅이 도움이 되셨다면, 추천/댓글을 달아주세요!! (^ㅁ^)/


저작자 표시 비영리 동일 조건 변경 허락
Creative Commons License
Creative Commons License


XNA 4.0 기본 함수 6가지


  XNA 프레임워크의 기본 구조를 한번 알아봅시다.

  XNA로  게임을 만들 때, 코딩을 완료하고 디버깅(F5)을 시작하면 XNA 내부에서 어떻게 처리를 할까요? 

  프로젝트를 생성할 때 기본적으로 생성되는 소스코드를 보면, 기본적인 동작원리를 알 수 있다고 합니다.
  자동 생성되는 소스를 분석하면 기본 함수가 6가지가 있고, 이 함수들은 아래와 같이 동작합니다.

 



XNA 기본 동작 원리
(인용:톡톡튀는 XNA를 이용한 단계별 슈팅게임 만들기 p.28)


Game1()

GraphicDeviceManager 생성

- 초당 프레임 60 으로 지정

  

Initialize()

- 프로젝트 초기화 작업 수행

- 서비스 요청 및 그래픽을 제외한 나머지 Asset 로딩

 

LoadContent()

- Content Pipeline에 추가시킨 에셋 불러오는 작업

 

Update()

- 사용자 입력, 캐릭터 이동, 애니메이션 등 게임 기능의 대부분을 처리하는 함수

 

Draw()

- 주기적으로 반복 처리해야 하는 그래픽 관련 코드 입력

 

UnloadContent()

- Initialize(), LoadContent() 에서 로드했던 각종 에셋 해제



  위 그림에서 알 수 있듯이, 게임 실행 및 게임에서 사용할 각종 Resource에 대한 초기화와 로딩이 끝나고 나면, [ Update() - Draw() ]를 반복하면서 게임에서 일어나는 각종 이벤트를 처리합니다. Update() 에서는 입력, 게임 상태 처리 등을 하고 Draw() 함수에서 그리기 동작을 수행한다고 합니다.

  설명을 읽다보면 '에셋(asset)'이라는 말이 나오는데, 이 에셋은 편하게 생각해서 'Resource'라고 생각하시면 됩니다. 기본 함수에 포함되지는 않지만, 프로젝트에 필요한 모든 이미지, 사운드, 폰트, 3D 모델 등을 말합니다. 에셋은 'Content'라는 이름의 프로젝트 하위에 위치하게 되는데, 이렇게 말하면 와닿지 않으니 프로젝트 기본화면 및 폴더 구성을 한번 보면서 이야기 해봅시다.





프로젝트 기본 화면 및 폴더 구성



Visual Studio 2010 XNA 개발 기본화면



   XNA
프로젝트의 개발 기본화면은 위 그림과 같습니다.

  기본화면의 오른쪽을 보면 'Solution Explorer'라는 프로젝트 탐색 창이 나오는데, 하나의 솔루션(Solution)안에 두개의 프로젝트(Project)가 생성되어 있습니다. XNA에는 새 프로젝트를 생성하면 기본적으로 하나의 솔루션과 그 솔루션을 구성하는 두개의 프로젝트를 자동 생성합니다. 하나는 프로젝트 생성할 때, 설정했던 이름으로 된 프로젝트 폴더이고, 하나는 '프로젝트이름+Content'라는 이름이 붙은 프로젝트 폴더 입니다.
 

  아래 그림에서 'Proto0' 하위에는 프로그램 Main 클래스와 주요 클래스들이 위치하며, 'Proto0Content'하위에는 게임상에서 불러서 쓰게 될 이미지와 각종 리소스들이 위치하게 되는데, 이들이 바로 에셋(asset)입니다. 제가 예시로 올린 그림에는 'XNA Logo.jpg'라는 파일이 에셋으로서 등록이 되어 있군요.(안드로이드 개발과는 달리, 리소스 파일명 작성시 space bar를 이용한 띄어쓰기를 허용합니다.)







  그럼, 프로젝트 탐색창이 이런 모습일 때, 실제 하드디스크 안의 폴더들은 어떻게 되어 있는지 한번 확인해 봅시다.
  저는 XNA 개발 기본 폴더를 D드라이브(D:\)에 'XNA Project'폴더로 지정했습니다. 그래서 XNA Project를 생성하면 이 폴더 안에 자동으로 Project 폴더들이 생성되게 됩니다. 아래 그림의 왼쪽의 트리 구조를 참고하세요!




 
XNA Project 안에 생성된 폴더와 그 구조
Solution 파일과 폴더, 그리고 그 폴더 내부의 프로젝트 폴더들 





  기본 함수와 동작 원리, 그리고 기본적인 XNA 개발 창에 대해서 이해를 했으니, 이제 본격적으로 개발을 해 볼 차례입니다. 다음 번에는 화면에 이미지를 출력해보겠습니다.



/ Reference /
톡톡튀는 XNA를 이용한 단계별 슈팅게임 만들기





이 게시물이 도움이 되었다면~ 아래 추천 꾸욱~~!! ^_^*

"추천한다고 아무도 뭐라 안합니다이~
경찰 출동 안해요잉~~"

 

Creative Commons License
Creative Commons License



Hello, XBOX360 & Kinetic Sensor 


google | Nexus S | Aperture priority | Center-weighted average | 1/16sec | F/2.6 | 0/0EV | 3.4mm | ISO-100 | Flash did not fire | 2011:07:02 02:44:29google | Nexus S | Aperture priority | Center-weighted average | 1/16sec | F/2.6 | 0/0EV | 3.4mm | ISO-100 | Flash did not fire | 2011:09:15 13:59:51

Microsoft의 Console, XBOX360 with Kinect Sensor


  전 게임을 좋아하지만, 태어나서 단 한번도 콘솔 게임기를 사본 적이 없었습니다.
  

그런 제가 올해 여름, 홀린 듯이 ‘XBOX360’라는 콘솔 게임기를 사게 되었는데, 그건 바로 XBOX360에 달려 있는 'Kinect Sensor' 때문이었습니다.

  작년 11월, 저는 친구들과 함께 G-STAR 2010에 갔었습니다.
  생각보다도 훨씬 많은 인파에 깜짝 놀라며 오랜 시간 줄을 서서 기다린 끝에, 'Kinect Sensor'를 경험해 볼 수 있었는데, 그 때, 체험부스에서 했던 게임은 [ XBOX360 : Sonic Free Riders ] 였습니다. 게이머의 상체와 하체의 발바뀜, 점프 동작, 손 동작을 인식하여 진행하는 게임이었죠.





  해보는 순간, '아! 이건 물건이다!' 라는 생각이 들었습니다.

  이런 류의 센서들은 보통 기대하는 것보다 성능이 떨어지기 마련인데, 확실히 '즐길' 수 있게 완성도가 높았습니다.
인식률, 각도, 거리, 반응 속도 등등.. 가족적인 광고로 먼저 이름을 알렸던 닌텐도 Wii 보다 월등히 나았습니다.
 
 
뭔가 새로운 세상이 오는 것 같다는 느낌이 피부로 와 닿더군요. 심지어 게임계에도 말이죠!!


google | Nexus S | Aperture priority | Center-weighted average | 1/10sec | F/2.6 | 0/0EV | 3.4mm | ISO-200 | Flash did not fire | 2011:07:03 15:34:03

XBOX360 : Dance Centeral
Kinect가 얼마나 섬세한 동작까지 감지하는지 피부로 느낄 수 있다!
화면 오른쪽에 검은색 배경에 흰색으로 표현되는 모습이 Kinect 센서가 인식하는 게이머의 모습이다




 

Kinetic Sensor 
 

Kinect Sensor : $149.99
 

  ‘게임기’에 적용되었다는 점을 배제하고 바라 본다면, Kinect Sensor는 사람의 동작 정보를 인식하고 입력하는, 훌량한 ‘정보 수집 및 입력기기’입니다.

  저는 근래에 업무상, 산업현장에서 작업자들의 작업 정보를 어떻게 효율적으로 입력 받을 수 있을지 고민을 많이 하고 있습니다. 제가 느끼기로는 자동화가 적게 되거나, 자동화가 어려운 산업현장의 경우, ‘정보 입력 및 수집’ 을 위해 사람의 노력이나 주의를 요하게 되는 경우가 많고, 정보 입력 자체가 하나의 업무가 되어 버리는 경우가 많은 것 같습니다.
  만약,
이 동작 인식이 매우 훌륭하게 이루어지고, 또 그럴 수 있는 환경을 만들 수 있다면, 또 거기에서 많은 가능성을 발견할 수 있지 않나 하는 생각이 듭니다.

  예전에, 어떤 책에서 Microsoft의 빌 게이트 씨가 일선에서 물러났어도 꾸준히 고민하고 생각하고 있는 것이, 'ubiquitous' 시대 이후를 이끌어 갈, 'natural interface'라는 글을 읽은 적이 있는데, 'Kinect Sensor'와 같은 제품들이 그러한 고민의 흔적들이 아닐까 하는 생각을 잠깐 해봅니다.


 
 


Kinetic Application

  Kinetic Sensor 하드웨어 자체도 훌륭하지만, 이렇게 좋은 성능을 낼 수 있는 것은 역시나 Kinect의 전체적인 Solution이 좋아서라는 생각이 듭니다. 실제로, 많은 Early-Adapter 분들이 'Kinect Sensor'를 해킹해서 PC로 연결하여 이런저런 연구를 진행했습니다. 'Kinect for XBOX'를 'Kinect for Windows'로 자체적으로 바꾼 것입니다.

  그러다, 올해 6월 16일, 영상처리나 동작인식, 혹은 이를 이용한 응용 프로그램 제작에 관심있는 분들이 기뻐할 만한 소식이 들려왔습니다. 정식판은 아니지만, Microsoft에서 'Kinect for Windows SDK beta'를 런칭한 것이죠!

 



 Kinect for Windows SDK beta 발표!!
아래는 Kinect Sensor를 PC에 응용한 동영상 (Windows 7)



  이것으로 Kinect Sensor를 활용한 여러가지 응용 프로그램 개발에 가속이 붙을 것 같습니다.

  때마침, 저에게도 몇일전에 주문한 'Kinect Sensor'전용 USB - 전원 Adapter가 도착했습니다.
  이 어댑터를 이용하면, Kinect Sensor를 PC에 USB형식으로 연결할 수 있습니다.
   즐겁게 가지고 놀아봐야겠습니다. 긴~ 밤이 될 것 같네요 s(^O^)s
 

google | Nexus S | Aperture priority | Center-weighted average | 1/14sec | F/2.6 | 0/0EV | 3.4mm | ISO-100 | Flash did not fire | 2011:09:15 20:02:43






                       추천은 기본, 댓글은 센스입니다! ㅇ_ㅇ)b
Creative Commons License
Creative Commons License




XNA를 이용한 Game Engine

XNA를 이용한 엔진이긴 하지만, XNA를 조금 배운다고 해서 이 정도를 만들어 낼 수는 없다 ;)


 

XNA란?

  XNA는 Microsoft Visual Studio를 이용하여 게임을 개발하기 위한 게임 개발 환경입니다.
  
2006년, Game Developers Conference 를 통해 발표된 이래, 2011년 9월 현재, 4.0 버전까지 공개되어 있습니다. 현재 많은 게임제작업체에서 Visual Studio의 ‘DirectX(언어 : C++)’를 이용하고 있다고 하는데, 아무래도 일반적인 유저에게 진입장벽이 높은 것이 사실입니다. (사실, 제가 할 줄 모르는 건 다 진입장벽이 높은 것으로 치부하고 있습니다. 흐흐) 

  어쨌든, Microsoft에서는 아래의 두 가지 목표를 가지고 개발 프레임워크를 만들었고, 이 목표가 곧 XNA의 가장 큰 특징이 되겠습니다.

CROSS PLATFORM
  요즘 모든 프로그래밍 언어의 숙제이자 목표입니다.
  '내가 한번 짠 코드를 수 많은 디바이스에서 그냥 쓸 수는 없을까?'.
 
Java가 그랬고, C#이 그랬습니다. XNA는 언어로 C#을 이용하고 있고, ‘XNA Framework’를 이용하여, Windows, Windows Phone 7, Xbox360 에서 구동되는 게임을 제작할 수 있습니다. 각 플랫폼간 이식도 자유롭습니다.


EASY TO USE
  저 같은 초보 프로그래머는 RAD(Rapid Application Development)툴이 좋습니다. 쓰기 편하거든요!
  RAD툴을 만들어주는 'Real Programmer'분들이 있는 반면, 저는 RAD 툴이 아니면 뭔가 코딩을 해보고 싶은 맘이 안들 정도로 게으릅니다!
  요즘 비지니스 업계 전략은 역시 [ 낮은 진입장벽 > 빠른 개발도구 및 언어의 보급 > 시장의 빠른 생성 > 수익모델 적용에 따른 이익 창출 ]인 것 같군요. '나눔과 공유의 정신'과 '시장주의'가 절묘하게 결합되어 있는 것 같습니다. 흐흐




XNA 4.0 설치

  기본적으로, XNA Game Studio 4.0은 Windows Phone SDK의 일부분입니다.
  따라서, XNA로 게임을 개발하기 위해서는 아래 두가지 프로그램만 설치해주면 됩니다.

1. Visual Studio 2010 Professional / Express & Service Pack 1 설치

Visual Studio 2010 Professional, 혹은 Express 버전이 필요합니다.
정식으로 정품 Professional 버전을 무료로 쓰는 방법은 아래 포스팅을 참고하세요.


Visual Studio 2010 Professional 정품을 정식 무료 설치법


2. Windows Phone SDK 설치

기존에는 ‘Windows Phone Development Tools’라는 이름으로 배포했으나, 너무 길다고 생각했는지,  'Windows Phone SDK'로 이름이 바뀌었네요~ 아래 링크를 참고하세요.

Windows Phone SDK 7.1 RC 다운 받으러 가기 (APP HUB)
Windows Phone SDK (Windows Phone Development Tools) 설치

 



Windows XP 이용자는 'XNA Game Studio 4.0 Standalone'를 다운받자


  XNA는 운영체제가 Windows XP 일 경우, 위 그림과 같이 APP HUB 홈페이지에서 XNA Game Studio 4.0 Standalone 버전을 설치할 수 있습니다만, 개인적으로 Windows Phone이나 XNA 관련 프로그래밍을 해보고 싶으신 분들은 맘 편하게 Winodws 7, Visual Studio 2010 SP1 + Windows Phone 을 설치하시는 것을 추천합니다.

  저 같은 경우는 Windows Phone 7을 개발하기 위해, 이미 Windows Phone Development Tool을 다운 받아서 설치해놓은 상태였기 때문에
별도로 XNA를 설치할 필요가 없었습니다.

  다만, 예전에는 Visual Studio 2010만 설치가 되어 있으면 바로 Windows Phone SDK를 설치할 수 있었으나, 이번에 제가 설치를 해보니(2011년 9월), Visual Studio 2010 SP1이 반드시 설치가 되어 있어야 Windows Phone SDK를 설치할 수 있었습니다.

 


설치 후, 'Visual Studio 2010'을 실행하면, XNA Game Studio 4.0 메뉴가 생성되어 있다
Windows Phone Game / Windows Game / XBOX 360 Game Templates가 있다
이 세가지를 모두 개발할 수 있다는 얘기가 되겠다




[참고] 개발도구 및 언어 version 정리

  < Visual Studio – .NET Framework - C# – XNA Framework >의 버전은 다음과 같습니다.
  릴리즈 시기에 따라, 표기한 버전이 다를 수 있지만, 어차피 Visual Studio 2010만 쓸 것이기 때문에 참고만 하시기 바랍니다. Visual Studio 2010 + WP SDK을 설치하면 신경 안쓰셔도 되는 부분입니다.






XNA 다른 글 보기



 

수고했다고 칭찬 좀 해주세요~ ㅇ_ㅇ)b

저작자 표시 비영리 변경 금지
Creative Commons License
Creative Commons License


내가 감탄하면서 즐겼던, Wind-Up Knight(Android)!!

등에 달린 저것이 태엽이다. 태엽이 다 풀리기전에 태엽을 먹어야 한다

완전 귀엽다. 게다가 3D다!




안드로이드 게임을 만들어 봅시다!


  저는 게임을 좋아합니다.
  뭣 모르던 어린 시절에도 게임이 '재미'가 있어서 좋아했지만, 나이가 든 지금에도 여러가지 이유로 게임이 참 좋습니다. 게임이든 세계적인 문학작품이든 간에, 많은 사람들에게 사랑받는 작품 안에는 생각보다 많은 '사람'과 '사는 것'에 관한 것들이 녹아있다고 생각합니다. 

  우리가 만약, 단순히 스마트 폰 게임을 즐기는 것에서 벗어나, 작고 엉성하지만, '우리만의' 이야기가 담겨 있는 게임을 만들어서 친구들과 함께 할 수 있다면 얼마나 신날까요? 
  예를 들어, 친구들 얼굴 사진을 그때 그때 찍어서 비행기 파일럿으로 만들어서 게임을 한다거나, 친구들과의 여행 사진으로 만든 퍼즐게임 등과 같은 것 말이죠. 혹은! 여자친구와의 추억이 담긴 스토리가 슬쩍 끼어들어 있는 RPG라던지??




안드로이드 게임 개발을 해보고 싶긴한데...
무엇을 알고 있어야 하나?


  그럼 안드로이드 게임 개발을 하려면 무엇이 필요할까요?
  안드로이드 스마트 폰 게임을 좀 즐겨보셨거나, 조금이라도 컴퓨터 프로그래밍에 관심이 있으신 분이라면 이렇게 생각하실 것 같습니다.


  ‘음.. 우선, 안드로이드 프로그래밍을 이클립스(Eclipse)로 하니까, 이클립스를 설치해야겠지?
  그리고, 이클립스에서 JAVA를 사용하니까, JAVA도 좀 알아야 할 것 같고~ 
  요즘은 똑같은 프로그램이라도 GUI나 캐릭터가 이쁘면 대박이 나니까, 왠지 디자인도 중요할 것 같은데?
  사운드는 또 얼마나 중요한데~ 저번에 그 게임 사운드가 정말 대박이었지~’


  다 맞는 말이네요~


  ‘안드로이드 게임 개발편’에서는 게임과 일반 프로그램의 차이안드로이드 게임 개발 기본 요구 역량을 다음과 같이 언급하고 있습니다.


[요약] 게임과 일반 프로그램의 차이점?

- 프로그램의 기본 흐름은 입력, 처리, 출력!
- 일반적인 업무용 프로그램은 입력과 출력이 중요하므로 그 처리 과정은 전혀 문제가 되지 않는 경우가 많음
- 그러나, 게임은 프로그램의 실행 결과가 아니라 실행 과정에 목적이 있는 프로그램
- 게임 프로그램은 비주얼한 그래픽과 사운드, 시스템의 하드웨어, 메모리 요구량, 처리 속도 등 자잘한 부분까지 신경을 써야 하는 복잡한 분야



안드로이드 게임 개발을 위한 기본 요구사항

1. Java 언어에 대한 기초적인 지식

- 기본 문법, 자료형, 반복문, Class와 메서드

2. 안드로이드의 Activity와 View에 대한 이해

- View와 Viewport, 화면 해상도, 사용자 View, SurfaceView, Activity 사이의 자료 전달

3. Thread와 Handler

- Thread와 Handler를 이용한 반복 처리

4. 키보드와 Touch 이벤트 핸들러 구현

- 키보드 읽기, Touch 읽기

5. 이미지 처리

- Canvas, Bitmap, Matrix, Paint

6. 자료 구조

- 배열, ArrayList, Hash Map

7. 수학적인 기초 지식

- 삼각함수, 행렬, Vector, 가속도

8. MediaPlayer  및 SoundPool

- 배경 음악 및 효과음

9. 파일 입출력 및 Database 관리 능력

- chlrms wjatn, chlrh emrwja tnsdnl vytl

10. 웹 서버와의 통신 방법

- 다른 사용자와의 커뮤니케이션

11. 캐릭터 및 배경 화면 디자인

- 포토샵, 일러스트레이터, 아이콘 에디터 등




이 모든 걸 혼자 다하기란 사실상 굉장히 힘든 일인 것 같습니다.

( 저 중에서 내가 할줄 아는건 뭐 있지~?  -_- ;; )

책에서 언급한대로 게임은 정말로 연극이나 영화와 같은 종합예술에 속하는 것 같습니다.

저는 직업이 프로그래머도 아니고, 게임 개발자는 더더욱 아니지만, 시간을 두고 한번 차근차근히 해보도록 하겠습니다.


나이 들어서 친구들과 함께할 수 있는 '우리들만의 게임'이 있는 것도 참 좋겠다는 생각이 문득 드네요~



 * 본 포스팅은 제이펍 출판사의 '안드로이드 게임 개발편'의 내용을 토대로, 생각하고 실습한 내용을 재구성한 것입니다. 

실전 앱프로젝트 안드로이드 게임 개발편
국내도서>컴퓨터/인터넷
저자 : 박승제
출판 : 제이펍 2011.03.11
상세보기



저작자 표시 비영리 변경 금지
Creative Commons License
Creative Commons License