또한, 나는 당신이하려는 일을 정확하게했습니다. 유일한 발견은 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는 모든 충돌 감지 및 물리학을 라이브러리에 깔끔하게 구축했습니다. 내가 말할 때 믿음을 가지고, 그들의 시스템을 알아내는 것이 처음부터 시도하고하는 것보다 쉽습니다. 충돌을 원하면 조명기 bodydef를 사용하고, 회전하거나 이동하려면 조인트를 사용하십시오. 처음에는 조금 더 복잡해 보일 수 있지만 결국에는 방법을 사용하는 데 더 많은 시간을 절약 할 수 있습니다.
실제로 물리 게임을 만들고 있다고 가정하고 처음부터 다시 시도하면 결코 끝내지 않을 것이라고 제안합니다. 마찰, 부력 및 / 효율 / 충돌 감지와 같은 것을 계산하는 데 평생 걸릴 것입니다.