这就是我想要做的事情。
我有一个精灵,在60秒的时间内不断缩放 down 。然后,当发生碰撞时,该精灵将向上缩放1.5。
-(void) update: (ccTime) deltaTime
{if(CGRectIntersectsRect([randomSprite boundingBox], [other boundingBox])) {
[SAE playEffect:@"collisionSoundEffect.mp3"];
[randomSprite runAction:[CCScaleBy actionWithDuration:3 scaleX:1.5 scaleY:1.5]];
问题是,在3秒之后,'弹出'恢复到原来的大小,好像碰撞没有发生一样。
当然哪个更小。
我希望精灵做的是在碰撞后保持 newSize。然后让精灵继续按比例缩小。
非常感谢任何帮助或指导。
谢谢。
[thisSpriteIsConstatnlyScalingDown runAction:[CCScaleBy actionWithDuration:60 scaleX:.01 scaleY:.01]];
我正在尝试保留新的缩放尺寸并再次开始缩小尺寸。
答案 0 :(得分:0)
如果要缩放到绝对比例因子,请不要使用CCScaleBy。请改用CCScaleTo。
CCScaleBy的问题在于,如果您的比例为1.5并且您缩小0.5,则最终得到比例1.0。但是,如果由于某种原因缩放比例并在节点缩放到1.2时再次执行,则最终会从1.2到0.7进行缩放。
最后,如果要确保在完成缩放后使用特定的比例因子,请在其末尾创建一个CCCequence,其中包含CCCallFunc或CCCallBlock,并将比例因子手动和强制设置为特定值。
答案 1 :(得分:0)
我认为这是因为你有两个动作在同一时间运行。放大操作完成后,缩小操作仍在运行。
#define kScaleDownActionTag 1
#define kScaleUpActionTag 2
...
// start downscale action
CCAction *action = /* your scale down action */;
action.tag = kScaleDownActionTag;
[sprite runAction:action];
...
if(CGRectIntersectsRect([randomSprite boundingBox], [other boundingBox]))
{
// if scale up action isn't running already
if (![randomSprite getActionByTag:kScaleUpActionTag])
{
// stop downscale action and run upscale action
[randomSprite stopActionByTag:kScaleDownActionTag];
CCAction *action = /* your scale up action */
action.tag = kScaleUpActionTag;
[randomSprite runAction:action];
}
}