Как создать бесконечный прокручиваемый ландшафт с помощью CCParallaxNode от coco2d

Я создал горизонтальный прокручивающий ландшафт, используя CCParallaxNode. Однако, похоже, он не поддерживает бесконечную прокрутку в одном направлении. Как только первое изображение «заканчивается», фон светит. Добавление неограниченного количества изображений, конечно, не является вариантом. Я думал об обычном способе: добавление двух спрайтов для каждого слоя параллакса рядом друг с другом и просто перемещение одного в конец другого в соответствующее время.

Однако у меня есть две проблемы:

  • дочерние узлы параллакса не могут казаться повторно позиционируется
  • положение дочерних узлов vs насколько далеко они продвинулись, похоже, нет отношения к коэффициенту параллакса

Вот как я установил узел параллакса, используя 4 спрайта с одинаковой горизонтальной шириной:

CGPoint topOffset = CGPointMake(0, screenSize.height);
CGPoint midOffset = CGPointMake(0, screenSize.height / 2);
CGPoint downOffset = CGPointZero;

// Create a parallax node and add the sprites to it.
CCParallaxNode* paraNode = [CCParallaxNode node];
[paraNode addChild:para1 z:1 parallaxRatio:CGPointMake(0.5f, 0)
positionOffset:topOffset];
[paraNode addChild:para2 z:2 parallaxRatio:CGPointMake(1, 0) positionOffset:topOffset];
[paraNode addChild:para3 z:4 parallaxRatio:CGPointMake(2, 0) positionOffset:midOffset];
[paraNode addChild:para4 z:3 parallaxRatio:CGPointMake(3, 0) positionOffset:downOffset];
[self addChild:paraNode z:0 tag:ParallaxSceneTagParallaxNode];

Кто-нибудь преуспел в использовании CCParallaxNode для беспрепятственной прокрутки?

4 голоса | спросил LearnCocos2D 31 J000000Saturday10 2010, 00:07:06

1 ответ


2

Сначала вам нужно иметь столько разделов, сколько необходимо, чтобы вы могли заполнить размер экрана плюс один. Поэтому, если у вас ширина экрана 480 и ширина раздела 480, вам нужно повторить две секции. Если ширина раздела составляет всего 240, вам понадобится 3 раздела.

Я бы отступил от использования этого CCParallaxNode и теперь просто прокручиваю один слой. Вы можете сделать это путем подкласса Layer, чтобы сделать EndlessLayer, а затем, когда он скопирует вас, вы переместите разделы соответственно и переместите плавающий дополнительный раздел слева направо, если вы прокрутите правую (или левую, если вы двигаетесь влево). Как только у вас есть это, это кусок пирога, чтобы просто сложить как можно больше этих новых типов слоев друг над другом и просто переместить каждую из них на часть того, что движется ближайший слой. Вы можете даже сгруппировать это поведение в новый класс, например EndlessParallaxNode.

ответил CJ Hanson 29 +04002010-10-29T18:44:52+04:00312010bEurope/MoscowFri, 29 Oct 2010 18:44:52 +0400 2010, 18:44:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132