목차

원문 : http://www.yoyogames.com/docs/designing_successful_iphone_games.pdf

아이폰의 해상도에 대응하는 가이드

룸 2개를 만들어서 사용하는 방법.

  1. 첫번째 방을 만든다.
  2. 컨트롤러 오브젝트를 둔다.
  3. Create 이벤트에서 다음 처럼 이동하는게 낫다
{
  if (YoYo_GetPlatform() == os_ios && YoYo_GetDevice() == 2)
    room_goto(room_ipad_title)
  else
    room_goto(room_iphone_title);
}

대안으로는 모든 방을 1024×768로 만든다.

{
// Set the size of the display
globalvar DISPLAY_WIDTH, DISPLAY_HEIGHT;
 
if (YoYo_GetPlatform() == os_ios && YoYo_GetDevice() == 2)
{ DISPLAY_WIDTH = 1024; DISPLAY_HEIGHT = 768; }
else
{ DISPLAY_WIDTH = 960; DISPLAY_HEIGHT = 640; }  
 
// Set the views in the rooms
room_set_view_enabled(room_title,true);
room_set_view(
  room_title,0,true,(1024 - DISPLAY_WIDTH) div 2,
  (768 - DISPLAY_HEIGHT) div 2,DISPLAY_WIDTH,DISPLAY_HEIGHT,
  0,0,DISPLAY_WIDTH,DISPLAY_HEIGHT,0,0,-1,-1,-1 );
 
// Add views for the other rooms here  
 
// Now go to the title menu room
room_goto(room_title);
}

화면에 물체를 배치할때 화면의 크기를 얻기 위해서 view_xview[0], view_yview[0] 을 사용해야 정확한 위치를 구할 수 있다.

안드로이드

안드로이드는 해상도가 너무 다양하다. 그래서 해상도를 960×640으로 만들어서 사용하는 것으로 나머지 해상도에 대해서는 자동으로 화면 크기가 조정되는 기능을 사용하는 것이다.

스프라이트,배경,타일

배경리소스는 플레이하는 동안 바꿀 수 없지만, 스프라이트는 플레이 중에 로딩할 수 있다. 필요없는 것을 로딩해놓을 수도 있는데 (이는 비디오메모리 낭비다) 모든 스프라이트가 메모리에 올라가지 않게 주의가 필요하다. 사용하지 않는 것은 바로 삭제한다. 연속된 이미지를 보여주는 것은 파일에서 읽어들여서 표시하고 삭제하고 새로 만들고 하는 과정의 반복이다.

스프라이트 기능이 ios와 android에서 더 최적화 되었다는 점을 알아야한다. 배경은 배경으로만 사용 되어야 한다. 그외 다른 목적은 모두 스프라이트로 처리한다. 타일 사용도 마찬가지다.

파티클 기능을 사용하는 것은 권장사항이다. 다수의 인스턴스를 만드는 것보다 파티클을 사용하는것이 낫다. 그 인스턴스가 한개의 이벤트만을 갖고 있다고 해도 파티클이 더 낫다.

이 방법이 퍼포먼스를 올리는 방법이다.

상용게임에는 이미지,스프라이트,배경이 모두 사용 권리가 있는지 확실히 해야한다.

폰트

GameMaker의 폰트 출력 기능을 사용하는 것은 문제 없다. 게임메이커8.1의 새 기능은 폰트에 앤티앨리어싱화 하는 것이다. 좀 더 큰 폰트를 사용하는 것도 가능하다. 상용게임에는 폰트 사용 라이센스가 있는지 확인해야 한다.

shape 그리기와 3d 그래픽

shape를 그리는 것과 3d 그래픽은 지원 되지만 디바이스에 따라 3d 기능이 제한적이다. 3d 게임은 작은 모바일폰에서는 잘 동작하지 않는다. 따라서 2d 게임 또는 isometric view로 만드는 것이 낫다.

서페이스와 룸 변환

ios에서 서페이스 기능이 지원된다. 하지만 알아둬야할 점은 제한적인 비디오 메모리만이 사용 가능하다는 점이다. 따라서 신중하게 사용 되어야 한다.또는 아주 제한적인 용도를 제외하고는 아예 안쓰는 방법도 있다.

게임메이커는 룸간 화면 변환을 지원하지 않는다. 룸 변환 기능을 사용하려면 직접 만들어야 한다.

텍스쳐 시트 (texture sheets)

ios와 안드로이드에서 사용되는 스프라이트,배경이미지,폰트는 모두 텍스쳐시트에 저장된다. 이것들은 1024×1024 크기의 이미지다. 게임메이커는 자동으로 처리해준다. 투명한 부분에서 불필요한 부분을 잘라서 저장할 정도로 괜찮은 기능이다. 그런데 이것은 1024 보다 큰 이미지가 있어서는 안된다는 뜻이다. 정말 큰 이미지를 원한다면 잘라서 다른 이미지로 저장해라.

텍스쳐 시트는 5개만 지원된다. 모든 스프라이트,폰트,배경이 이 안에 들어갈 수 있어야 한다. 따라서 큰 사이즈의 스프라이트 이미지나 배경을 사용하지 않는게 좋다. 너무 많은 폰트를 사용하지 말고 필요한 글자들만 저장해서 사용해라. 큰 이미지들의 경우 작은 이미지들로 조합되도록 사용하는 방법이 있다. 또는 같은 이미지를 여러 곳에 사용해도 된다. 큰 애니메이션을 써야할때, 큰 부분의 이미지를 중심으로 작은 이미지들이 파츠로 사용되는 형태를 구성할 수도 있다. (예, 발 부분을 분리해서 몸통과 연결해서 쓰는 방법을로 걷기 애니메이션을 구성한다든지)

Currently it is not possible to load background during game play. So all backgrounds must be included in the game itself, and must fit in the texture sheets. As indicated above you can load sprites. But they must still fit in the video memory.

Speed considerations

게임이 느릴때, 스크립트 사용에 문제거 있거나 한 프레임당 너무 많은 이미지를 그려기 때문이다. 그래픽에 대해서는 다음 항목을 확인한다.

Game Speed

룸 스피드를 변경해서 게임 스피드를 조정할 수 있다.기본 값은 30fps로 60fps면 더 부드러운 플레이가 가능하고 대부분 기기에서 가능하다. 아이폰에선 30fps또는 60fps만 사용해야 한다. 다른 값은 사용하지 말라. 처음부터 fps를 볼 수 있도록 코드를 넣는다. 이건 테스팅할때 굉장히 중요하다.

draw_text( 50, 8, 'FPS: ' + string(fps) );

부드러운 움직임이 필요없는 게임이면 30fps를 사용하는게 낫다. 이 설정이면 대부분 기기에서 잘 동작한다. 30fps가 충분하지 않으면, 기기에 따라 30fps 또는 60fps로 동작하도록 코드를 추가하는게 낫다. 시작 화면에서 아래와 같은 코드를 사용해서 게임 스피드를 조정한다.

globalvar GAME_SPEED;
GAME_SPEED = 60;  
if (YoYo_GetPlatform() == os_android)
  GAME_SPEED = 30;
if (YoYo_GetPlatform() == os_ios && YoYo_GetDevice() == 0)
  GAME_SPEED = 30;

ip3와 안드로이드에서는 30fps로 그외 디바이스에서는 60fps로 설정한다.룸이 시작되는 위치에 룸 속도를 조정하도록 한다.

room_speed = GAME_SPEED;

But the difficult part is that everywhere in you code you must take this speed into account. So e.g. you must make the speed with which the instances move dependent on the variable GAME_SPEED and similar for animation speeds, particle motion, background scrolling, etc. This is a bit of additional work but will pay off later. (Best think of speed in terms of pixels per second rather than pixels per time step.)

ios 미지원 항목