newuil
#1
很抱歉我用中文提问,因为我用英文问的问题提交了却出错了,而且没保存:( 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)
newuil
#2
做了上面的修改后,程序初始化的时候坚果的位置是对的,可是发射了一颗之后,第二颗开始,坚果的位置就不对了
newuil
#3
做了上面的修改后,程序初始化的时候坚果的位置是对的,可是发射了一颗之后,第二颗开始,坚果的位置就不对了
newuil
#4
找到问题了,原来是因为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;
}