Java 为什么重力是反向的?
各位晚上好。 我请求你的帮助!我正在发现Box2D,但我已经在努力解决一些问题: 我的重力颠倒了,我不明白为什么。 我的第二个问题是,我无法以调试的方式绘制它。 我必须手动绘制它才能真正看到一些东西 下面是一个代码示例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
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。