2014-09-26 60 views
0

我目前正在與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

回答

0

你的身體沒有任何固定裝置。至少在原始的C++版本中,這會導致它們沒有密度,因此沒有質量,因此它們將被視爲固定旋轉。