Мне нужно разработать пушечную игру, используя box2d и cocos2dx. Cannon делится на две частиПожаротушение при достижении определенного угла в револьверном суставе
Base, которая фиксируется в земле и не движется.
b2WeldJointDef basePlatformWeldJointDef; basePlatformWeldJointDef.Initialize(base->getBody(), weaponPlatform->getBody(),weaponPlatform->getBody()->GetWorldCenter()); basePlatformWeldJointDef.collideConnected = false; basePlatformWeldJoint = m_world->CreateJoint(&basePlatformWeldJointDef);
рычаг который закреплен в основании с RevoluteJoint.
b2RevoluteJointDef armJointDef; armJointDef.Initialize(base->getBody(), arm->getBody(), m_loader->pointsToMeters(ccp(armPosition.x-(arm->getContentSize().width*WeaponScale/4),armPosition.y))); armJointDef.enableMotor = true; armJointDef.enableLimit = true; armJointDef.motorSpeed = 0; armJointDef.lowerAngle = CC_DEGREES_TO_RADIANS(0); armJointDef.upperAngle = CC_DEGREES_TO_RADIANS(0); armJointDef.maxMotorTorque = 2; armJointDef.collideConnected = false; cannonRevoluteJoint = (b2RevoluteJoint*)m_world->CreateJoint(&armJointDef);
Пушка должна вычислить угол, который будет срабатывать до, и это рассчитывается правильно. Используя
revolutJointObject->setLimits(lowerAngle, higherAngle)
здесь, я использую lowerAngle, а upperAngle оба являются желаемым углом, поэтому рычаг перемещается на нужный угол непосредственно без движения.Затем мне нужно было переместить руку, чтобы не менять ее угол, поэтому я устанавливаю нижний угол и верхний угол со старым углом и желаемым углом в зависимости от того, что будет ниже, а тем, что будет выше, и изменит скорость двигателя из RevoluteJoint
проблема заключается в том, что я нужен обратного вызова метод, который срабатывает при Вращательное сочленение достигает до определенного угла или, когда скорость двигателя достигает нуля при условии, что, когда рука достигает предела угла остановится и скорость двигателя будет равна нулю.
Я в поисках SO и я нашел This Solution, который вычисляет угол каждый шаг, это может быть использован, но он нуждается в большем количестве вычислений, что я чувствую лень делать.
Существует ли метод обратного вызова для уведомления скорости двигателя или определенного угла?
Затем я делаю свой чек на шаге, это просто условие, когда не нужен целый новый метод, который планируется запланировать. –
Просто не жертвуйте дизайном до преждевременной оптимизации, в противном случае - все работает. –