Bu arada, tam olarak yapmaya çalıştığın şeyi yaptım. Tek yakalama Jbox2d kodunu Java'da kullanıyordum, ama yine de C ++ kullanıyorsanız bunu anlayabilmelisiniz
Salıncak hareketi yapmak istiyorsanız, eklemleri / motorları ve tüm bu eğlenceli şeyleri kullanmanız gerekir. Anahtar girdisine dayanarak kodumun neye benzediğini gösteren bir snippet:
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;
}
Ve sonra aslında silahları inşa etmek ve ne olursa olsun, snippet buna benziyor.
// 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);
Burada çok şey olduğunu anlıyorum, ama bana netlik için neye ihtiyacınız olduğunu sorarsanız muhtemelen daha kolay ve bunu açıklıyorum. Bunlardan herhangi birini hiç kullanmadıysanız, muhtemelen oldukça fazla okuma yapmanız gerekecektir.
DÜZENLEME >>
Box2d, kütüphanelerine temiz bir şekilde yerleştirilmiş tüm çarpışma algılama ve fiziğe sahiptir. Söylediğimde, inançlarını benimseyin, sistemlerini anlamak, işleri sıfırdan yapmaktan daha kolaydır. Çarpışma istiyorsanız, fikstür gövdelerini kullanırsınız, döndürmelerini veya hareket etmelerini istiyorsanız, eklemleri kullanırsınız. İlk başta biraz daha karmaşık görünebilir, ancak sonunda yöntemlerini kullanmak için size sonsuz zaman kazandırır.
Aslında, bir fizik oyunu oluşturduğunuzu varsayarak, sıfırdan bir şeyler yapmaya çalışırsanız muhtemelen asla bitmeyeceğinizi öneririm. Çünkü sürtünme, yüzdürme ve bahsetmeme gibi şeyleri hesaplamak, / verimli / çarpışma tespiti, size bir ömür kazandıracaktır.