我想用cocos2d / Box2D构建一个平台游戏。我使用CCFollow跟随玩家精灵,但CCFollow不断将它放在屏幕的中心。我希望CCFollow更自然地遵循,就像人类转动摄像机一样,可接受的滞后,小的超调等等。
这是一种不起作用的我的方法:我(通过距离关节)将一个小物理体附加到不与任何东西碰撞的玩家身上,由透明精灵代表。我CCFollow'ed透明精灵。我希望这个幽灵的身体就像一个附着在玩家身上的气球,因此看起来很顺利。问题是距离关节断裂太重 - 太轻的物体。气球随机移动,当然,无论光线如何,它都会将玩家拉回一点。
顺利关注移动精灵的更好方法是什么?
答案 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的“加速”效果。