зацикливание спрайта по вертикали

Примечание: для этого я использую программу под названием spritebuilder, которая позволяет мне создавать игру с меньшим количеством кода, чем обычно требуется. Если вы знаете решение, состоящее из всего кода, то обязательно поделитесь им :)

Кроме того, для этого вопроса я следил за учебником по этой ссылке: Создайте свой собственный клон Flappy Bird. Просто прокрутите вниз до части, которая говорит: «Замкните землю».

Итак, вот моя проблема. В настоящее время я работаю над игрой, и я создал камеру, которая прокручивается по вертикали со спрайтом, который я создал, однако мне нужно определенное изображение для зацикливания. Когда изображение покидает нижнюю часть экрана, я бы хотел, чтобы оно бесконечно возвращалось к верхней части экрана. Для этого я создал два одинаковых изображения (в данном случае это кора дерева). Один будет на экране, а другой будет за кадром, поэтому, когда первое изображение покидает экран, второе заменяет его (бесшовно). Я создал два объекта для изображений и присвоил им имена _ground1 и _ground2, а также создал NSArray для их хранения. (Пожалуйста, обратитесь к ссылке выше, если она несколько запутана) Вот код, который я имеют:

CCNode *_ground1;
CCNode *_ground2;
NSArray *_grounds;

  for (CCNode *ground in _grounds) {
    // get the world position of the ground
    CGPoint groundWorldPosition = [_physicsNode convertToWorldSpace:ground.position];
    // get the screen position of the ground
    CGPoint groundScreenPosition = [self convertToNodeSpace:groundWorldPosition];
    // if the left corner is one complete width off the screen, move it to the right
    if (groundScreenPosition.y <(-1 * ground.contentSize.height)) {
        ground.position = ccp(ground.position.x , ground.position.y + 2 * ground.contentSize.height);
    }

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


person user3413380    schedule 13.03.2014    source источник


Ответы (2)


Я также сделал этот проект, как указано выше. это работает нормально, но у вас есть ошибка при установке переменной в spritebuilder. в приведенном выше коде замените код как и попробуйте. вы только положить меньше, чем может быть это проблема.

 if (groundScreenPosition.y <=(-1 * ground.contentSize.height)) {
        ground.position = ccp(ground.position.x , ground.position.y + 2 * ground.contentSize.height);
    }
person Kirit Modi    schedule 13.03.2014

Вы используете объекты CCNode как _ground1и _ground2.

CCNode объекты обычно не имеют contentSize, they will return 0 unless you explicitly set them inSpriteBuilder`.

Убедитесь, что вы используете объекты CCSprite в SpriteBuilder и в своем коде.

Кроме того, в качестве дружеского совета вам также следует подумать о рефакторинге (переименовании) ваших спрайтов с более значимыми именами для вашего варианта использования, такими как, например, _treeBark1 и treeBark2.

person Tibor Udvari    schedule 13.03.2014