CCParallax для движущегося фона

#objective-c #cocos2d-iphone

#objective-c #cocos2d-iphone

Вопрос:

У меня есть плиточная карта, и я хочу сделать озера лавы. Я хочу, чтобы какое-то изображение текстуры лавы на фоне медленно перемещалось по диагонали. Я мог бы сделать это с четырьмя изображениями размером 960×640 и переместить их все по диагонали и т.д. Но когда я это делаю, между ними появляется черно-белая линия…

… и кто-то предложил мне «CCParallax». Я никогда не использовал его и не уверен, действительно ли он может достичь желаемого эффекта.

Также обратите внимание, что при перемещении игрока по карте параллакс также должен имитировать это и т. Д.

Итак, мой вопрос в том, что бы вы сделали для этого эффекта? Четыре зацикленных изображения или «CCParallax»?

Ответ №1:

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

Использование четырех изображений размером 960×640 является расточительным. Просто сделать несколько озер под фоном, это излишне и негативно скажется на производительности.

Решение немного зависит от того, насколько велики озера. Например, если это плитки размером всего 1 или 3×3, вы можете добавить текстурированный спрайт под каждым озером. Если, с другой стороны, ваша tilemap состоит в основном из нескольких узких дорожек, а остальное — лавовые озера, тогда вам нужен другой подход.

Возможно, вы захотите попробовать GL_REPEAT, чтобы повторить текстуру одного спрайта в определенной области. Это позволяет использовать относительно небольшую текстуру, например 64×64, которая будет повторяться над указанным вами прямоугольником.

Затем вы можете изменять положение спрайта в каждом кадре для прокрутки текстуры. Каждый раз, когда спрайт перемещается на 64 пикселя по горизонтали или вертикали, вы вычитаете 64 пикселя (sprite.contentSize.width) из положения спрайта, чтобы вернуть его в исходное состояние. Это означает, что спрайт никогда не будет перемещаться дальше, чем на 64 пикселя от своей начальной позиции в любом направлении, но вы все равно получаете плавную прокрутку.

Комментарии:

1. Как вы думаете, было бы лучше, если бы у меня были анимированные плитки для лавовых озер? Потому что недавно мне удалось анимировать свои плитки (их прямые координаты текстуры обновляются каждые X кадров и т. Д.)… Кстати, спасибо. Я попробую это.

2. Я протестировал ваш метод GL_REPEAT с изображением 960×640 (сетчатка). Кажется, что между каждым изображением есть определенное пустое пространство (около 40 точек). Почему это так?

3. О, я забыл упомянуть, с GL_REPEAT текстура должна быть в степени двойки. Поэтому вам нужно использовать 256×32 или 1024×1024 или любую другую мощность двух размеров, чтобы убрать пустые области.

4. Это также исправит проблему плохого качества? Я попробую ~

5. Хм, я считаю, что проблема с интервалом решена, но по какой-то причине мое изображение все еще неровное / плохого качества D: