我可以让CCFollow更自然地遵循吗?

时间:2012-02-23 19:34:42

标签: cocos2d-iphone box2d

我想用cocos2d / Box2D构建一个平台游戏。我使用CCFollow跟随玩家精灵,但CCFollow不断将它放在屏幕的中心。我希望CCFollow更自然地遵循,就像人类转动摄像机一样,可接受的滞后,小的超调等等。

这是一种不起作用的我的方法:我(通过距离关节)将一个小物理体附加到不与任何东西碰撞的玩家身上,由透明精灵代表。我CCFollow'ed透明精灵。我希望这个幽灵的身体就像一个附着在玩家身上的气球,因此看起来很顺利。问题是距离关节断裂太重 - 太轻的物体。气球随机移动,当然,无论光线如何,它都会将玩家拉回一点。

顺利关注移动精灵的更好方法是什么?

2 个答案:

答案 0 :(得分:2)

尝试将此添加到cocos2d库中的CCActions。

-(void) step:(ccTime) dt
{
#define CLAMP(x,y,z) MIN(MAX(x,y),z)

    CGPoint pos;
    if(boundarySet)
    {
        // whole map fits inside a single screen, no need to modify the position - unless map boundaries are increased
        if(boundaryFullyCovered) return;

        CGPoint tempPos = ccpSub(halfScreenSize, followedNode_.position);
        pos = ccp(CLAMP(tempPos.x,leftBoundary,rightBoundary), CLAMP(tempPos.y,bottomBoundary,topBoundary));
    }
    else {
        // pos = ccpSub( halfScreenSize, followedNode_.position );
        CCNode *n = (CCNode*)target_;
        float s = n.scale;
        pos = ccpSub( halfScreenSize, followedNode_.position );
        pos.x *= s;
        pos.y *= s;
    }

    CGPoint moveVect;

    CGPoint oldPos = [target_ position];
    double dist = ccpDistance(pos, oldPos);
    if (dist > 1){
        moveVect = ccpMult(ccpSub(pos,oldPos),0.05); //0.05 is the smooth constant.
        oldPos = ccpAdd(oldPos, moveVect);
        [target_ setPosition:oldPos];
    }

#undef CLAMP

}

我从cocos2d论坛得到这个。

答案 1 :(得分:0)

也许这个http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:actions_ease可以帮助你获得CCFollow的“加速”效果。