Kebetulan, saya telah melakukan persis apa yang Anda coba lakukan. Satu-satunya tangkapan adalah saya menggunakan Jbox2d jadi kodenya ada di Java, tetapi Anda harus tetap bisa mengetahuinya jika Anda menggunakan C ++
Anda pada dasarnya perlu menggunakan sendi / motor dan semua hal menyenangkan jika Anda ingin melakukan aksi berayun. Berikut cuplikan tampilan kode saya berdasarkan input kunci:
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;
}
Dan sejauh benar-benar membangun lengan dan yang lainnya, potongannya terlihat seperti ini.
// 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);
Saya menyadari ada banyak hal yang terjadi di sini, tetapi mungkin lebih mudah jika Anda bertanya kepada saya apa yang perlu Anda jelaskan dan saya jelaskan. Jika Anda belum pernah menggunakan hal-hal ini, Anda mungkin perlu melakukan sedikit bacaan yang adil.
Sunting >>
Sadarilah, Box2d memiliki semua deteksi tabrakan dan fisika dibangun bersih ke perpustakaannya. Ambillah keyakinan ketika saya mengatakan, lebih mudah untuk mengetahui sistem mereka daripada mencoba dan melakukan sesuatu dari awal. Jika Anda ingin tabrakan, Anda menggunakan bodydef perlengkapan, jika Anda ingin mereka berputar atau bergerak, Anda menggunakan sendi. Awalnya mungkin terlihat sedikit lebih rumit, tetapi pada akhirnya menghemat waktu Anda tanpa batas untuk menggunakan metode mereka.
Bahkan, saya akan menyarankan bahwa Anda mungkin tidak akan pernah selesai jika Anda mencoba dan melakukan sesuatu dari awal, dengan asumsi Anda membuat permainan fisika. Karena menghitung hal-hal seperti gesekan, daya apung dan belum lagi, / deteksi efisien / tabrakan, akan membawa Anda seumur hidup.