2012-05-23 2 views
1

직접적인 도움 이외의 조언을 찾고 있습니다.Platformer 타일 엔진 - 긴 타일로 할 일에 대한 조언

저는 XNA에서 8 비트 플랫폼 게임을하고 있습니다. 나는 이미 160 시간을 이미 침몰 시켰고, 나는 가지고있는 엔진에 문제가 생기기 시작했습니다. 기본적으로 XNA platformer 데모의 수정/수정 된 버전입니다. 내 타일의 전부 또는 대부분은 32x32이지만 일부는 책상처럼 64x32px 크기입니다. 일부는 식물처럼 폭이 32 인치, 높이가 64입니다.

나는 XNA 자습서의 작성자가 타일 매핑을 수행하는 방식과 비슷한 시점에 한 번에 .png 만 GPP로 보내고 있습니다. 애니메이션 스프라이트의 경우 문자의 다른 프레임 타일 맵을 사용합니다. 타일 ​​맵 데이터의 경우 XNA 자습서와 마찬가지로 텍스트 파일을 읽습니다.

넓고 키가 큰 타일을 어떻게 수용해야합니까? 나는 두 개의 계층화 된 타일 시스템을 만들어야합니까? (나는 유지 - 단순 - 어리석은 규칙을 준수해야한다고 생각했습니다)?

지금 나는 넓은 타일을 확장하기 위해 투명 타일을 사용하고 있습니다.

의자 데스크 :

chair http://dl.dropbox.com/u/8446900/game_screen_desk.png

..... 
...h. 
..d". 
##### 

공장과 의자 :

desk http://dl.dropbox.com/u/8446900/game_screen_plant.png

..p...h. 
..,...,. 
######## 

의자는 '시간'이되고, 'D'는 책상입니다, 'p'는 식물이고 ','는 투명한 배경 타일입니다 (상호 작용 없음 사용자와 함께). '' '는 사용자가 서서 사용할 수있는 투명한 타일을위한 것입니다 (책상 확장). 보시다시피 배경에 구멍이있는 것 같습니다.

실제 타일 맵을 만들어야합니까? 하나의 대형 PNG로 모든 것을 결합 할 수 있습니까? 내가 취할 수있는 또 다른 옵션은 실제로 두 개의 서로 다른 타일로 각각의 너비 또는 높이 타일을 자르는 것입니다. 어떻게 전문가가이 작업을 수행합니까? 하루의 플랫 포머가 실행됩니다

UPDATE :.. 대답을 검토 한 결과,이 시트에 스프라이트를 팩 매우 유용한 도구를 발견

http://spritesheetpacker.codeplex.com/

업데이트 : 새로 업그레이드 된 타일 엔진은 훨씬 빠르고 간단합니다. 아래 조언은 훌륭했습니다. 권장.

답변

5

먼저 - 특수 너비/높이 타일을 사용하지 마십시오. 아티스트가 큰 개체를 하나의 타일로 분할하여지도 편집기에서 다시 구성합니다. 모든 타일은 올바르게 구성 할 수 있도록 알파 채널이있는 PNG 여야합니다. 그걸 염두에 유지

, 내 권장 사항은 다음과 같습니다

  1. 귀하의 타일 다른 개체의 일부를 미리 구성 만 하나의 타일로 구성되어야한다, 책상의 왼쪽 부분이 하나의 타일은 예를 들어 의자가없는 오른쪽 부분은 그 뒤에있는 의자가있는 또 다른 하나입니다. (tilevalue = "dc", 아마도?)

  2. 단일 타일의 다중 레이어를 정의하고이를 뒤에서 앞으로 렌더링 할 수 있습니다.또한 여러 레이어에 대한 시차 요소를 정의 할 수 있으므로 두 레이어간에 시차 효과를 쉽게 얻을 수 있습니다. 물론 플레이어는 한 번에 한 레이어에 "존재"해야합니다. 그렇지 않으면 자신의 현재 위치에 사용할 충돌 지오메트리를 알 수 없습니다. 당신이 만드는 렌다 변경 횟수가 최소화되도록하지만 (정확히 spritesheet 같은) 컴파일 된 tilesheet -

또한 하나 개의 타일 당 텍스처를 만들해서는 안된다. 드로잉 호출마다 많은 변경을하는 것은 좋지 않습니다. 현재 텍스처, 드로잉 색 또는 그리기 호출에 영향을주는 다른 요소를 변경할 때마다 API, 드라이버 및 GPU 자체가 상태를 업데이트해야합니다. 빨리 추가됩니다.

이것은 문자와 레벨을 거대한 스프라이트 시트에 넣어야한다는 것을 의미하지 않는다는 것을 유의하십시오. 이는 다른 이유로 좋지 않습니다. 예를 들어 모든 레벨 관련 타일을 하나의 타일 시트에 넣고 영웅의 애니메이션 타일을 다른 타일과 하나의 (모든) 유사한 타일 또는 유사한 타일에 넣을 수 있습니다.

도움이 되었으면 좋겠다. 그렇지 않은 경우 더 자세히 설명해 드리겠습니다.

+0

롤, 저는 예술가입니다. 그건 문제가 아니야. 그래픽을 게임으로 가져 오는 것이 어떻습니까? 여러 개의 타일 또는 여러 개의 이미지를 하나의 큰 이미지로? 나는 RAM이 제약 조건 이었지만 지금은 그만한 가치가 있는지 궁금해합니다. 아마도 Windows Phone으로 이동하여 성능을 고려해야합니다. – montag

+0

내 진짜 질문은 각 항목이 XNA 콘텐츠 파이프 라인에 개별적으로 보내지는 것에 의해 얼마나 많은 cpu/ram이 낭비 되는가하는 점을 짐작할 수 있습니다. 각 항목을 개별적으로 GPU에 보내거나 큰 시트를 가지고 잘라내는 것이 더 낫겠습니까? – montag

+0

오, 확실히 하나의 스프라이트 시트. 다른 텍스처를 시도하고 바인딩 할 때마다 메모리가 낭비되는 것은 아닙니다. 렌더링 스테이트가 변경되고 값이 비싸기 때문입니다. – Ani