2012-07-07 58 views
0

我有一個問題,我想製作一個動畫,將我的CCSprite移動到屏幕上(Repeateforever),但對我來說最重要的是,當我的對象穿過屏幕(例如一個球)和它的屏幕開始消失我想看到屏幕對面的那部分是可能的?如何在屏幕上移動精靈? cocos2d

古巴。

回答

1

使用此代碼:

CCSprite *sprite = [CCSprite spriteWithFile:@"Actor.png"]; 
[self addChild:sprite]; 

CGSize size = [[CCDirector sharedDirector] winSize]; 
sprite.position = ccp(0, size.height/2.0f); 

id move  = [CCMoveTo actionWithDuration:2.0f position:ccp(size.width, size.height/2.0f)]; 
id moveBack = [CCMoveTo actionWithDuration:2.0f position:ccp(0, size.height/2.0f)]; 
id sequence = [CCSequence actions:move, moveBack, nil]; 
id repeate = [CCRepeatForever actionWithAction:sequence]; 

[sprite runAction:repeate]; 
1

你的意思是小行星風格:對象留在屏幕的一側區域並進入屏幕上完全相反的一面。可能部分顯示在兩個(或全部四個)屏幕邊界上。

是的,這是可能的,但不是沒有使用2或4個精靈。如果你的精靈可以離開屏幕只能左/右或上/下2個精靈就足夠了。如果你想要一個完整的環繞屏幕邊界類型的世界,你需要有4個精靈。

總體思路是使用精靈的contentSize和屏幕大小來測試精靈是否已經(部分)離開了屏幕。然後將其他精靈顯示在加或減屏幕寬度和/或高度的位置,以使它們看起來好像精靈從一個邊界到另一個邊界無縫包裹。

你需要4個角色的精靈。設想精靈的中心點恰好爲0,0,這意味着精靈右上角的四分之一繪製在左下角。如果世界環繞在屏幕邊界處,則應該在左上角,右上角和右下角看到精靈的其他四分之一。

不,沒有竅門,只有一個精靈可以做到這一點。你需要2或4並與「主」精靈同步他們的位置。

我曾經實施過這個。我將發佈更新「sprite doubles」屬性的代碼,不保證,也不是複製粘貼解決方案。它確實顯示瞭如何同步精靈的一般想法。雙打儲存在一個陣列中,其中有四個:

-(void) updateSpriteDoublesProperties 
{ 
    CCSprite* sprite = (CCSprite*)self.owner.node; 

    for (int i = 0; i < kNumOpposingSprites; i++) 
    { 
     CCSprite* spriteDouble = spriteDoubles_->arr[i]; 
     spriteDouble.rotation = sprite.rotation; 
     spriteDouble.scale = sprite.scale; 
     spriteDouble.flipX = sprite.flipX; 
     spriteDouble.flipY = sprite.flipY; 

     CGPoint pos = self.owner.node.position; 
     CGPoint oppositePosition = pos; 

     if (i == 0 || i == 1) 
     { 
      if (pos.x > boundaryCenter_.x) 
      { 
       oppositePosition.x = pos.x - (boundary_.size.width - boundary_.origin.x); 
      } 
      else 
      { 
       oppositePosition.x = pos.x + (boundary_.size.width - boundary_.origin.x); 
      } 
     } 
     if (i == 0 || i == 2) 
     { 
      if (pos.y > boundaryCenter_.y) 
      { 
       oppositePosition.y = pos.y - (boundary_.size.height - boundary_.origin.y); 
      } 
      else 
      { 
       oppositePosition.y = pos.y + (boundary_.size.height - boundary_.origin.y); 
      } 
     } 

     spriteDouble.position = oppositePosition; 
    } 
} 
相關問題