Могу ли я заставить CCFollow следовать более естественно? - PullRequest
0 голосов
/ 23 февраля 2012

Я хочу построить платформенную игру с cocos2d / Box2D.Я использую CCFollow, чтобы следить за спрайтом игрока, но CCFollow постоянно помещает его в центр экрана.Я хочу, чтобы CCFollow следовал более естественно, как человек, поворачивающий видеокамеру с приемлемым запаздыванием, небольшим выбросом ... и т. Д.

Вот мой метод, который не работал: я прикрепил (через дистанционное соединение) небольшое физическое тело к игроку, которое не сталкивается ни с чем, представленное прозрачным спрайтом.Я следил за прозрачным спрайтом.Я надеялся, что это тело-призрак будет действовать как воздушный шарик, прикрепленный к игроку, следовательно, плавный сдвиг в поле зрения.Проблема в том, что разрывы на расстоянии между суставами слишком тяжелые - слишком легкие объекты.Воздушный шар перемещается случайным образом, и, конечно, он немного оттягивает игрока назад, независимо от того, насколько он легок.

Какой лучший способ плавно следовать за движущимся спрайтом?

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Попробуйте добавить это в CCActions в cocos2d libs.

-(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.

0 голосов
/ 24 февраля 2012

Возможно, это http://www.cocos2d -iphone.org / wiki / doku.php / prog_guide: actions_ease может помочь вам получить эффект "ускорения" с CCFollow.

...