2009-06-02 10 views
10

W XNA, kiedy należy renderować zawartość gry za pomocą więcej niż jednego pakietu spritebatch? Do tej pory nigdy nie korzystałem z więcej niż jednego i nigdy nie zauważyłem żadnych wad tego podejścia.Kiedy korzystać z wielu partii sprite w XNA?

W jakich sytuacjach zalecane lub nawet konieczne byłoby używanie wielu spritebatchów?

Odpowiedz

7

Istnieje bardzo niewiele przypadków, w których konieczne jest użycie wielu SpriteBatches. Jednym z przykładów, który często rzuca mi się w oczy, jest sytuacja, w której chcesz zastosować różne postprocessing/renderstates do różnych zestawów duszków, co wymaga osobnego zestawu SpriteBatch dla każdego zestawu.

Zazwyczaj za dobrą praktykę uważa się używanie tylko jednej partii, o ile jest to możliwe, ponieważ losowanie jak największej ilości rzeczy w jednej partii jest znacznie wydajniejsze niż rozkładanie pracy na wiele partii. Dodatkowo, ponieważ możesz kontrolować tylko porządek sortowania w ramach jednego SpriteBatch, może to utrudnić (lub uniemożliwić) kontrolowanie głębokości pomiędzy duszkami z różnych partii.

W skrócie: istnieją wyobrażalne sytuacje, w których może chcesz to zrobić, ale to nie wszystko, co powszechne i ogólnie należy trzymać się za pomocą jednego SpriteBatch chyba wiesz, że nie można osiągnąć to, co chcesz bez użycia więcej niż jednego.

+0

standardowy przypadek użycia może wymagać użycia innego TextureAddressMode, takiego jak Wrap – markmnl

0

Może być również łatwiej w przypadku, gdy DrawableGameComponents ma zestaw SpriteBatch na DrawableGameComponent zamiast próbować go przekazać.

2

Here to dobry przykład na to, kiedy należy używać więcej niż 1 SpriteBatch (blog Shawna jest - jak zwykle - ostatecznym źródłem).

SpriteBatch nie wykonuje żadnego rysunku, dopóki nie zostanie wywołana metoda End. Oznacza to, że możesz rozpocząć kilka pokrywających się partii z różnymi ustawieniami, narysować sprite'y w dowolnej kolejności, używając dowolnej kombinacji instancji serii i kontrolować, w jakiej kolejności cała zawartość każdej partii zostanie narysowana przez uporządkowanie twoich wywołań Końcowych.

Należy zauważyć, że w tym przykładzie wynosi około optymalizacji wydajność na miejscu z alfa-mieszania i ikonek posortowanych według głębokości. Kiedy (a raczej , jeśli) napotkasz problemy z wydajnością, może być coś do zyskania przez użycie wielu SpriteBatches. Do tego czasu prawdopodobnie lepiej będzie, jeśli będzie to proste.

Powiązane problemy