我想知道如何将相机放置在近处和远处(通过增加和减少eyeZ self.camera setEyeX:0 eyeY:0 eyeZ:1];
self.camera setEyeX:0 eyeY:0 eyeZ:180];
的值),包括动画(平滑度),通常它会提供不稳定的缩放。
答案 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:¢erX centerY:¢erY centerZ:¢erZ];
[_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,你一定会得到一个生涩的动画,尝试在动画上下文循环中运行它,在一段时间内增加值将让你有一个平滑的'变焦”。