Cocos2d iphone 保持速度恒定且玩家处于位置-侧滚
我正在用Cocos2D-X和Box2D开发一款小型手机游戏 我被卡住的地方是box2d身体(主要演员)和相应精灵的运动。现在我想:Cocos2d iphone 保持速度恒定且玩家处于位置-侧滚,cocos2d-iphone,box2d,Cocos2d Iphone,Box2d,我正在用Cocos2D-X和Box2D开发一款小型手机游戏 我被卡住的地方是box2d身体(主要演员)和相应精灵的运动。现在我想: 沿着x轴匀速移动这个物体,不管它是向上还是向下滚动(它是一个圆形) 保持身体几乎贴在滚动的地面上 将主体和相应的精灵保持在屏幕中央 我尝试的是: 在update()方法中,我使用了body->SetLinearVelocity(b2Vec2(x,y))来设置更高/更低的值,如果body传递的速度为常量 我曾经在body->SetLinearVelocity(b2Ve
body->SetLinearVelocity(b2Vec2(x,y))
来设置更高/更低的值,如果body传递的速度为常量body->SetLinearVelocity(b2Vec2(x,y))
body->applylinearpulse(…)
,就像在world->Step(…)
中玩velocityIterations的值一样)都会有一个小的延迟,这会将玩家的身体推到屏幕中心的更远处b2Vec2 vel = m_pB2Body->GetLinearVelocity();
float desiredVel = mMoveSpeed.x; //set there your speed x value
float velChange = desiredVel - vel.x;
float impulse = m_pB2Body->GetMass() * velChange;
m_pB2Body->ApplyLinearImpulse( b2Vec2(impulse, mMoveSpeed.y), m_pB2Body->GetWorldCenter());
这将允许在大多数时间保持恒定速度。不要忘记,在游戏循环中,每次都必须调用这些函数。你可以根据情况将这些力量结合起来。例如,如果在开始时需要进行小加速,则可以对车身使用ApplyForce,并且在所需速度时使用ApplyLinearImpulse或SetLinearVelocity。下面介绍如何正确使用它:CCPoint position = ccpClamp(playerPosition, mLeftBounds, mRightBounds);
CCPoint diff = ccpSub(mWorldScrollBound, mGameNode->convertToWorldSpace(position));
CCPoint newGameNodePosition = ccpAdd(mGameNode->getPosition(), mGameNode->getParent()->convertToNodeSpace(diff));
mGameNode->setPosition(newGameNodePosition);
注意:如果您是box2d新手,建议您阅读所有文章iforce2d(),它们是网络中最好的,以及他的box2d编辑器RUBE。有一段时间,他们真的帮助了我。我不知道这是否可行,但我有一个想法: 将圆保持在固定位置,并相对移动背景。例如,在游戏过程中,如果圆圈向左的速度为5,则保持圆圈固定,并以5的速度向右移动屏幕。若圆圈向左有5个速度,屏幕向右有3个速度,那个么保持圆圈固定,并以8个速度向左移动屏幕,依此类推。这将允许您将圆固定在屏幕中心
另一种方法是将整个屏幕与球一起平移。使屏幕上的所有内容都成为具有速度的对象。球(圆)速度的x分量应该是所有其他物体的速度。这样,每当圆移动时,所有其他对象都会尝试跟上它。使用box2d很难做到这一点,您可以在这里找到一些解释: