편집 : 세 개의 타일 레이어가 전체 화면을 채우는 경우에도 150+ fps를 얻었으므로 두 번째 방법을 선택했습니다.XNA에서 2D 타일 게임 렌더링을 최적화하는 좋은 방법은 무엇입니까?
EDIT 2 : 정점 버퍼 오브젝트에 대해 많이 읽었고 정적 지오메트리에 얼마나 유용할까요? 2D 타일을 VBO로 변환하고 GPU 메모리에 저장하는 방법은 아직 모릅니다. 다른 누군가가 정적 인 기하학/쿼드를 빠르게 렌더링 할 방법을 찾고 있다면 이동하는 것처럼 보입니다.
저는 Super Meat Boy와 같은 게임을 만들고 배열 목록에 레벨 타일을 저장하고 렌더링해야하는지 카메라 경계 범위 테스트를 수행하는 것이 더 빠르고 더 빠른지 궁금합니다.
foreach(Tile tile in world.tiles) {
if(Overlap(camera.bounds, tile))
render(tile);
}
또는 2 차원 배열은 모든 그리드 광장을 저장하는 것입니다 만 더 나은 카메라 경계 사이에 떨어져 읽기?
int left = (int)(camera.position.x - camera.width/2);
int right = (int)(camera.position.x + camera.width/2) + 1;
int top = (int)(camera.position.y - camera.height/2); // WHY XNA DO YOU UPSIDE DOWN!!!
int bottom = (int)(camera.position.y + camera.width/2) + 1;
for(int x = left; x < right; x++) {
for(int y = top; y < bottom; y++) {
render(world.tiles[x][y]);
}
}
카메라는 후자의 방법을 사용하여 읽으면 2300 개 홀수 타일하지만 레벨의 모든 타일 나아와 중복 검사를하고 화면에 64 개 * 36 타일을 맞출 수? 인접한 타일을 더 큰 쿼드에 결합하고 질감을 반복하는 것에 대한 대답을 읽었습니다. (텍스처 아트 라이트를 사용하고 있기는하지만 텍스처에서 영역을 반복하는 방법을 모르겠습니다.)
건배!
렌더링은 무엇입니까? Spritbatch 시작/끝내기를 원하십니까? –
2D 렌더링 용 카메라는 무엇이 필요합니까? – kunjee
@Cyril ALFARO Yeh 일괄 처리 시작과 끝은이 루프 전후입니다. – Mazk1985