Нет координации между слоями, пока Bakground движется с разной скоростью - PullRequest
13 голосов
/ 13 марта 2012

Я разрабатываю игру для iPhone с использованием COCOS2d Framework и Objective-C (в альбомном режиме / режиме просмотра).

Для игры я использую фон с четырьмя слоями («Небо» сверху, «Гора» под небом, «Холм» под горой и крайний план переднего плана ниже). Здесь мне нужно переместить каждый слой фона с разной скоростью, например, «Небо» должно двигаться медленнее, чем «Гора», «Гора» должно двигаться медленнее, чем «Гора», а «Гора» должно двигаться медленнее, чем передний план.

Пока я двигаю каждый слой с разной скоростью, игра испытывает разрыв между координацией слоев.

Я попытался решить это с помощью логики, такой как: увеличение размера изображения / слоя (ширины) в соответствии с его скоростью, чтобы каждый слой заканчивался и снова начинал работать с координацией. Не удалось заставить его работать.

Это мой код для перемещения фона:

 -(void) backgroundmoving
{

 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
  //return kDevice_iPad;

  // Code for Each Layer's Moving Speed FOR iPad
  bk_f -=1.0;
  bk_f1 -=1.4;
  bk_f2 -=1.8;
  bk_f3 -=2.2;
 } else {

  // Code for Each Layer's Moving Speed FOR iPhone
  bk_f -=0.2;
  bk_f1 -=0.4;
  bk_f2 -=0.6;
  bk_f3 -=0.8;

 }

 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

  //return kDevice_iPad;
  if (bk_f <= -920*1.1) {bk_f=0;}
  if (bk_f1 <= -920*1.1) {bk_f1=0;}
  if (bk_f2 <= -920*1.1) {bk_f2=0;}
  if (bk_f3 <= -920*1.1) {bk_f3=0;}
  if (bk_f4 <= +920*1.1) {bk_f4=0;}
  } else {
  if (bk_f <= -480*2) {bk_f=0;}
  if (bk_f1 <= -480*2) {bk_f1=0;}
  if (bk_f2 <= -480*2) {bk_f2=0;}
  if (bk_f3 <= -480*2) {bk_f3=0;}
  if (bk_f4 <= +480*2) {bk_f4=0;}


 }

 _level_bkgrnd.position = ccp(bk_f, 0);
 _level_bkgrnd1.position = ccp(bk_f1, 0);
 _level_bkgrnd2.position = ccp(bk_f2, 0);
 _level_bkgrnd3.position = ccp(bk_f3, 0);

}

Приведенный выше код дает мне фоновую проблему. Предоставляю ссылки на скриншоты для справки:

1) http://screencast.com/t/seUjXClz

2) http://screencast.com/t/8tHq2KYnnMa

Любая помощь, указывающая мне правильное направление, будет принята с благодарностью.

Заранее спасибо:)

Ответы [ 2 ]

1 голос
/ 19 марта 2012

cocos2d имеет встроенную поддержку для этого, посмотрите пример кода с прокруткой Parallax. http://www.cocos2d -iphone.org / архив / 22 * ​​1003 *

0 голосов
/ 26 марта 2012

Исходя из вашего вопроса и снимков экрана, я интерпретирую вашу проблему так, что у вас возникают проблемы с беспрепятственной петлей ваших слоев. amleszk был прав, указав вам на прокрутку параллакса. Это то, что вы пытаетесь достичь здесь, и, похоже, ваш подход отключен. Я думаю, что есть проблема с пониманием того, что вы подразумеваете под разрывом между уровнями координации. Работайте над этим 1 слой за раз. Сделайте так, чтобы передний план плавно зацикливался, затем переходите к следующему слою и т. Д. Ваши слои не будут повторяться одновременно, так как они движутся с разными скоростями и достигнут конечных точек в разное время. Из ваших скриншотов видно, что более быстрые движущиеся слои не зацикливаются, пока ваш самый медленный движущийся слой не начнет свой цикл. Я знаю, что вы пытались бороться с этим путем изменения ширины слоя, чтобы компенсировать это, но было бы чище, проще и лучше в целом беспокоиться о каждом слое независимо. Но это только мое мнение.

Если ваша проблема состоит в том, что ваши зацикленные слои имеют линию между спрайтами или небольшим дрожанием, то быстрое решение, которое помогло мне для дрожания / вспышек между зацикленными спрайтами, было добавление CCDirectorProjection2D к выражению init:

-(id) init
{
    if( (self=[super init]))
    {
        [[CCDirector sharedDirector] setProjection:CCDirectorProjection2D];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...