2012-07-07 90 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; 
    } 
} 
相关问题