关于Box2D物理引擎的问题

void HelloBox2D::addSpriteAtPosition(Point pos) // ----向物理世界中添加精灵
{-------夹具 形状等的定义创建省略
//创建一个物理精灵
SpriteBatchNode* parent = SpriteBatchNode::create(“orange.png”, 100);
m_texture = parent->getTexture();

this->addChild(parent, 0, ktagparent);
PhysicsSprite* sprite = PhysicsSprite::createWithTexture(m_texture);

sprite->setB2Body(body);
sprite->setPTMRatio(PTM_RATIO);
sprite->setPosition(Point(s.width, s.height));

parent->addChild(sprite);

}
这个是可以正常运行的代码:创建的精灵可以自由落下
但是当我稍微改动时如下
void HelloBox2D::addSpriteAtPosition(Point pos)
{-------夹具 形状等的定义创建省略
//创建一个物理精灵

PhysicsSprite* sprite = PhysicsSprite::create("orange.png");

sprite->setB2Body(body);
sprite->setPTMRatio(PTM_RATIO);
sprite->setPosition(Point(s.width, s.height));

this->addChild(sprite);

}
创建的精灵便在那不动,不知道为什么。
我的cocos2dx版本是3.0的
求帮忙,本人新手一枚

如果有box2d的物理世界的把, 应该在Update函数中会更新精灵的坐标与角度吧。。 麻烦看下你那部分代码

------------update--------
void HelloBox2D::update(float dt)
{
int velocityIterations = 8;
int positionIterations = 1;

world->Step(dt, velocityIterations, positionIterations);

}

另外,如果我在update中再加上
for (b2Body* b = m_world->GetBodyList(); b!=nullptr; b->GetNext())
{
if (b->GetUserData()!=nullptr)
{
PhysicsSprite* sprite = (PhysicsSprite*)b->GetUserData();
sprite->setPosition(Point(b->GetPosition().xPTM_RATIO, b->GetPosition().yPTM_RATIO));
sprite->setRotation(-(b->GetAngle() * 180 / M_PI));

    }

}

遍历物理世界中的刚体就会出现以下现象(图片)

就一直停在第一帧,似乎是非常卡

很卡? 上面帧率不是现在 60吗?

这一张是用精灵表的方式添加物理精灵,也就是第一种方法的运行结果
在update中没有for遍历

你如果不遍历, 你精灵的坐标与角度你怎么更新呢?

就是很卡,表示不知打什么原因,好像变化的就gL verts

不遍历,精灵也在那不动,
发现的问题有两个
如果用精灵表的方式添加精灵,此时在update中没有for遍历刚体,精灵是可以自由落下的。这个是官方demo中的Box2dTest,我原样复制过来的
改动1:如果在update中for遍历刚体,就会出现非常卡的现象。
改动2:如果我不用精灵表的方式添加物理精灵,而是 PhysicsSprite* sprite = PhysicsSprite::create(“orange.png”); 精灵就会停在初始创建位置,不会自由落下
两处改动发现的两个问题

官方demo中Box2dTest的update中也是没有for遍历的你可以去看一下,但是精灵依然可以自由落下