Проблема производительности двигателя плитки - PullRequest
2 голосов
/ 08 октября 2011

Я использую SFML и не могу найти объяснения о том, как работает библиотека, и у меня проблемы с производительностью. Я пытаюсь сделать карту тайлов из плиток 50х50, каждая из которых имеет ширину 20х20 пикселей. 1) Каждая плитка - это sf :: sprite, чье графическое изображение представляет собой просто большое изображение (мой набор плиток), на котором я установил суб прямоугольник 20x20. 2) Я просто перебираю общее количество плиток и использую App.Draw (Map [i] [j]); рисовать каждую плитку, и я использую объекты «вид», чтобы я мог перемещать вид вокруг

Теперь у меня очень низкий FPS (1 изображение в секунду), и мне интересно 2 вещи по сравнению с предыдущими пунктами. 1) Каждый ли sf :: sprite рисует время, потому что их изображение исходит из огромного обрезанного изображения? 2) Прав ли я зацикливаться на всем наборе плиток, даже на тех, которые я не вижу? Я предполагаю, что объект вида делает это так, чтобы тайлы, находящиеся вне поля зрения, не были пересчитаны напрасно

спасибо

1 Ответ

2 голосов
/ 09 октября 2011

Это обычно считается неправильным способом рендеринга карты тайлов.

Более правильный способ - создать большую текстуру, или, в данном случае, sf::Image, а затем рендерить свои плитки на эту текстуру,и затем рендеринг этой большой текстуры на экран.Бывают случаи, когда такой подход неосуществим, но в большинстве случаев он намного лучше.

Таким образом, вы рендерите каждую плитку только один раз, когда карта листов загружена, а затем вам нужно только отрендеритьбольшая текстура один раз для каждого кадра, в отличие от рендеринга 2500 отдельных плиток для каждого кадра.

Способ, которым SFML использует OpenGL, не подходит для большого числа вызовов Draw(), поэтому он помогает найти способы вызоваэто как можно меньше раз.

...