2D 게임을 개발 중이며 많은 스프라이트가 있습니다. 3D 애니메이션과 모델을 사용하여 2D로 렌더링하여 "폴 아웃"또는 "Diablo"가 보이도록했습니다. 손으로 그리는 것보다 쉽습니다.
나는 이미 프레임 속도를 15fps로 줄여야했다. 그러나 24 프레임이 매우 매끄럽게 보였기 때문에 슬 sad습니다.
내가 한 두 가지 이유가 있습니다.
1) HDD 공간을 줄입니다. 이미지가 적을수록 총 게임 수가 줄어 듭니다.
2) RAM 소비를 줄입니다. 로드 할 이미지 수가 적을수록 RAM 제한이 부풀려지는 문제를 피할 가능성이 높습니다.
그러나 HDD 공간과 RAM 모두에서 이미지를 압축하는 방법이 있다면 그렇게 할 것입니다. 나는 전에 그것을 테스트했으며 RGBA8888에서 RGBA5555로 줄 때 품질에 변화가 없으며 대부분 TexturePacker 프로그램에서 RGBA4444로 변환 할 때 약간의 타격을받습니다. SFML은 어떤 유형의 .PNG 이미지 유형에 관계없이 동일한 양의 메모리를 사용하는 것으로 보이므로 현재이 작업을 수행하지 않습니다. 나는 그것을 다르게로드하는 방법을 연구했지만 주제에서 아무것도 찾지 못했습니다.
2D 비디오 게임을 처리하는 방법에 대해 많이 읽었습니다. 합의는 압도적입니다. 스프라이트를 더 큰 질감으로 포장하여 뛰어난 성능을 발휘하십시오! 그래서 TexturePacker를 사용하여 작은 스프라이트를 훨씬 큰 스프라이트 시트로 포장합니다.
그러나 캐릭터 당 10-15 애니메이션, 5 방향 이동 및 애니메이션 당 15-40 프레임 (아마도 평균 24)을 계획하고 있습니다. 15 개의 애니메이션, 5 개의 방향 및 애니메이션 당 평균 24 프레임; 문자 당 1800 개의 개별 프레임입니다. 스프라이트 시트에 포장 된 경우, 그 대신 75 개의 이미지 만 있습니다. (방향마다 15 애니메이션, 애니메이션 당 하나의 스프라이트 시트. 15 * 5)
게임에서 거대한 보스 캐릭터 한 명을 위해 스프라이트 시트를 사용할 수 없으며 한 번에 한 이미지에 간단히로드하는 방법을 프로그래밍해야합니다. 아직 성능을 위해이 작업을 수행 할 수 있는지 모르겠습니다.
캐릭터의 경우 이미 스프라이트 시트에 포장합니다. 한 명의 캐릭터가 걸어 다니는 경우가 많지만 때로는 정지합니다. 그러나, 나는 그 캐릭터에 대한 모든 텍스처를 미리로드하는 대신 텍스처를 교체하는 잘못 생각한 코드에 기인한다고 생각합니다.
텍스처를 미리로드하려면 스프라이트 시트에 적합합니다. 각 캐릭터마다 1800 개의 작은 이미지를 미리로드하는 것은 나쁜 생각이라고 생각합니다.
그러나 한 번에 하나씩 메모리에 스트리밍하는 것이 매우 빠르다고 생각하므로 한 번에 메모리에 단일 이미지 만 있으면됩니다. 이것은 주어진 순간에 각 문자가 45 + MB 대신 몇 KB를 소비한다는 것을 의미하지 않습니까?
스트리밍 속도가 엄청나게 빨라야하고 (초당 15 개의 이미지가 메모리로 들어오고 나가고 렌더링되는 속도) 이미지가 매우 작을지라도 캐릭터 스프라이트 시트를로드하는 것이 더 좋습니다. 대신 메모리에. 그러나 어쨌든 더 큰 보스 캐릭터를 위해 단일 이미지 스트림과 같은 렌더링 시스템을 코딩해야합니다.
나는 실험을 해왔지만 간단한 과정은 아니다. 특히 그래픽을 다루지 않는 게임 엔진의 다른 부분에서 작업하고 있다는 사실을 감안할 때.