cocos2dx + box2d: 你好。我其實有一個問題。 我做了一點繩子,她的行爲正常。但是如果物體系上兩根繩子,它會突然停下來。任何人都可以理解爲什麼發生這種情況,並可以幫助嗎我用兩根繩索錄製了一段視頻,這表明該對象尖銳地ostanavliaetsya。並用一根繩索,在那裏一切都很好視頻:cocos2dx + box2d:對象突然停下來,繫上兩根繩索
一繩:http://youtu.be/Yh4x8qrgmgo
兩根繩子: http://youtu.be/iRPVPLrC9ZQ 因爲什麼對象可以如此突然停止?
加繩:
GameScene::createRope(blk1,groundBody,blk1->GetLocalCenter(), cc_to_b2Vec(580, screen.height/1) ,1.0);
GameScene::createRope(groundBody,blk1,cc_to_b2Vec(380, screen.height/2), blk1->GetLocalCenter() ,1.1);
創建繩:
void GameScene::createRope(b2Body *bodyA, b2Body *bodyB, b2Vec2 anchorA, b2Vec2 anchorB, float sag)
{
b2RopeJointDef jd;
jd.bodyA = bodyA;
jd.bodyB = bodyB;
jd.localAnchorA = anchorA;
jd.localAnchorB = anchorB;
jd.collideConnected = true;
// Max length of joint = current distance between bodies * sag
float32 ropeLength = (bodyA->GetWorldPoint(anchorA)- bodyB->GetWorldPoint(anchorB)).Length()*sag;
jd.maxLength = ropeLength;
// Create joint
b2RopeJoint *ropeJoint = (b2RopeJoint *)world->CreateJoint(&jd);
VRope *newRope = new VRope(ropeJoint, _ropeSpriteSheet);
_ropes.push_back(newRope);
}
http://youtu.be/Lchc1II3cjY - 繩索被安排在同一高度。基本上相同的物體應該上下襬動
實際上,繩子緊繃,但精靈看起來並不舒展,因此看起來物體應該擺動。我不知道如何解決它... 創建繩:
void VRope::createRope(const CCPoint& pointA, const CCPoint& pointB,float distance)
{
// 16; //12; //increase value to have less segments per rope, decrease to have more segments
int segmentFactor = 20;
numPoints = (int) distance/segmentFactor;
CCPoint diffVector = ccpSub(pointB,pointA);
float multiplier = distance/(numPoints-1);
antiSagHack = 0.1f; //HACK: scale down rope points to cheat sag. set to 0 to disable, max suggested value 0.1
for(int i=0;i<numPoints;i++) {
CCPoint tmpVector = ccpAdd(pointA, ccpMult(ccpNormalize(diffVector), multiplier*i*(1-antiSagHack)));
VPoint *tmpPoint = new VPoint();
tmpPoint->setPos(tmpVector.x, tmpVector.y);
vPoints.push_back(tmpPoint);
}
for(int i=0;i<numPoints-1;i++) {
VStick* tmpStick = new VStick(vPoints[i], vPoints[i+1]);
vSticks.push_back(tmpStick);
}
if(spriteSheet) {
for(int i=0;i<numPoints-1;i++) {
VPoint* point1 = vSticks[i]->getPointA();
VPoint* point2 = vSticks[i]->getPointB();
CCPoint stickVector = ccpSub(ccp(point1->x,point1->y),ccp(point2->x,point2->y));
float stickAngle = ccpToAngle(stickVector);
float f = spriteSheet->getTextureAtlas()->getTexture()->getPixelsHigh()/CC_CONTENT_SCALE_FACTOR();
CCRect r = CCRectMake(0, 0, multiplier, f);
CCSprite* tmpSprite = CCSprite::createWithTexture(spriteSheet->getTexture(), r);
ccTexParams params = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT};
tmpSprite->getTexture()->setTexParameters(¶ms);
tmpSprite->setPosition(ccpMidpoint(ccp(point1->x, point1->y), ccp(point2->x, point2->y)));
tmpSprite->setRotation(-1 * CC_RADIANS_TO_DEGREES(stickAngle));
spriteSheet->addChild(tmpSprite);
ropeSprites.push_back(tmpSprite);
}
}
}
如果我增加的繩子會被拉伸的段數,而不是看上去很美。是的,我砍關節,所以如果增加的段數(數量減少點和繩子看起來像一根棍子)
如果切割不準確....
你增加了細分的數量(減少點數和繩子看起來像一根棍子),如果你減少驚人的數量段,它不是真的太下垂。我究竟做錯了什麼?在繩索上的所有代碼
請幫助我
你可以添加你的代碼到帖子? – FuzzyBunnySlippers
從視頻看來,你的第二根繩子太短了。您正在使用(可能是一條三角繩)來模擬繩索的連接,但是您可以添加box2d調試圖來顯示您正在使用的實際繩索連接嗎? – FuzzyBunnySlippers
是的,我用的是Verlet Rope。第二根繩子確實很短,但實際上物體應該從一側到另一側略微擺動。 – user3079929