Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么重力是反向的?_Java_Jbox2d - Fatal编程技术网

Java 为什么重力是反向的?

Java 为什么重力是反向的?,java,jbox2d,Java,Jbox2d,各位晚上好。 我请求你的帮助!我正在发现Box2D,但我已经在努力解决一些问题: 我的重力颠倒了,我不明白为什么。 我的第二个问题是,我无法以调试的方式绘制它。 我必须手动绘制它才能真正看到一些东西 下面是一个代码示例 package tests; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import

各位晚上好。 我请求你的帮助!我正在发现Box2D,但我已经在努力解决一些问题:

我的重力颠倒了,我不明白为什么。 我的第二个问题是,我无法以调试的方式绘制它。 我必须手动绘制它才能真正看到一些东西

下面是一个代码示例

 package tests;

 import java.awt.Color;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;

 import javax.swing.JFrame;
 import javax.swing.JPanel;
 import javax.swing.Timer;

 import engine.jbox2d.collision.shapes.CircleShape;
 import engine.jbox2d.collision.shapes.PolygonShape;
 import engine.jbox2d.common.Vec2;
 import engine.jbox2d.dynamics.Body;
 import engine.jbox2d.dynamics.BodyDef;
 import engine.jbox2d.dynamics.BodyType;
 import engine.jbox2d.dynamics.FixtureDef;
 import engine.jbox2d.dynamics.World;

 public class JBox2DTest extends JPanel
 {
    private static final long serialVersionUID = 7173873195721096625L;

    // model
    private World            world;
    private Ball             ball;

    public JBox2DTest()
    {
        // Création du monde
        world = new World(new Vec2(0.0f, -9.81f));

        // Création d'un sol
        new Ground(world);

        // Création d'une balle
        this.ball = new Ball(world);

        //Création de la frame
        JFrame frame = new JFrame();
        frame.setSize(800, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(this);
        frame.setVisible(true);

        //Loop
        Timer simulationTimer = new Timer(10, new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                world.step(1.0f / 60.0f, 6, 2);
                repaint();
            }
        });
        simulationTimer.start();
    }

    public void paint(Graphics g)
    {
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
        ball.draw((Graphics2D) g);
    }

    public static void main(String[] args)
    {
        new JBox2DTest();
    }
 }

 class Ground
 {
    Body body;

    public Ground(World world)
    {
        BodyDef groundBodyDef = new BodyDef();
        groundBodyDef.position.set(0.0f, -10.0f);
        body = world.createBody(groundBodyDef);
        PolygonShape groundBox = new PolygonShape();
        groundBox.setAsBox(800.0f, 10);
        body.createFixture(groundBox, 0.0f);
    }
 }

 class Ball
 {
    private Body body;

    public Ball(World world)
    {
        BodyDef bodyDef = new BodyDef();
        bodyDef.type = BodyType.DYNAMIC; // Sujet aux forces
        bodyDef.position.set(800/2, 600/2);
        this.body = world.createBody(bodyDef);
        CircleShape dynamicCirle = new CircleShape();
        dynamicCirle.setRadius(10f);
        FixtureDef fixtureDef = new FixtureDef();
        fixtureDef.shape = dynamicCirle;
        fixtureDef.density = 1.0f;
        fixtureDef.friction = 0.3f;
        fixtureDef.restitution = 0.3f;
        body.createFixture(fixtureDef);
    }

    public void draw(Graphics2D g2d)
    {
        g2d.setColor(Color.RED);

        Vec2 ballPos = body.getPosition();
        float ballRadius = body.getFixtureList().getShape().getRadius();

        g2d.drawOval(
            (int) (ballPos.x - ballRadius),
            (int) (ballPos.y - ballRadius),
            (int) (ballRadius * 2),
            (int) (ballRadius * 2)
        );
    }
 }
非常感谢你的帮助! 顺致敬意,
Alann

这显然取决于您使用的Box2D的实现。重力可能在您的版本中发生逆转:

world = new World(new Vec2(0.0f, -9.81f));
应不带负号:

world = new World(new Vec2(0.0f, 9.81f));

这显然取决于您使用的Box2D的实现。重力可能在您的版本中发生逆转:

world = new World(new Vec2(0.0f, -9.81f));
应不带负号:

world = new World(new Vec2(0.0f, 9.81f));

你应该试着一次只问一个问题。其他一切都会扰乱问答网站的结构。关于重力:OpenGL和许多游戏引擎使用右手坐标系:X点向右,Y点向上(Z点朝向查看器,在2D情况下)。所以你需要一个指向负Y轴的力来模拟重力,你是对的,我将修改我的问题以尊重这个规则。谢谢你的信息。另外,我还可以进行调试。你应该试着一次只问一个问题。其他一切都会扰乱问答网站的结构。关于重力:OpenGL和许多游戏引擎使用右手坐标系:X点向右,Y点向上(Z点朝向查看器,在2D情况下)。所以你需要一个指向负Y轴的力来模拟重力,你是对的,我将修改我的问题以尊重这个规则。谢谢你的信息。另外,我还能够使调试工作正常进行。对,即使听起来不合逻辑,我也能理解:p。对,即使听起来不合逻辑,我也能理解:p。