Ich habe übrigens genau das getan, was Sie versuchen. Der einzige Haken ist, dass ich Jbox2d verwendet habe, also ist der Code in Java, aber Sie sollten es trotzdem herausfinden können, wenn Sie C ++ verwenden
Grundsätzlich müssen Sie Gelenke / Motoren und all das lustige Zeug verwenden, wenn Sie schwingende Aktionen ausführen möchten. Hier ist ein Ausschnitt davon, wie mein Code basierend auf der Tasteneingabe aussieht:
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;
}
Und was das Bauen der Arme und so weiter betrifft, sieht das Snippet so aus.
// 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);
Mir ist klar, dass hier viel los ist, aber es ist wahrscheinlich einfacher, wenn Sie mich nur fragen, worüber Sie Klarheit brauchen, und ich erkläre es. Wenn Sie noch nie eines dieser Dinge benutzt haben, müssen Sie wahrscheinlich ein bisschen lesen.
BEARBEITEN >>
In Box2d ist die gesamte Kollisionserkennung und -physik sauber in seine Bibliotheken integriert. Nehmen Sie es auf Glauben, wenn ich sage, es ist einfacher, ihr System herauszufinden, als zu versuchen, Dinge von Grund auf neu zu tun. Wenn Sie eine Kollision wünschen, verwenden Sie Vorrichtungen bodydefs. Wenn Sie möchten, dass sie sich drehen oder bewegen, verwenden Sie Gelenke. Es mag auf den ersten Blick etwas komplizierter erscheinen, aber am Ende sparen Sie unendlich mehr Zeit, um ihre Methoden anzuwenden.
In der Tat würde ich vorschlagen, dass Sie wahrscheinlich nie fertig werden, wenn Sie versuchen, Dinge von Grund auf neu zu machen, vorausgesetzt, Sie erstellen ein Physikspiel. Weil das Berechnen von Dingen wie Reibung, Auftrieb und nicht zu vergessen / effizienter / Kollisionserkennung ein Leben lang dauern wird.