我正在使用Cocos2d 2.0而没有其他(没有BOX2D等...)。我有一个角色并为它添加了一个阴影作为CCSprite子节点。当它移动时它会给出一个很好的“飞行效果”但不幸的是,当角色旋转时,孩子们也会这样做,并且阴影孩子以不切实际的方式移动。看到这张图片:
在3D游戏中,这将在图形引擎中使用3D矩阵和游戏中光源的位置。然而,我的游戏更简单,不需要任何3D图形,所以我需要找到一个程序化的近似。
首先尝试ovverride“setPosition”和“setRotation”方法,但没有多大帮助(阴影不会改变位置)。
-(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");
}
}
我现在有两条可能的路径。一种是使阴影成为独立的CCSprite(而不是将其添加为子),另一种是尝试修改设置者修改“SET_DIRTY_RECURSIVELY()”宏(它可以检查子项是否具有特定标记,如果是不适用变更)。
第一种方法有点过于复杂,第二种方法听起来还不错,但仍然有点过于复杂。
另外,只是不“改变”阴影相对位置并不能完全解决问题。我应该编写一些代码来调整阴影相对位置,同时考虑到Sprite在屏幕内的相对位置(假设我将太阳设置在左上角,然后阴影将根据相对位置改变形状。太阳)。
是否还有其他人使用Cocos2d实现了类似的算法?如果有的话,是否有任何常见的模式可以解决这个问题?
答案 0 :(得分:0)
提示:将精灵和阴影(带位置偏移)添加为ccnode的子级。移动节点,只旋转精灵,阴影位置仍然是精灵位置的偏移量。问题解决了(据我所知)。