【问题标题】:rotate a sprite around an anchor point围绕锚点旋转精灵
【发布时间】:2012-04-19 18:45:24
【问题描述】:

我有一个精灵:

ombreoeuf1 = [CCSprite spriteWithFile:@"mangeurcentremieu3_03.png" ];
ombreoeuf1.position = ccp(240,160);
[self addChild:ombreoeuf1];

我想围绕一个锚点不断旋转它。我该怎么做?

【问题讨论】:

    标签: ios animation cocos2d-iphone rotation sprite


    【解决方案1】:

    可以先通过设置属性anchorPoint来设置锚点,例如:

    [ombreoeuf1 setAnchorPoint:ccp(0,0)]
    

    然后通过设置另一个属性rotation来设置旋转(以度为单位):

    [ombreoeuf1 setRotation:90]
    

    anchorPointrotation 都是CCNode class 的属性,CCNode class 是 CCSprite 的父级。

    更新

    根据您的cmets,您似乎想要一个永不停止的旋转精灵?这是一个让精灵每 0.1 秒旋转 10 度的示例:

    [sprite runAction:[CCRepeatForever actionWithAction:[CCRotateBy actionWithDuration:0.1 angle:10]]];
    

    【讨论】:

    • 但是,这是一个简单的旋转。我想要一个无限的旋转动画
    • @gregrock 我已经更新了我的答案。请检查是否是您想要的?
    • 最后一个问题:我想知道使用这种方法我的精灵是否可以在旋转时检测到触摸事件
    【解决方案2】:

    CCNode 子类的所有变换都是相对于锚点进行的。在所有转换过程中,anchorPoint 将具有相同的位置。例如,如果您将带有anchorPoint (0.f, 0.f) 的精灵放置到屏幕左下角的位置(0.f, 0.f),然后设置它的比例,例如, 5.f,变形后会停留在左下角,只是会变大。所以所有的旋转都会自动相对于锚点进行。

    还有一件事。 CCSprite 默认具有 anchorPoint (0.5f, 0.5f) 和一些内容大小,因此您只需将其设置为另一个即可查看转换的变化。如果你想用 CCNode 来做,你必须将它的 relativeToAnchorPoint 属性设置为 YES 并手动设置 contentSize。

    您可以为此使用 CCRepeatForever 操作。例如,

    id rotateAction = [CCRepeatForever actionWithAction:[CCRotateBy actionWithDuration: yourDuration 
                                                                                 angle: anyAngleForGivenTime]];
    

    【讨论】:

    • 我明白,但我的问题是关于旋转代码我可以让它无限旋转吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2019-01-14
    • 2012-08-15
    • 2018-04-16
    • 2013-06-30
    相关资源
    最近更新 更多