Есть ли способ узнать, если спрайт покинул камеру сцены? или я должен сделать мои операции? :П
8
Класс Camera содержит объект Frustum с открытым методом pointInFrustum (точка Vector3), который возвращает значение true, если ваш спрайт находится в области усеченного пространства камеры. Вы также можете взглянуть на пользовательскую вики для других методов отбора. http://code.google.com/p/libgdx-users/wiki/Culling
Если вы создаете 2D-игру с плитками, вы можете легко реализовать свою собственную отбраковку, которая намного дешевле, так как вы можете выбирать только то, что вам нужно в вашем массиве плиток.
Вещи, которые вы должны знать:
Теперь мы можем рассчитать, сколько плиток нужно нарисовать.
viewport.width / tileWidth
viewport.height / tileHeight
Математика зависит от того, как все настроено, но очень проста. Например, имеет значение, если в центре экрана находится местоположение камеры, вверху слева или внизу слева.
Вы должны получить что-то вроде этого:
Преимущество этого по сравнению с проверкой, находится ли точка в пределах вашего усеченного конуса, заключается в том, что с последним вам нужно выполнять итерацию по каждой точке вместо использования какого-либо простого массива, в котором вы всегда выполняете итерацию по установленному количеству плиток, равному количеству горизонтальных плиток. * вертикальные плитки, которые на самом деле нужно рисовать. Таким образом, вы можете иметь огромные карты и при этом иметь хорошую частоту кадров. К сожалению, это становится все сложнее и сложнее при использовании 3D, но экспоненциально усложняется со свободой, которую пользователь получает с камерой. Вы можете представить себе камеру с фиксированной перспективой, которая движется вместе с персонажем, и ей нужна пара жестко закодированных переменных, чтобы выполнить те же трюки с массивом сеток, представляющих вашу карту.
источник
Просто используйте проверку ограничивающей сферы. (Вы можете рассчитать радиус с помощью Пифагора). Он быстр, как ад, а также работает с вращением. Это не идеально, но никогда не вызывает ложного отбора.
Для специальной оптимизированной версии Intersector имеет некоторые прямоугольники, содержащие методы rectanle, которые тоже могут работать. Но вам нужно рассчитать прямоугольник для камеры самостоятельно.
источник
Эта функция проверяет, является ли актер видимым (работает только для 2D). Работает во всех ситуациях, например, когда актер находится внутри группы.
источник