Soit dit en passant, j'ai fait exactement ce que vous essayez de faire. Le seul hic, c'est que j'utilisais Jbox2d donc le code est en Java, mais vous devriez quand même pouvoir le comprendre si vous utilisez C ++
Vous avez essentiellement besoin d'utiliser des articulations / moteurs et toutes ces choses amusantes si vous voulez faire une action de swing. Voici un extrait de ce à quoi ressemble mon code basé sur l'entrée clé:
if (myinput.mouse0) {
agents.get(0).rightForeJoint.enableMotor(true);
agents.get(0).rightArmJoint.enableMotor(false);
if (Keyboard.isKeyDown(Keyboard.KEY_SPACE)){
agents.get(0).rightForeJoint.enableMotor(false);
}
mouseY = Mouse.getY();
mouseX = Mouse.getX();
float temp = mouseY - prevPos[1];
float temp2 = -mouseX + prevPos[0];
temp2 *= modifier; temp2 *= 0.000026;
temp *= modifier; temp *= 0.000030;
agents.get(0).armR.applyAngularImpulse(-temp);
agents.get(0).foreR.applyAngularImpulse(temp2);
prevPos[1] = mouseY;
prevPos[0] = mouseX;
if(temp2 < 0){
temp2 *=-1;
}
if(temp < 0){
temp *=-1;
}
fatigueDrain += temp2;
fatigueDrain += temp;
}
Et puis en ce qui concerne la construction des armes et ainsi de suite, l'extrait de code ressemble à ceci.
// RIGHTARM //
this.rightArmDef = new RevoluteJointDef();
this.rightArmDef.bodyA = this.torso ; this.rightArmDef.bodyB = this.armR;
this.rightArmDef.collideConnected = false;
torso_armL_pin = new Vec2(0.50f, +0.05f);
local_armL_pin = new Vec2(0.14f, 0.14f);
this.rightArmDef.localAnchorA.set(this.torso.getLocalCenter().add(torso_armL_pin));
this.rightArmDef.localAnchorB.set(this.armR.getLocalCenter().add(local_armL_pin));
this.rightArmDef.enableMotor = true;
this.rightArmDef.motorSpeed = 0f;
this.rightArmDef.maxMotorTorque =10f;
this.rightArmDef.enableLimit = true;
this.rightArmDef.lowerAngle = 1.2f;// * DEGTORAD;
this.rightArmDef.upperAngle = 5;
this.rightArmJoint = (RevoluteJoint)world.createJoint(this.rightArmDef);
Je me rends compte qu'il se passe beaucoup de choses ici, mais c'est probablement plus facile si vous me demandez simplement sur quoi vous avez besoin de clarté et je l'explique. Si vous n'avez jamais utilisé aucune de ces choses, vous devrez probablement faire une bonne lecture.
MODIFIER >>
Réalisez, Box2d a toute la détection de collision et la physique intégrées dans ses bibliothèques. Croyez-moi quand je dis, il est plus facile de comprendre leur système que d'essayer de faire les choses à partir de zéro. Si vous voulez une collision, vous utilisez des fixations de corps, si vous voulez qu'ils tournent ou se déplacent, vous utilisez des joints. Cela peut sembler un peu plus compliqué au début, mais au final cela vous fait gagner infiniment plus de temps pour utiliser leurs méthodes.
En fait, je dirais que vous ne terminerez probablement jamais si vous essayez de faire les choses à partir de zéro, en supposant que vous créez un jeu de physique. Parce que le calcul de choses comme le frottement, la flottabilité et sans parler de la détection / efficace / collision va vous prendre toute une vie.