При скольжении спрайта, если спрайт исчезает со стороны, он будет переходить на противоположную сторону? - PullRequest
0 голосов
/ 07 марта 2011

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

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

        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];
            }
        }
    }

1 Ответ

2 голосов
/ 07 марта 2011

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

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

EDIT

@interface MyNode : CCNode
{
    CCSprite *sprite1;
    CCSprite *sprite2;
    CCSprite *currentSprite;
    bool isChanging; //indicates that now two sprites are visible
}
@end
...