Cocos2d x cocos2dx使用物理场景移动精灵
我有一个物理场景初始化,我有一个有物理体的角色精灵,然后我有一个有物理体的静态地面精灵。这一切都很好,所以我下一步就是移动我的角色。现在我假设如果我刚刚更新了我的角色X位置,角色将移动并停留在地面上,但是如果地面掉落,角色不会掉落,它只是漂浮,我如何移动我的角色精灵并让它始终停留在地面上?下面是我的更新功能的代码Cocos2d x cocos2dx使用物理场景移动精灵,cocos2d-x,game-physics,ccsprite,Cocos2d X,Game Physics,Ccsprite,我有一个物理场景初始化,我有一个有物理体的角色精灵,然后我有一个有物理体的静态地面精灵。这一切都很好,所以我下一步就是移动我的角色。现在我假设如果我刚刚更新了我的角色X位置,角色将移动并停留在地面上,但是如果地面掉落,角色不会掉落,它只是漂浮,我如何移动我的角色精灵并让它始终停留在地面上?下面是我的更新功能的代码 void LevelOne::update(float delta) { if (mJoystick->isActive()) { Vec2 sc
void LevelOne::update(float delta)
{
if (mJoystick->isActive())
{
Vec2 scaledVelocity = mJoystick->getVelocity() * 240;
Vec2 updatedPosition = Vec2(mCharacter->getPosition().x + scaledVelocity.x
* delta, mCharacter->getPosition().y);
mCharacter->setPosition(updatedPosition);
if (mJoystick->getVelocity().x < 0)
{
mCharacter->setFlippedX(false);
}
else
{
mCharacter->setFlippedX(true);
}
}
void LevelOne::更新(浮动增量)
{
如果(mJoystick->isActive())
{
Vec2 scaledVelocity=mJoystick->getVelocity()*240;
Vec2 updatedPosition=Vec2(mCharacter->getPosition().x+scaledVelocity.x
*增量,mCharacter->getPosition().y);
mCharacter->setPosition(updatedPosition);
如果(mJoystick->getVelocity().x<0)
{
mCharacter->setFlippedX(false);
}
其他的
{
mCharacter->setFlippedX(真);
}
}
以下步骤可以解决您的问题-
1) 你有没有像重力一样设置重力。设置(0.0f,-10.0f),y应该是负数
2) 设置你的角色精灵是动态的
3) 代码应该在更新方法中
int32 velocityIterations = 1;
int32 positionIterations = 1;
world -> Step(dt, velocityIterations, positionIterations);
for (b2Body* b = world -> GetBodyList(); b; b = b -> GetNext()) {
if (b -> GetUserData() != NULL) {
CCSprite *myActor = (CCSprite*) b -> GetUserData();
if(myActor != NULL) {
myActor->setPositionY( b -> GetPosition().y * PTM_RATIO);
myActor->setRotation(-1 * CC_RADIANS_TO_DEGREES(b -> GetAngle()));
}
}
}