弹射器臂旋转 - libgdx和box2d
问题描述:
我目前正在与box2d一起弹射游戏,但我遇到了关于弹射器手臂旋转的问题。弹射器臂旋转 - libgdx和box2d
让我解释一下我的弹弓一点点:
我有2个对象。 *弹射臂 - 动态体 *弹射器基体 - 静态体
我想让弹射臂在一定范围内来回旋转。 这里是我的弹射器的图像: http://i.gyazo.com/7ce4dfa87b2083a0eb62df7c4acd3e47.png
现在,我想“链接将他们的”使用关节,但没有奏效。最初,我想让手臂向左弯曲一点点。 我有我自己的游戏世界对象,其中包含Box2d世界对象和所有的游戏对象。而且,我有一个叫做Game Renderer的对象,它负责照顾游戏中的渲染。以下是我在游戏世界中物体到目前为止已经试过:
package com.david.gameworld;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.physics.box2d.joints.RevoluteJointDef;
import com.david.objects.CatapultArm;
import com.david.objects.CatapultBase;
public class GameWorld{
private World b2dWorld;
private CatapultArm arm;
private CatapultBase base;
private RevoluteJointDef jointDef;
public GameWorld() {
// Initialize The Box2d World
b2dWorld = new World(new Vector2(0,0),true);
initializeObjects();
}
public CatapultArm getArm() {
return arm;
}
public CatapultBase getBase() {
return base;
}
public World getBox2DWorld() {
return b2dWorld;
}
public void updateWorld(float delta) {
b2dWorld.step(1/delta, 8, 5);
}
private void initializeObjects() {
// Initialize The Objects(Catapult, Base)
arm = new CatapultArm(b2dWorld);
base = new CatapultBase(b2dWorld);
jointDef = new RevoluteJointDef();
jointDef.initialize(arm.getBody(), base.getBody(), new Vector2(120,62));
jointDef.enableMotor = true;
jointDef.enableLimit = true;
jointDef.motorSpeed = -1260;
jointDef.lowerAngle = (float) Math.toRadians(90);
jointDef.upperAngle = (float) Math.toRadians(75);;
jointDef.maxMotorTorque = 4800;
b2dWorld.createJoint(jointDef);
}
}
CatapultArm和CatapultBase是在我的游戏两个对象包含机构(位置,类型等)的所有配置。
这里是代码:
CatapultBase.java
package com.david.objects;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
public class CatapultBase extends ObjectInWorld{
public CatapultBase(World world) {
super(world);
initiate();
}
@Override
protected void initiate() {
//The Body
bodyDef = new BodyDef();
bodyDef.type = BodyType.StaticBody;
bodyDef.position.set(140f, 62f);
body = world.createBody(bodyDef);
}
}
CatapultArm.java
package com.david.objects;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
import com.badlogic.gdx.physics.box2d.World;
public class CatapultArm extends ObjectInWorld{
public CatapultArm(World world) {
super(world);
initiate();
}
@Override
protected void initiate() {
//The Body
bodyDef = new BodyDef();
bodyDef.type = BodyType.DynamicBody;
bodyDef.position.set(154f, 62f);
body = world.createBody(bodyDef);
}
}
ObjectInWorld.java
package com.david.objects;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.World;
public abstract class ObjectInWorld {
protected BodyDef bodyDef;
protected Body body;
protected World world;
protected ObjectInWorld(World world) {
this.world = world;
}
protected void initiate() {
}
public float getX() {
return body.getPosition().x;
}
public float getY() {
return body.getPosition().y;
}
public Body getBody() {
return body;
}
}
我如何 “针” 的弹射手臂基地,以便它会很好地旋转?
答
你的身体没有任何固定装置。至少在原始的C++版本中,这会导致它们没有密度,因此没有质量,因此它们将被视为固定旋转。
请定义“没有工作”。 – iforce2d 2014-09-26 12:44:03
由于我设置的限制(9度到75度),它假设稍微向左弯曲,但它没有。我认为我使用坐标的方式有问题。 – 2014-09-26 14:22:22
有人吗? ......... – 2014-09-27 06:01:09