При скольжении спрайта, если спрайт исчезнет сбоку, он перевернется на противоположную сторону?

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

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

        for (int i =0; i<16; ++i) {
        MyNode *currentSprite = [c1array objectAtIndex:i];
        if (currentSprite.contentSize.height>=320 || currentSprite.position.y-currentSprite.contentSize.height/2<=0 ){
            MyNode *Bsprite = currentSprite;
            MyNode *Tsprite = currentSprite;
            Bsprite.scale = 1.0;
            Tsprite.scale = 1.0;

            if(currentSprite.position.y >=253){
            Bsprite.position = ccp(currentSprite.position.x,-35);
                [self addChild:Bsprite];
                Bsprite.visible = TRUE;
            }
            if (currentSprite.position.y <=0) {
                Tsprite.position = ccp(currentSprite.position.x,324);
                [self addChild:Tsprite];
                Tsprite.visible = TRUE;
            }
            MyNode *isChanging;
            if ((Tsprite.visible == TRUE && currentSprite.visible == TRUE) || (Bsprite.visible == TRUE && currentSprite.visible == TRUE)) {
                isChanging = TRUE;
            }
            if (isChanging == FALSE) {
                [self removeChild:Tsprite cleanup:YES];
                [self removeChild:Bsprite cleanup:YES];
            }
        }
    }

person Dangermouse    schedule 07.03.2011    source источник


Ответы (1)


Одним спрайтом не обойтись. Но у вас может быть два спрайта. В обычной ситуации, когда ваш спрайт скользит по экрану, будет виден только один спрайт. Но когда он достигнет границы, второй тоже будет виден. Когда второй полностью войдет в экран - убрать (или скрыть) первый.

Лучший способ реализовать это — создать подкласс CCNode, который будет содержать первый и второй спрайт и менять их местами при необходимости. Таким образом, вся ваша логика будет очень простой. Вы просто будете работать с одним CCNode (подклассом) и не будете думать о подкачке спрайтов - это сделает автоматически ваш класс

ИЗМЕНИТЬ

@interface MyNode : CCNode
{
    CCSprite *sprite1;
    CCSprite *sprite2;
    CCSprite *currentSprite;
    bool isChanging; //indicates that now two sprites are visible
}
@end
person Andrew    schedule 07.03.2011
comment
@Эндрю, спасибо, я думал, что мне придется использовать два спрайта - person Dangermouse; 07.03.2011
comment
@ Эндрю, мне нужна небольшая помощь, чтобы начать, так как я не уверен, как создать подкласс ccnode, я знаю, что я наследую его от объекта, но я действительно не знаю, что делать. - person Dangermouse; 08.03.2011
comment
@Эндрю, я получаю сообщение об ошибке в MyNode, я опубликую свой файл заголовка (.h), спрайт 1-15 — это все спрайты на странице, bSprite и Tsprite — это эквивалент спрайта 1 и спрайта 2 на странице. ваша версия. - person Dangermouse; 08.03.2011
comment
@Dangermouse: я не вижу в вашем коде ключевых слов @interface и @end - person Andrew; 08.03.2011
comment
@ Эндрю, я ввел их, и это не имело значения. Когда я опускаю ключевые слова, я также получаю меньше ошибок. - person Dangermouse; 10.03.2011
comment
@Dangermouse: Тогда я предлагаю вам изучить Objective-C, потому что вы не можете объявить интерфейс без ключевого слова @interface — это основная вещь в Objective-C. - person Andrew; 10.03.2011
comment
@ Эндрю, мне нужна помощь с заменой спрайта, я отредактировал код в вопросе. - person Dangermouse; 20.03.2011
comment
@Dangermouse: я предлагаю вам задать новый вопрос и лучше объяснить вашу проблему - person Andrew; 20.03.2011