Нужна помощь с непрерывной прокруткой фона на iphone - PullRequest
0 голосов
/ 27 мая 2011

Привет, я новичок в iphone .. Теперь я пытаюсь непрерывно прокручивать свой фон. Я добавил изображение в детстве. Теперь код, который я использую для непрерывной прокрутки, выглядит так:

[bg1 setPosition:ccp(310, 160)];
CCSprite *bg2 = [CCSprite spriteWithFile:@"lines.jpg"];
[bg2 setPosition:ccp(880, 160)];
id enterRight = [CCMoveTo actionWithDuration:4 position:ccp(310, 160)];
id exitLeft = [CCMoveTo actionWithDuration:4 position:ccp(-310, 160)];
id reset = [CCMoveTo actionWithDuration:0 position:ccp(880, 160)];
id enterRight2 = [CCMoveTo actionWithDuration:4 position:ccp(310, 160)];
id exitLeft2 = [CCMoveTo actionWithDuration:4 position:ccp(-310, 160)];
id reset2 = [CCMoveTo actionWithDuration:0 position:ccp(880, 160)];
id seq1 = [CCSequence actions: exitLeft, reset, enterRight, nil];
id seq2 = [CCSequence actions: enterRight2, exitLeft2, reset2, nil];
[bg1 runAction:[CCRepeatForever actionWithAction:seq1]];
[bg2 runAction:[CCRepeatForever actionWithAction:seq2]];
[self addChild:bg1 z:-1 tag:1234];
[self addChild:bg2 z:-1 tag:2345];

Проблема, с которой я сталкиваюсь, заключается в том, что изображение непрерывно хорошо прокручивается, но при входе на экран они располагаются рядом друг с другом, но при прокрутке к другой стороне экрана возникает разрыв между этими двумя изображениями и имеет тенденцию расширяться по мере прокрутки изображения. Любая идея или предложение, почему это происходит? Еще кто-то сказал, что мы можем использовать обновление для фоновой прокрутки. Выглядит примерно так.

[self schedule: @selector(update:)];


- (void) update: (ccTime) dt
{
    float dy = scroll_speed_per_second * dt;
    [self setPosition:ccp(self.position.x,self.position.y + dy)];
}

Еще одна вещь, которую я хочу спросить ... Я могу прокручивать изображения, также используя верхний метод, но я не могу сбросить изображение обратно в его положение. Должен ли я вернуть ребенка обратно в его положение или весь кадр? Любая помощь будет оценена. Спасибо.

1 Ответ

1 голос
/ 27 мая 2011

heye Nick,

Мне кажется, я не совсем понимаю ваш код, и это тоже не очень хорошая практика ... что вы можете сделать, это использовать CCPlace.

Просто переместите ваш спрайтдо целевой позиции, а затем используйте ccplace для сброса вашей позиции спрайтов.

Вот так ...

cloud1=[Obstacle spriteWithFile:@"IT_Cloud1.png" type:CLOUD1];
[self addChild:cloud1 z:4];
cloud1.position=ccp(500,270);
id rptFrvr1=[CCRepeatForever actionWithAction:[CCSequence actions:
                                        [CCMoveTo actionWithDuration:7 position:ccp(-100,270)],
                                              [CCPlace actionWithPosition:ccp(500,270)],nil]];
[cloud1 runAction:rptFrvr1];



cloud2=[Obstacle spriteWithFile:@"IT_Cloud2.png" type:CLOUD2];
[self addChild:cloud2 z:1];
cloud2.position=ccp(700,280);
id rptFrvr2=[CCRepeatForever actionWithAction:[CCSequence actions:
                                              [CCMoveTo actionWithDuration:12 position:ccp(-200,280)],
                                              [CCPlace actionWithPosition:ccp(700,280)],nil]];
[cloud2 runAction:rptFrvr2];

не путайте с параметром "type" ... dat - это только моереализация ccsprite..u может просто использовать ccSprite spritewithfile:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...