자바에서 스프라이트 시트를 읽는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/297426

  •  08-07-2019
  •  | 
  •  

문제

나는 내 자신의 즐거움을 위해 기본 스프라이트 엔진을 쓰고 Java의 2D API로 더 나은 수로를 얻습니다. 현재 저는 투명한 배경을 가진 많은 별도의 .png 파일을 사용하여 다양한 스프라이트와 필요한 애니메이션 프레임을 나타냅니다. 대부분의 '실제'게임 개발 프로젝트는 단일 파일 내에 여러 스프라이트 또는 애니메이션 프레임을 포함하는 '스프라이트 시트'를 사용하는 것 같습니다. 또한, 기본 이미지 투명성 지원을 사용하는 대신 사람들은 종종 스프라이트 팔레트에 나타나지 않는 임의의 색상을 투명한 색상으로 지명합니다. 이와 같은 파일을 프로그래밍 방식으로 어떻게 관리합니까?

  • 한 스프라이트가 시작되고 다음 시작이 어디에서 시작되는지 어떻게 알 수 있습니까?
  • 투명성을 어떻게 처리합니까?

내가 여기서 생각하지 않은 다른 요인이있을 수 있으므로, 내가 생각하거나 사람들이 제안을 할 때 위의 목록에 추가 할 수 있습니다 (의견에서 그렇게하십시오).

도움이 되었습니까?

해결책

나는 현재 스프라이트를 (선택적으로 애니메이션) 포즈 모음으로 저장하는 간단한 스프라이트 편집기에 의해 생성 된 XML 파일을 사용하여 프레임이나 셀 모음입니다. 프레임 프레임은 프레임의 x 및 y 오프셋, 시트, 셀 너비 및 높이 및 변환 (크기/회전/색조 등)과 같은 프레임당 정보를 저장합니다. 포즈는 개별 프레임 및 애니메이션 정보 (예 : 속도)를 저장하고 프로그램에서 쉽게 식별 할 수있는 포즈 이름 (Hero.pose = Sprite.pose [ "Standing_right"]). 스프라이트는 각면의 방향에 대한 포즈와 같은 여러 포즈를 취하는 문서 루트 역할을합니다.

이전에 사용한 덜 유연한 대안은 셀과 시트의 고정 크기를 지정하고 이러한 값을 기준으로 프레임 오프셋 및 크기를 계산하는 것이 었습니다 (예 : 너비는 항상 32 픽셀이므로 세 번째 스프라이트는 32 * 2입니다). 나중에 고정 된 셀 크기에 맞지 않는 스프라이트에 대해 파일 이름 (예 : sprite_name_32x64.png)에 이러한 치수를 지정하기 시작했습니다. 나는 새로운 접근 방식을 더 좋아합니다. 특히 나에게 대부분의 값을 채우고 다른 스프라이트의 템플릿으로 스프라이트를 사용할 수있는 단순한 편집기가 있습니다.

PNG 이미지에 직접 저장된 알파 및 투명성 정보를 사용하므로 다른 곳에 저장하는 것에 대해 걱정할 필요가 없습니다. 다른 접근 방식은 스프라이트 당 고정 된 값을 선택하고 어딘가에 보관하는 것이지만 자세에서 가장 왼쪽 픽셀을 사용하는 것입니다. 항상 비어 있음을 알고, 스프라이트 마스크를 사용하거나 사용하는 경우 특정 팔레트 항목을 사용하십시오.

다른 팁

자바에 관한 것이 아니라 일반적으로 모든 스프라이트를 같은 크기로 만들 수 있습니다. 따라서 단순한 루프로 게임 (또는 앱)에서 스프라이트를 생성 할 수 있습니다.

그러나 다양한 크기의 스프라이트의 경우 스프리 시트 크기에 문제가있을 수 있습니다 (예상보다 클 수 있음). 따라서 스프리 시트의 XML 또는 JSON 파일을 정의하여 코드에서 스프라이트 이미지를 찾아야합니다. 스프라이트 시트 편집기를 사용할 수 있습니다 (많은 것들이 있습니다. 스프라이트 마스터) 스프라이트 시트를 생성하고 데이터를 조정하는 빠르고 쉬운 방법.

각 시퀀스의 크기와 수를 알고 스프라이트 시트를 만드십시오.

시트의 버퍼링 된 이미지를 잡고 다음과 같은 것을 사용하십시오.

currentframe=spritesheet.getSubimage(x, y, w, h); 

당신의 X와 Y는 당신이 켜진 프레임에 따라 변경됩니다. 너비와 높이를 동일하게 유지하여 일을 쉽게 만들 수 있도록하십시오.

전체 게임을 한 시트에 유지하는 것을 잊어 버리십시오. 견과류이며 관리하기 어렵습니다. 각 애니메이션 시퀀스에 새 PNG를 사용하십시오. 공간 저장에 대한 항문이라면 오른쪽 애니메이션 만 움직이고 버퍼링 된 이미지를 실시간으로 뒤집기 위해 왼쪽으로 이동하십시오.

Java는 알파가있는 PNG 파일을 읽으므로 투명성 색상에 대해 걱정하지 마십시오. PNG로 모든 것을 그립니다. Photoshop 또는 Gimp를 사용하십시오.

java image type_int_argb에 대한 Google을 검색하십시오

글쎄, 그들 대부분은 사용자 정의이기 때문에 이러한 세부 사항은 구현 자에게 달려 있습니다. 일반적으로 높이/폭과 인코딩, 투명성 등의 세부 사항이 포함 된 헤더 정보로 파일을 시작합니다.

하나의 파일에 비해 여러 파일을 열고 읽는 것이 비용이 많이 들기 때문에 많은 시간이 하나의 파일에 있습니다. 많은 게임 엔진은 단일 파일을 파일 시스템으로 취급하기 위해 0 압축 기능이있는 zip 또는 "zip like"파일을 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top