用动画放置相机

时间:2011-05-23 10:37:44

标签: iphone cocos2d-iphone

我想知道如何将相机放置在近处和远处(通过增加和减少eyeZ self.camera setEyeX:0 eyeY:0 eyeZ:1]; self.camera setEyeX:0 eyeY:0 eyeZ:180];的值),包括动画(平滑度),通常它会提供不稳定的缩放。

2 个答案:

答案 0 :(得分:2)

我的建议是创建自己的CCActionInterval子类,比如CCCameraZoomAnimation并覆盖其update方法。除了能够精确控制相机移动之外,还可以通过CCEaseOut / CCEaseIn(等)使用此操作来获得漂亮的图形效果。 / p>

CCCameraZoomAnimation将要将其摄像机要修改为其目标的节点和指定最终Z值的构造函数的另一个参数。

 @interface CCActionEase : CCActionInterval <NSCopying>
 {
       CCActionInterval * other;
 }
 /** creates the action */
 +(id) actionWithDuration:(ccTime)t finalZ:(float)finalZ;
 /** initializes the action */
 -(id) initWithDuration:(ccTime)t finalZ:(float)finalZ;
 @end

使用参数update调用dt方法,该参数表示自动作开始以来经过的时间,并允许您轻松计算当前的Z位置:

 -(void) update: (ccTime) t
 {
    // Get the camera's current values.
    float centerX, centerY, centerZ;
    float eyeX, eyeY, eyeZ;
    [_target.camera centerX:&centerX centerY:&centerY centerZ:&centerZ];
    [_target.camera eyeX:&eyeX eyeY:&eyeY eyeZ:&eyeZ];

    eyeZ = _intialZ + _delta * t  //-- just a try at modifying the camera

    // Set values.
    [_target.camera setCenterX:newX centerY:newY centerZ:0];
    [_target.camera setEyeX:newX eyeY:newY eyeZ:eyeZ];
 }

您还需要实施copyWithZone

 -(id) copyWithZone: (NSZone*) zone
 {
      CCAction *copy = [[[self class] allocWithZone: zone] initWithDuration: [self duration] finalZ:_finalZ];
      return copy;
  }

并使用startWithTarget

  -(void) startWithTarget:(CCNode *)aTarget
  {
      [super startWithTarget:aTarget];
      _initialZ = _target.camera....;  //-- get the current value for eyeZ
      _delta = ccpSub( _finalZ, _initialZ );
  }

没有更多,没有更少。

很抱歉,如果复制/粘贴/修改产生了一些错误,但我希望一般的想法是明确的。

答案 1 :(得分:0)

如果你从关闭中将'z'增加180,你一定会得到一个生涩的动画,尝试在动画上下文循环中运行它,在一段时间内增加值将让你有一个平滑的'变焦”。