Как перемещать фоновые изображения бесконечно в iOS coco2d

Мне нужно перемещать фоновые изображения в iOS Coco2d, но у меня есть несколько трудностей. Я пробовал некоторые решения, предоставляемые на некоторых веб-сайтах, но не добился успеха в их работе. Ниже приведен код, над которым я сейчас работаю: –

Фон движется плавно в первый раз, но после этого он не работает должным образом:

Код в функции init: –

bg1 = [CCSprite spriteWithFile: @"bg1.png"]; bg1.anchorPoint = CGPointZero; [self addChild:bg1 z:-2]; bg2 = [CCSprite spriteWithFile: @"bg1.png"]; [self addChild:bg2 z:-3]; bg2.anchorPoint = CGPointMake(480, 0); // schedule a repeating callback on every frame [self schedule:@selector(nextFrame:) interval:.4f]; 

 - (void) nextFrame:(ccTime)dt { id actionMove = [CCMoveTo actionWithDuration:.4 position:ccp(bg1.position.x - 100 * dt, bg1.position.y)]; //winSize.height/2)]; id actionMove1 = [CCMoveTo actionWithDuration:.4 position:ccp(bg2.position.x - 100 * dt, bg2.position.y)]; //winSize.height/2)]; id actionMoveDone = [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)]; [bg1 runAction:[CCSequence actions:actionMove,actionMoveDone, nil]]; [bg2 runAction:[CCSequence actions:actionMove1,actionMoveDone, nil]]; } -(void)spriteMoveFinished:(id)sender { CCSprite *sprite = (CCSprite *)sender; if(sprite == bg1) { if (bg1.position.x < -480) { [self removeChild:bg1 cleanup:NO]; bg1.position = ccp( 480 , bg1.position.y ); [self addChild:bg1 z:-2]; } } else if(sprite == bg2) if (bg2.position.x < -480) { [self removeChild:bg2 cleanup:NO]; bg2.position = ccp( bg1.position.x+ 480 , bg1.position.y ); [self addChild:bg2 z:-3]; } } } 

Попробуйте это, убедитесь, что вы перевернули фон 2.

  #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) #define MM_BG_SPEED_DUR    ( IS_IPAD ? (6.0f) : (2.0f) ) -(void)onEnter { [super onEnter]; [self initBackground]; [self schedule: @selector(tick:)]; } -(void)initBackground { NSString *tex = @"BG/Background.png";//[self getThemeBG]; mBG1 = [CCSprite spriteWithFile:tex]; mBG1.position = ccp(s.width*0.5f,s.height*0.5f); [self addChild:mBG1 z:LAYER_BACKGROUND]; mBG2 = [CCSprite spriteWithFile:tex]; mBG2.position = ccp(s.width+s.width*0.5f,s.height*0.5f); mBG2.flipX = true; [self addChild:mBG2 z:LAYER_BACKGROUND]; } -(void)scrollBackground:(ccTime)dt { CGSize s = [[CCDirector sharedDirector] winSize]; CGPoint pos1 = mBG1.position; CGPoint pos2 = mBG2.position; pos1.x -= MM_BG_SPEED_DUR; pos2.x -= MM_BG_SPEED_DUR; if(pos1.x <=-(s.width*0.5f) ) { pos1.x = pos2.x + s.width; } if(pos2.x <=-(s.width*0.5f) ) { pos2.x = pos1.x + s.width; } mBG1.position = pos1; mBG2.position = pos2; } -(void)tick:(ccTime)dt { [self scrollBackground:dt]; } 

Я думаю, что этот способ немного проще. Вы инициализируете фоны в init и переместите их в update .

В методе init:

 // position backgrounds CCSprite *bg1 = [CCSprite spriteWithSpriteFrame:spriteFrame]; CCSprite *bg2 = [CCSprite spriteWithSpriteFrame:spriteFrame]; CCSprite *bg3 = [CCSprite spriteWithSpriteFrame:spriteFrame]; bg1.anchorPoint = ccp(0, 0); bg1.position = ccp(0, 0); bg2.anchorPoint = ccp(0, 0); bg2.position = ccp(bg1.contentSize.width-1, 0); bg3.anchorPoint = ccp(0, 0); bg3.position = ccp(2*bg1.contentSize.width-1, 0); _backgrounds = @[bg1, bg2, bg3]; [self addChild:bg1 z:INT_MIN]; [self addChild:bg2 z:INT_MIN]; [self addChild:bg3 z:INT_MIN]; 

В методе обновления:

 // endless scrolling for backgrounds for (CCSprite *bg in _backgrounds) { bg.position = ccp(bg.position.x - 50 * delta, bg.position.y); if (bg.position.x < -1 * (bg.contentSize.width)) { bg.position = ccp(bg.position.x + (bg.contentSize.width*2)-2, 0); } } 

Примечание: код для Cocos2d 3.0

  • Правильный перезапуск / повторная инициализация полуэлемента
  • Cocos2d 2.0: значение и использование CC_ENABLE_GL_STATE_CACHE
  • Добавление Cocos2D только в уже существующий проект?
  • Графические эффекты, такие как эластичные щупальца в Contre Jour
  • cocos2d dealloc сцены никогда не вызывается после заменыScene
  • Цель C - получить следующий день с сегодняшнего дня (завтра)
  • PivotJoints с трением и ограничениями в Cocos2d V3 (бурундук)
  • Как создать многоуровневую игру с Cocos2D (iOS)
  • Как удалить шаблоны cocos2d?
  • Opengl ES 1.x светящийся эффект в iOS
  • Spritesheet с Cocos2d не отображает ничего
  • Interesting Posts

    Узнать позицию подсмотра по отношению к виду

    AFNetworking 2.0 и использовать кеш только в автономном режиме

    Подавлять предупреждения Valgrind от iOS SDK

    Захват информации из UIWebView

    Могу ли я указать ограничение AutoLayout на iOS для расстояния до ближайшего видимого соседа?

    IOS. Запуск фоновой задачи для обновления местоположения пользователя с помощью быстрой

    Ошибка сборки XCode при переключении с iphone на pad или наоборот

    Выполнение завитущих действий в Objective-C

    Как я могу запретить изменять размер ширины UILabel sizeToFit?

    Facebook добавляет пользователей и администратора тестера: (ожидает), что это значит?

    Это не позволит мне создать выход

    Как использовать cocoapod для включения общей структуры как для приложения iOS, так и для расширения часов

    обнаруживать длительное нажатие на кнопку возврата UINavigationItem

    Что такое быстрый эквивалент _cmd?

    Tableview UiDesign complex

    Давайте будем гением компьютера.