【问题标题】:How to move a sprite across the screen ? cocos2d如何在屏幕上移动精灵? cocos2d
【发布时间】:2012-07-07 16:01:43
【问题描述】:

我有一个问题,我想制作一个动画,让我的 CCSprite 在屏幕上移动(Repeateforever),但对我来说最重要的是当我的对象穿过屏幕(例如球)及其开始消失我想在屏幕的另一部分看到那部分是否可能?

库巴。

【问题讨论】:

    标签: objective-c animation cocos2d-iphone


    【解决方案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];
    

    【讨论】:

      【解决方案2】:

      您的意思是小行星风格:物体在屏幕的一侧离开区域并在完全相反的一侧进入屏幕。可能在两个(或全部四个)屏幕边框上部分显示。

      是的,这是可能的,但不能不使用 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;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-05-17
        • 1970-01-01
        • 2011-11-06
        • 1970-01-01
        • 1970-01-01
        • 2022-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多