2011-03-07 1 views
0

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

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

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

ответ

2

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

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

EDIT

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

@ Андрей спасибо я думал, я бы использовать два спрайта – Dangermouse

+0

@ Андрей, мне нужно немного помочь, начиная с того, что я не уверен, что делать с подклассом ccnode, я знаю, что я наследую его от объекта, но я действительно не знаю, что делать. – Dangermouse

+0

@Dangermouse: я обновил ответ – Andrew

 Смежные вопросы

  • Нет связанных вопросов^_^