弹射器臂旋转 - 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; 
    } 
} 

我如何 “针” 的弹射手臂基地,以便它会很好地旋转?

+0

请定义“没有工作”。 – iforce2d 2014-09-26 12:44:03

+0

由于我设置的限制(9度到75度),它假设稍微向左弯曲,但它没有。我认为我使用坐标的方式有问题。 – 2014-09-26 14:22:22

+0

有人吗? ......... – 2014-09-27 06:01:09

你的身体没有任何固定装置。至少在原始的C++版本中,这会导致它们没有密度,因此没有质量,因此它们将被视为固定旋转。