Cocos2d iphone Cocos2d:以真实方式跟随CCSprite获得阴影的算法

Cocos2d iphone Cocos2d:以真实方式跟随CCSprite获得阴影的算法,cocos2d-iphone,rotation,sprite,shadow,light,Cocos2d Iphone,Rotation,Sprite,Shadow,Light,我使用的是Cocos2d 2.0,而不是其他(没有BOX2D等)。我有一个角色,并添加了一个阴影作为CCSprite子节点。当角色移动时,它会产生一种很好的“飞行效果”,但不幸的是,当角色旋转时,子角色也会旋转,而阴影子角色的移动方式不现实。见下图: 在3D游戏中,这将在带有3D矩阵的图形引擎中进行,并在游戏中确定光源的位置。然而,我的游戏要简单得多,不需要任何3D图形,所以我需要找到一个程序化的近似值 To首先尝试使用“setPosition”和“setRotation”方法,但没有多大帮助

我使用的是Cocos2d 2.0,而不是其他(没有BOX2D等)。我有一个角色,并添加了一个阴影作为CCSprite子节点。当角色移动时,它会产生一种很好的“飞行效果”,但不幸的是,当角色旋转时,子角色也会旋转,而阴影子角色的移动方式不现实。见下图:

在3D游戏中,这将在带有3D矩阵的图形引擎中进行,并在游戏中确定光源的位置。然而,我的游戏要简单得多,不需要任何3D图形,所以我需要找到一个程序化的近似值

To首先尝试使用“setPosition”和“setRotation”方法,但没有多大帮助(阴影不会改变位置)

我现在有两条可能的道路要走。一个是使阴影成为独立的CCSprite(而不是将其添加为子对象),另一个是尝试覆盖修改“SET_DIRTY_recursive()”宏的setter(它可以检查子对象是否具有特定的标记,如果是,则不应用更改)

第一种方法有点过于复杂,第二种听起来不错,但仍然有点太复杂

此外,仅仅不“改变”阴影的相对位置并不能完全解决问题。相反,我应该编写一些代码来调整阴影相对位置,同时考虑到屏幕中精灵的相对位置(假设我将太阳设置在左上角,那么阴影将根据与太阳的相对位置改变形状)


是否有其他人有类似的算法可用于Cocos2d,如果有,是否有任何常见模式可解决此问题?提示:将精灵和阴影(带位置偏移)添加为ccnode的子节点。移动节点,仅旋转精灵,阴影位置仍然是精灵位置的偏移。问题已解决(据我所知)。

提示:将精灵和阴影(带位置偏移)添加为ccnode的子节点。移动节点,仅旋转精灵,阴影位置仍然是精灵位置的偏移。问题解决了(据我所知)。@LearnCocos2D太棒了,非常感谢(简直是天才)。你应该复制并粘贴这个作为答案,这样我就可以接受它并投票。很好,我不是100%确定它是否适合你
-(void) setPosition:(CGPoint)position
{
    [super setPosition:position];


    CCSprite * shadow = (CCSprite *)[self getChildByTag:belowByOneZFirst];
    if (shadow!=nil) {
        [shadow setPosition:shadowOriginalPosition];
        CCLOG(@"Setting shadow position");
    }

}

-(void) setRotation:(float)rotation
{
    [super setRotation:rotation];
    CCSprite * shadow = (CCSprite *)[self getChildByTag:belowByOneZFirst];
    if (shadow!=nil) {
        [shadow setRotation:0];
        CCLOG(@"Setting shadow rotation");
    }

}