A question for catapult demo:Cocos2d-x加Box2D制作弹弓类游戏

很抱歉我用中文提问,因为我用英文问的问题提交了却出错了,而且没保存:( 413 Request Entity Too Large

有谁看过 Cocos2d-x加Box2D制作弹弓类游戏 的blog
http://mssyy2010.blog.51cto.com/4595971/847000

下载了他的源码,在2.04下也可以运行了,但之后我想修改一下投石车的角度,所以做了如下修改:

line:552
armJointDef.lowerAngle = CC_DEGREES_TO_RADIANS(9);
//—I change it to—>
armJointDef.lowerAngle = CC_DEGREES_TO_RADIANS(39);

line:347
if (m_armJoint~~>GetJointAngle <= CC_DEGREES_TO_RADIANS)
//—I change it to—>
if <= CC_DEGREES_TO_RADIANS)
line:490
m_bulletBody~~>SetTransform(b2Vec2(230.0f/PTM_RATIO, (155.0f+FLOOR_HEIGHT)/PTM_RATIO), 0.0f);
//—I change it to—>
m_bulletBody~~>SetTransform/PTM_RATIO), 0.0f);
line:494
weldJointDef.Initialize/PTM_RATIO));
//—~~I change it to—->
weldJointDef.Initialize(m_bulletBody, m_armBody, b2Vec2(200.0f/PTM_RATIO,(155.0f+FLOOR_HEIGHT)/PTM_RATIO));

改完之后,效果如下

但我发射了一个坚果之后,他的位置就出问题了

谁能帮我看一下代码,帮我把坚果的位置改对,我实在不知道该改那里了。

用到的图片可以去blog上下


源码.rar.zip (7.0 KB)

做了上面的修改后,程序初始化的时候坚果的位置是对的,可是发射了一颗之后,第二颗开始,坚果的位置就不对了

做了上面的修改后,程序初始化的时候坚果的位置是对的,可是发射了一颗之后,第二颗开始,坚果的位置就不对了

找到问题了,原来是因为m_armBody的位置没有回到原来的位置,

bool HelloWorld::attachBullet()
 {
     if (m_currentBullet < m_bullets.size())
     {

        m_armBody->SetTransform(b2Vec2(230.0f/PTM_RATIO, (FLOOR_HEIGHT+91.0f)/PTM_RATIO),m_armBody->GetAngle());//加上了这一句

         m_bulletBody = (b2Body*)m_bullets.at(m_currentBullet++);
        CCLOG("%d",(int)m_currentBullet);
        CCLOG("0--x=%f,y=%f",m_armBody->GetPosition().x,m_armBody->GetPosition().y);

        m_bulletBody->SetActive(true);

         m_bulletBody->SetTransform(b2Vec2(210.0f/PTM_RATIO, (155.0f+FLOOR_HEIGHT)/PTM_RATIO), 0.0f);



        CCLOG("1--x=%f,y=%f",m_armBody->GetPosition().x,m_armBody->GetPosition().y);

         b2WeldJointDef weldJointDef;
         weldJointDef.Initialize(m_bulletBody, m_armBody, b2Vec2(210.0f/PTM_RATIO,(155.0f+FLOOR_HEIGHT)/PTM_RATIO));
         weldJointDef.collideConnected = false;

        CCLOG("2--x=%f,y=%f",m_armBody->GetPosition().x,m_armBody->GetPosition().y);

         m_bulletJoint = (b2WeldJoint*)m_world->CreateJoint(&weldJointDef);
         return true;
     }

     return false;
 }