【问题标题】:Catapult Arm rotation - libgdx and box2d弹射器臂旋转 - libgdx 和 box2d
【发布时间】:2014-09-26 06:09:41
【问题描述】:

我目前正在使用 box2d 制作弹射器游戏,但我遇到了弹射器臂旋转方面的问题。

让我解释一下我的弹射器:

我有 2 个对象。 * 弹射器臂 - Dynamic Body * 弹射器底座——静态体

我想让弹射臂在一定范围内来回旋转。 这是我的弹射器的图像: http://i.gyazo.com/7ce4dfa87b2083a0eb62df7c4acd3e47.png

现在,我尝试使用关节“链接它们”,但没有成功。最初,我希望手臂向左弯曲一点。 我有自己的游戏世界对象,其中包含 Box2d 世界对象和所有游戏对象。此外,我有一个名为 Game Renderer 的对象,它负责游戏中的渲染。到目前为止,这是我在 Game World 对象中尝试过的内容:

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;
    }
}

我怎样才能将弹射器臂“固定”到底座上,这样它才能很好地旋转?

【问题讨论】:

  • 请定义“无效”。
  • 由于我设置的限制(9 度到 75 度),它应该稍微向左弯曲,但事实并非如此。我认为我使用坐标的方式有问题。
  • 那么它的作用是什么?您将下限设置为高于上限,这通常不是一个好主意。
  • 什么也没发生。它根本不旋转。
  • 尝试更正限制设置。

标签: rotation libgdx box2d revolute-joints


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多