사용자 도구

사이트 도구


사이드바

language:gamemaker:2-개발과-디자인-가이드

공통 : 모바일 OS

아이폰 해상도

  • iPhone4 : 640 x 960 (width x height 순서)
  • iPhone3 : 320 x 480 : iPhone4 해상도를 쓰는 게 더 낫다
  • iPad1 : 1024 x 768

GM에서 제안하는 가이드에 의하면 가장 큰 해상도로 시작하는게 좋다고 한다. 테스트 결과,

  • iPhone4 (640 x 960) 맞춰서 개발해도 선명한 화면을 얻을 수 있다. 화면 결과는 iphone4,4s,ipad1,ipad retina에서 확인.

안드로이드

아직..

프로그래밍 유의 사항

스프라이트 파일명

  • 애니메이션 gif를 읽으면 개별 이미지를 스프라이트로 인식한다.
  • 파일명에 _stripXX가 있으면 XX에 숫자만큼 서브이미지를 스프라이트로 인식한다. 5장짜리 스프라이트면, abc_strip5.png 로 이름을 정해야 한다.
  • jpg 지원하지만, 화질의 문제가 있으므로 png나 bmp를 쓴다.
  • 좀 더 복잡한 이미지로 배열 되어 있는 것은 sprite editor를 사용해서 이미지를 로드한다.

편집기의 다국지원에 대해서

  • 편집기에서는 유니코드를 인식하고 표시도 되지만, 저장할때는 편집기 자체에서는 ansi 형식으로 파일을 만듦니다.
  • 왠만하면 코드는 영문 사용.
  • 내장 텍스트는 별도 INI 파일을 유니코드로 저장해서 사용하는게 낫다.

폰트 내장 방법

  • 폰 내부의 시스템 폰트를 사용할 수 없다.
  • 내장 폰트를 만들어야 하는데 방법은, : 폰트를 추가
  • 모든 글자를 포함한 내장 폰트를 만들려고 하면 텍스쳐 크기가 부족하게 된다.
  • 필요한 글자만 포함시키려고 여러번 다듬어야 한다.

스피드

  1. pc에서 보는 움직이는 속도와 아이폰에서 느낌은 좀 다르다.
  2. 기본 속도를 4이상 잡아야 빠르게 움직이는 느낌이 난다.
    1. 프레임률과 룸의 스피드는 개념이 다르다.
  3. ip4에서는 4 –> 해상도가 세로로 960이나 되다 보니 프레임당 2,3픽셀 움직이는건 거의 안움직이는 것 처럼 보인다.

간단한 파티클

  • 오브젝트의 오른쪽의 액션 탭에서 'draw' 탭 → 'Other' → 'Create Effect'
  • 효과용으로 사전 정의된 파티클을 사용할 수 있다.

마우스

  • 마우스 이벤트는 오브젝트 영역 내에서만 인식
  • 전체 화면에서 클릭된 위치를 보려면, 일반 마우스 클릭이 아니라
  • 'Add Event' → 'Mouse' → 'Global' , 전역 마우스 클릭 이벤트를 설정해야 인식 된다.
  • 스프라이트를 포함하지 않는 컨트롤용 오브젝트 같은 곳에서 사용시 유의

set gravity

  • 오브젝트에 중력 값과 중력이 적용 되는 방향 (잡아 당기는 방향)을 설정한다.
/// 특정 오브젝트에 살짝 튀었다가 떨어지는 것을 설정
// 오브젝트 생성시 : 살짝 위로 가도록 생성, 생성하는 CreateObject 이벤트에 코드로 추가
direction = random_range( 70, 110 );
speed = 3;
/// 'Set the gravity' 액션을 추가
direction = 270 // 다른 direction 과 방향이 같다. ( 0 : right, 90 : up, 180 : left, 270 : down )
gravity = 0.2   // 숫자는 임의 입력이 가능하니 여러 숫자로 테스트. 
// 0.01도(아주 작은 수) 입력 가능. 
// 숫자가 커지면 더 빨리 떨어진다.
// check 'Relative' 중력 방향이 연결된 오브젝트에 영향을 받아 direction 값이 상대적으로 달라진다. 일반적으로 쓰려면 off.

룸(room)

  • 룸은 리소스 트리의 'Rooms' 트리에서 맨 위의 것이 자동 로딩 된다.

배경 사이에 스프라이트 그리기

  • 배경 사이에 스프라이트를 그리고 싶다면,
  • Backgroud[0-9] 를 사용할 때,
  • 스프라이트보다 먼저 보여질 배경에는 'Foreground Image'를 체크해주면 된다.

오브젝트를 제어하는 오브젝트

  • 기본 활용 법 : object는 보이지 않게 만들어서 (visible off) 다른 오브젝트를 자동으로 움직이도록 할 수 있다.

디자인 유의 사항

로고 사이즈 : iPhone

Splash Screen 사이즈가 너무 크면, 앱이 초기화 되지도 못하고 바로 죽어버린다.아직 적당한 사이즈를 모르겠다.

매뉴얼에는 첫번째 방과 같은 크기를 가져야 한다고 한다. ( 테스트 필요 )

GM 폰트는

  • 한 폰트당 한개의 크기와 한 종류의 폰트만 사용한다.
  • os 내장된 폰트를 사용할 수 없기 때문에, 사용하는 문자를 모아서 (자동) 그것만 사용한다.
  • 꼭 필요한 글자 아니면 글자 이미지를 사용한다.
  • 폰트 크기는 18이상의 큰 것을 사용해야 제대로 보인다.

이미지

  • 스프라이트용으로 사용할 기본 이미지는 포맷은 PNG
  • 알파 투명값은 필요한 이미지에만 사용
  • 배경이미지,스프라이트의 이미지 리소스는 사용량에 제한이 있으므로 무조건 큰것 보다는 최적 크기를 찾아야 한다.
    해상도 기준 적당한 이미지로 선별.

스프라이트

  • 30fps 기준으로 동작을 만드는게 좋을까? (검증필요)
  • 프레임당 33ms 간격
  • 코인 드랍과 같은 이벤트에서 회전해야 하는 이미지가 있다면, 회전하는 상태로 스프라이트 셋을 구성한다.

배경이미지

  • 모바일의 경우 1024 x 1024 보다는 작게한다.
  • 가능하면 타일로 구성한다. ( 타일 제작 툴은? GM으로? )
  • 최대 텍스쳐 크기를 2048로 잡아도 iphone 3g에서 구동 되었다. 문제는 안드로이드인가?

사운드

효과음 mp3 내장

  • mp3 내장시, 툴에서 최초 로딩 되는 시간이 좀 걸린다.
  • 확인은 안해봤지만 ogg가 가장 나은가?
  • 사운드 내장 작업 시에는 툴이 반응이 없기도 하므로 인내심이 필요함. 간혹 툴 자체가 다운되기도 한다.
  • 원본 사운드가 wav인 경우, 리소스로 내장시키기 훨씬 더 낫다.
  • wav도 컴파일 할때는 ogg로 변환된다.

iPhone

iOS provisioning Portal

포탈 사이트

  • Certificates : 개발자 인증서를 다운로드 받을 수 있는 곳
  • Devices : 개발 기기로 등록하는 곳.
  • App IDs : 앱 아이디 발급과 기기 기능 사용 범위 설정
  • Pass Type IDs : ?
  • Provisioning : 앱 인증서 - 개발,배포시 사용된다.
  • Distribution : ?

개발용 인증서 설정하기

App ID 추가

  1. 사용할 앱 이름으로 App ID 추가 : 영문
  2. description : 앱 영문 이름으로 추가. 대충 엉성한걸로 달면 계속 맘 상함.
  3. bundle Seed ID : Use Team ID 선택. 다른 AppID를 선택할 수 있는데 의미를 아직 모름.
  4. bundle Identifier : com.domainname.appname 형식으로 작성
  5. 길지만 AppID가 발급된다.

Provisioning 추가

Development 탭

  1. Development 탭에서 'New Profile' 선택
  2. Profile name : 같은 앱이어도 개발탭과 배포탭에 같은 이름으로는 안되는 것 같다.
  3. Certificates : 인증된 개발자 선택. ( 여러명 등록된 것은 미경험 )
  4. App ID : 앱 이름과 같은 app id 선택.
  5. Devices : 적용할 기기 선택. 포탈의 'Devices' 에 등록된 기기가 나온다.

Distribution 탭

  1. Distribution Method : 'Ad Hoc' 선택. App Store는 미경험.
  2. Profile Name : 앱 이름과 맞춰 쓰는게 알아보기 편함.
  3. App ID : 앱 이름에 맞춰 만들어둔 App ID 선택
  4. Devices : 옵션이라는데?
  5. 하여튼 발급.

Adhoc로 배포하는 것

용도

  • 테스트 용도로 여러 사람에게 배포하기 위한 빌드용 인증서

AdHoc용 인증서 작성

Ad Hoc 인증서 작성시,

  • AdHoc용 인증서 작성시에는 ProfileName에 공백을 두지 말것.
    • “some app” : (x)
    • “someapp” : (o)

이렇게 해야 제대로 인증서가 작성 된다.

테스트용 기기 등록시

  • 폰의 이름을 정확하게 입력할 것
  • 폰의 UUID를 받아야 한다.

GameMaker에서 빌드

  1. Distribution - Ad Hoc 으로 생성.
  2. Distribution - Ad Hoc 으로 만들 때, “Profile Name” 에 쓰는 이름에 공백을 넣지 말것.
    1. Profile Name : New App –> (x)
    2. Profile Name : NewApp –> (o)
  3. 이 인증서를 가져오면 완성이 가능하다.

iPhone 배포

TestFlightApp를 사용 방법

  1. 본인 계정 추가 : test flight로 가입하기
  2. 테스트할 사람의 계정 추가하고 초대하기
  3. 테스트 기기의 UUID 수집
  4. 추가된 UUID로 Privision 갱신하고 인증서 재발급
  5. 재발급된 인증서로 프로그램 재 컴파일

TestFlightApp : 성공한 설정 정리

업데이트 ( 드디어 한번 성공, 다음에도 될 것인가? )

iOS Provisioning Portal

  1. App IDs, 앱 아이디 생성할때
    1. Description : 공백이 없어야 하는가 싶어서 짧고 공백 없는 걸로.
      사용한 예 –> okifli2
    2. Bundle Seed ID (App ID Prefix) : 'Use Team ID' 대신, 눈에 보이는 'FN…9'와 같이 10자리 값 선택
    3. Bundle Identifier (App ID Suffix) : posfix : com.arario.kieuns 와 같이 정확하게 작성.
  2. Provisioning, 추가
    1. 'Distribution' 탭 선택
    2. 'New Profile'로 새 프로파일 작성
  3. Provisioning –> 'New Profile'
    1. Distribution Method : Ad Hoc 선택
    2. Profile name : 공백없이 붙여서 이름을 짓는다. (사용한 예 –> okifliadhoc)
    3. Distribution Certificate : 고정이므로 패스
    4. App ID : 아까 만든 App ID 선택 ( 예 –> okifli2 )
    5. Devices (optional) : 테스트할 사람 전부 선택.

새로 만든 인증서,프로비져닝 다운로드

  1. XCode 실행
  2. Organizer실행 : 메뉴의 'Window' –> 'Organizer' 실행
  3. Devices 탭 선택
  4. LIBRARY –> Provisioning Profiles 선택
  5. 오른쪽 하단 메뉴의 Refresh 클릭
  6. 애플 아이디로 로그인
  7. 인터넷에서 새로 다운로드(갱신) 받는다.
  8. 새로 추가한 Provisioning 파일이 있는지 확인한다.
  9. iPhone 구성 유틸리티에서도 보이는지 한번 확인.

개발용 맥의 설정, 관련 있는지 애매

  1. Application Oven : 기존 것을 삭제하고, 새로 설치하게 해서 지금 사용하는 GameMaker와 같은 버젼인지 확인한다.
    App Oven은 영문에서만 제대로 동작한다.
  2. Certificate : iPhone Distribution
  3. Provisioning : 'okifliadhoc - FN…9.com.arario.kieuns' 처럼 제대로 보여야 한다.
  4. App Id : 'com.arario.kieuns', 자동으로 설정 된다.

GameMaker 설정 --> Global Game Settings

  1. iOS 탭
  2. General
    1. Version Information –> Display name : okifliadhoc, Provisioning의 Profile Name과 맞춰보았다.
    2. Version : 자동이니까 패스, 이번에는 새로 시작하는 기분으로 1.0.0으로 설정
    3. App ID : Bundle Identifier (App ID Suffix)와 같은 값을 적었다. ( –> com.arario.kieuns )
    4. Devices : iPhone or iPod Touch로 선택. Both 항목을 선택하면 안되는건가???
  3. Provisioning
    1. Provisioning : 'okifliadhoc - com.arario.kieuns' 로 선택, 위에서 만든 Provisioning 파일로 선택했다.(당연히)
    2. Certificate : 'iPhone Distrubution' 으로 선택

++++ 성공한 컴파일 결과 로그 |

Saving IFF file... C:\temp\gm_ttt_97676\gm_ttt_42933\okinawaflight-Default-1.0.0.zip
Writing Chunk... GEN8
Writing Chunk... OPTN
Writing Chunk... EXTN
Writing Chunk... SOND
Writing Chunk... SPRT
Writing Chunk... BGND
Writing Chunk... PATH
Writing Chunk... SCPT
Writing Chunk... FONT
Writing Chunk... TMLN
Writing Chunk... OBJT
Writing Chunk... ROOM
Writing Chunk... DAFL
Writing Chunk... TPAGE
Writing Chunk... CODE
Writing Chunk... VARI
Writing Chunk... FUNC
Writing Chunk... STRG
Writing Chunk... TXTR
0 Compressing texture... writing texture texture_0.png... 
Writing Chunk... AUDO
Writing Chunk... SCPT
Writing Chunk... DBGI
Writing Chunk... STRG
Hello World
Done
2012-11-08 19:42:26.195 Application Oven[19564:100b] Temporary directory is /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N
2012-11-08 19:42:26.196 Application Oven[19564:100b] /usr/bin/unzip -qq /Applications/GameMaker-Studio/okinawaflight-Default-1.0.0.zip -d /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/GMSzip
2012-11-08 19:42:26.202 Application Oven[19564:100b] /usr/bin/unzip -qq /Applications/GameMaker-Studio/Application Oven.app/Contents/Resources/com.yoyogames.yoyorunner.ipa -d /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner
2012-11-08 19:42:26.316 Application Oven[19564:100b] /usr/bin/codesign -d --entitlements :/var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Entitlements.plist /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/none_Adhoc_iPhone_iPad_622.app
Executable=/private/var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/none_Adhoc_iPhone_iPad_622.app/YoYo_Runner
2012-11-08 19:42:26.346 Application Oven[19564:100b] /usr/bin/security cms -D -i /Users/arario/Library/MobileDevice/Provisioning Profiles/D5C1A07C-70DD-40B1-86C9-415A764295DE.mobileprovision
2012-11-08 19:42:26.388 Application Oven[19564:100b] Embedded provision=/var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Embedded.plist
2012-11-08 19:42:26.389 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Print ApplicationIdentifierPrefix:0 /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Embedded.plist
2012-11-08 19:42:26.393 Application Oven[19564:100b] FN4E9E2MB9
2012-11-08 19:42:26.393 Application Oven[19564:100b] AppId Prefix=FN4E9E2MB9
2012-11-08 19:42:26.397 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :CFBundleIdentifier "com.arario.kieuns" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.402 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :application-identifier "FN4E9E2MB9.com.arario.kieuns" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Entitlements.plist
2012-11-08 19:42:26.407 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :keychain-access-groups:0 "FN4E9E2MB9.com.arario.kieuns" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Entitlements.plist
2012-11-08 19:42:26.412 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Delete :UIDeviceFamily /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.417 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Add :UIDeviceFamily array /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.421 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Add :UIDeviceFamily:0 integer  1 /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.426 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Delete :UISupportedInterfaceOrientations /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.430 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Add :UISupportedInterfaceOrientations array /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.435 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Delete :UIInterfaceOrientation /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
Delete: Entry, ":UIInterfaceOrientation", Does Not Exist
2012-11-08 19:42:26.439 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Add :UISupportedInterfaceOrientations:0 string "UIInterfaceOrientationPortrait" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.444 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Add :UISupportedInterfaceOrientations:1 string "UIInterfaceOrientationPortraitUpsideDown" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.449 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Add :UIInterfaceOrientation string "UIInterfaceOrientationPortrait" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.453 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :CFBundleShortVersionString "1.0.0" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
Set: Entry, ":CFBundleShortVersionString", Does Not Exist
2012-11-08 19:42:26.458 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :CFBundleVersion "1.0.0" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.462 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :CFBundleDisplayName "okifliadhoc" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.467 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :CFBundleExecutable "okifliadhoc" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.472 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Add :YYIAPSandbox string  "false" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.478 Application Oven[19564:100b] /usr/bin/security unlock-keychain -p 1234
2012-11-08 19:42:26.492 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :get-task-allow NO /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Entitlements.plist
2012-11-08 19:42:26.497 Application Oven[19564:100b] /usr/bin/codesign -f --preserve-metadata -s iPhone Distribution --resource-rules=/var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/ResourceRules.plist --entitlements=/var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Entitlements.plist /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app
/var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app: replacing invalid existing signature
2012-11-08 19:42:26.777 Application Oven[19564:100b] /usr/bin/xcode-select -print-path
2012-11-08 19:42:26.780 Application Oven[19564:100b] /Applications/Xcode.app/Contents/Developer
2012-11-08 19:42:26.781 Application Oven[19564:100b] /bin/sh -c /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication "/var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app" -o "/Users/arario/GameMaker-Studio/okinawaflight/okifliadhoc.ipa"

++++

인증서 Provisioning 배포

  1. 메일로 보내도 되겠지만, 웹서버를 준비해서 웹에서 다운받을 수 있게 하면 바로 설치가 가능.
  2. 그러니, 다운로드 url을 전송.

마지막 업로드

  1. 컴파일 후에는, TestFlightApp.com에 업로드.
  2. 빌드 업로드 후에는, Provisioning 파일도 TestFlightApp.com 같이 올려야 다운로드가 가능하다.
    1. 위치는 'Builds' 클릭 후 이동 –> 업로드 한 빌드 선택
    2. 왼쪽 메뉴에서 'Permissions' 선택
    3. Provisioning 항목 부분 선택해서 파일 업로드.
  3. 본인 것에서 되는지 확인한다.
language/gamemaker/2-개발과-디자인-가이드.txt · 마지막으로 수정됨: 2012/11/20 11:57 (바깥 편집)