บังเอิญฉันได้ทำสิ่งที่คุณพยายามจะทำ สิ่งที่จับได้เพียงอย่างเดียวคือฉันใช้ Jbox2d ดังนั้นโค้ดอยู่ใน Java แต่คุณควรจะสามารถเข้าใจได้ถ้าคุณใช้ C ++
โดยทั่วไปคุณต้องใช้ข้อต่อ / มอเตอร์และทุกอย่างสนุกถ้าคุณต้องการที่จะดำเนินการแกว่ง นี่เป็นตัวอย่างข้อมูลโค้ดของฉันที่มีพื้นฐานมาจากอินพุตที่สำคัญ:
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;
}
จากนั้นเท่าที่การสร้างแขนและอะไรก็ตามมันก็เป็นแบบนี้
// 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);
ฉันรู้ว่ามีหลายอย่างเกิดขึ้นที่นี่ แต่มันอาจจะง่ายขึ้นถ้าคุณแค่ถามฉันว่าคุณต้องการความชัดเจนอะไรและฉันอธิบายมัน หากคุณไม่เคยใช้สิ่งเหล่านี้มาก่อนคุณอาจจำเป็นต้องอ่านหนังสือให้ฟังพอสมควร
แก้ไข >>
รับรู้ Box2d มีทั้งหมดของการตรวจจับการชนและฟิสิกส์ที่สร้างความสะอาดในห้องสมุด รับเอาความศรัทธาเมื่อฉันพูดมันง่ายกว่าที่จะคิดออกระบบของพวกเขากว่าลองและทำสิ่งต่าง ๆ ตั้งแต่เริ่มต้น หากคุณต้องการการชนคุณใช้ฟิกซ์เจอร์ bodydefs หากคุณต้องการให้มันหมุนหรือเคลื่อนที่คุณใช้ข้อต่อ มันอาจดูซับซ้อนกว่าเล็กน้อยในตอนแรก แต่ในที่สุดมันช่วยให้คุณประหยัดเวลาได้มากขึ้นในการใช้วิธีการของพวกเขา
ในความเป็นจริงฉันขอแนะนำให้คุณอาจจะไม่จบถ้าคุณลองทำสิ่งต่าง ๆ ตั้งแต่เริ่มต้นสมมติว่าคุณกำลังสร้างเกมฟิสิกส์ เนื่องจากการคำนวณสิ่งต่าง ๆ เช่นแรงเสียดทานการลอยตัวและไม่พูดถึง / การตรวจจับที่มีประสิทธิภาพ / การชนกันจะทำให้คุณมีชีวิต