gpt4 book ai didi

iphone - 放置带有动画的相机

转载 作者:行者123 更新时间:2023-12-03 19:59:27 24 4
gpt4 key购买 nike

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

最佳答案

我的建议是创建您自己的 CCActionInterval 子类,例如 CCCameraZoomAnimation 并覆盖其 update 方法。拥有一个 Action 的主要优点除了能够精细地控制相机移动之外,还在于可以通过CCEaseOut/CCEaseIn(等)使用该 Action 来获得良好的图形效果。

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

使用参数 dt 调用 update 方法,该参数表示自操作开始以来耗时,并允许您轻松计算当前 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 );
}

不多不少。

很抱歉,如果复制/粘贴/修改产生了一些错误,但我希望总体思路是清晰的。

关于iphone - 放置带有动画的相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6096063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com