Me와 mine의 친구가 cocos2dx로 탱크를 만들려고합니다. 우리가 지금까지 탱크가 화면에 배럴이 탱크 cocos2dx로 탱크를 만드는 법
하지만 지금 우리는 회전에 배럴을 시도하고 싶지만 아무것도 발생하지 않습니다에 부착되어있다가, 공동의 중앙에 위치를 배럴당 시작 드 돔 끝납니다. 탱크 및 통 모두 동적 몸이며 우리는
// Create sprite and add it to the layer
CCSprite *tank = CCSprite::create();
//tank->initWithFile("../Resources/tanks/001/tank.png");
tank->setPosition(pos);
tank->setTag(1);
this->addChild(tank);
// Create ball body
b2BodyDef tankBodyDef;
tankBodyDef.type = b2_dynamicBody;
tankBodyDef.position = toMeters(&pos);
tankBodyDef.userData = tank;
tankBody = _world->CreateBody(&tankBodyDef);
// Create shape definition and add body
shapeCache->addFixturesToBody(tankBody, "001/tank");
pos = CCPointMake(580, 450);
// Create sprite and add it to the layer
CCSprite *barrel = CCSprite::create();
//barrel->initWithFile("Tanks/001/barrel.png");
barrel->setPosition(pos);
barrel->setTag(2);
this->addChild(barrel);
// Create ball body
b2BodyDef barrelBodyDef;
barrelBodyDef.type = b2_dynamicBody;
barrelBodyDef.position = toMeters(&pos);
barrelBodyDef.userData = barrel;
barrelBody = _world->CreateBody(&barrelBodyDef);
tankBarrelAnchor = CreateRevoluteJoint(tankBody, barrelBody, -85.f, 180.f, 2000000.f, 0.f, true, false);
tankBarrelAnchor->localAnchorA = b2Vec2(0, 0);
tankBarrelAnchor->localAnchorB = b2Vec2(0, 0);
tankBarrelAnchor->referenceAngle = 0;
joint = (b2RevoluteJoint*)_world->CreateJoint(tankBarrelAnchor);
b2RevoluteJointDef* Level::CreateRevoluteJoint(b2Body* A, b2Body* B, float lowerAngle, float upperAngle, float maxMotorTorque, float motorSpeed, boolean enableMotor, boolean collideConnect){
b2RevoluteJointDef *revoluteJointDef = new b2RevoluteJointDef();
revoluteJointDef->bodyA = A;
revoluteJointDef->bodyB = B;
revoluteJointDef->collideConnected = collideConnect;
revoluteJointDef->lowerAngle = CC_DEGREES_TO_RADIANS(lowerAngle);
revoluteJointDef->upperAngle = CC_DEGREES_TO_RADIANS(upperAngle);
revoluteJointDef->enableLimit = true;
revoluteJointDef->enableMotor = enableMotor;
revoluteJointDef->maxMotorTorque = maxMotorTorque;
revoluteJointDef->motorSpeed = CC_DEGREES_TO_RADIANS(motorSpeed); //1 turn per second counter-clockwise
return revoluteJointDef;
}
그림에서 빨간색과 녹색 축 http://www.iforce2d.net/b2dtut/joints-revolute 두 물체의 질량 중심됩니다, 우리는 돔에서 PyshicsEditor과 시작의와 앵커 포인트를 설정 한 왜냐하면 우리가 PyshicsEditor로 앵커 포인트를 설정했기 때문입니다. – Bjorn
괜찮습니다. 몸이 잠 들어있는 것처럼 보이는 방식으로 정신이 산만했으나 자연적인 휴식 자세가 기대 되듯이 배럴이 아래를 향하지 않습니다. 어쨌든 ... 모터 속도를 0이 아닌 값으로 설정하면 어떻습니까? 0은 조인트가 배럴이 움직이는 것을 멈추게하는 브레이크처럼 작동한다는 것을 의미합니다. – iforce2d
나는 모터가 옵션이라고 생각하지 않는다. 우리는 이제 마찰 조인트를 사용하고 배럴을 회전시키기 위해 '회전 제스처'를 사용하려고합니다. 하지만 우리는 회전 동작을 작동시키지 않습니다. – Bjorn