2

所以我在 cocos2d 上,但在我使用普通的 ios 应用程序之前,我有这个代码:

-(void)viewDidLoad
{
    rootLayer = [[CALayer alloc] init];
    [imageView.layer addSublayer:rootLayer];
    roundPath = CGPathCreateMutable();

    CGPathMoveToPoint(roundPath, nil, center.x , center.y - 35);
    CGPathAddArcToPoint(roundPath, nil, center.x + 35, center.y - 35, center.x + 35, center.y + 35, 35);
    CGPathAddArcToPoint(roundPath, nil, center.x + 35, center.y + 35, center.x - 35, center.y + 35, 35);
    CGPathAddArcToPoint(roundPath, nil, center.x - 35, center.y + 35, center.x - 35, center.y, 35);
    CGPathAddArcToPoint(roundPath, nil, center.x - 35, center.y - 35, center.x, center.y - 35, 35);

    CGPathCloseSubpath(roundPath);

    //Box Path

    boxPath = CGPathCreateMutable();

    CGPathMoveToPoint(boxPath, nil, center.x , center.y - 35);
    CGPathAddArcToPoint(boxPath, nil, center.x + 35, center.y - 35, center.x + 35, center.y + 35, 4.7);
    CGPathAddArcToPoint(boxPath, nil, center.x + 35, center.y + 35, center.x - 35, center.y + 35, 4.7);
    CGPathAddArcToPoint(boxPath, nil, center.x - 35, center.y + 35, center.x - 35, center.y, 4.7);
    CGPathAddArcToPoint(boxPath, nil, center.x - 35, center.y - 35, center.x, center.y - 35, 4.7);

    CGPathCloseSubpath(boxPath);
    shapeLayer = [CAShapeLayer layer];

    shapeLayer.path = boxPath;

    [rootLayer addSublayer:shapeLayer];
}

-(void)startAnimation
{   
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"path"];

    animation.duration = 2.0;

    animation.repeatCount = HUGE_VALF;

    animation.autoreverses = YES;

    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

    animation.fromValue = (id)boxPath;

    animation.toValue = (id)roundPath;

    [shapeLayer addAnimation:animation forKey:@"animatePath"];
}

但是我没有找到在 cocos2d 上做动画的方法boxpathroundpath我不知道 CCAction 使用什么。有谁能够帮助我 ?对不起我的英语我是法国人:/

4

1 回答 1

2

据我所知,Cocos2d 中没有直接接口来使用 Apple CoreAnimation 库中的 CGPaths。


EDIT1:对不起,我误解了你的问题!Cocos2d 没有提供任何工具来动画/变形从由路径定义的一个形状到由不同路径定义的另一个形状。您要么需要创建自己的继承自 CCNode 的自定义类,要么使用 Cocos2d 以外的其他库。如果您确实创建了自己的 CCNode 子类,那么现有的 Cocos2d 动作/动画工具可能会有用......


EDIT2:如果您了解如何进行子类化,那么这里有一个链接,其中包含您想要在 CCNode 的子类中覆盖哪些方法的基础知识:http: //www.cocos2d-iphone.org/wiki/doku.php/prog_guide :draw_update

此外,cocos2d 编程指南通常会有所帮助:http ://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:index

如果您不了解如何进行子类化(例如,class从现有的 继承新的class),那么我建议您使用更简单的问题来了解面向对象编程的这一部分!


我相信您最好的选择是调查CCSequence(这是 的一种CCAction)并用一系列 CCMoveToorCCMoveBy动作填充它。

教程链接:http ://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:actions_composition

于 2012-04-10T21:41:18.837 回答