Java 我需要使用JBox2D实现正确的每米像素比率,而不是使用LibGDX
我正在构建一个游戏引擎,并添加了jbox2d 我正在努力实现使用PPM的正确方法 我有三门重要的课,在那里所有的魔法都发生了 请查看我的代码,并向我显示要更改的内容 这就是我希望看到的工作: 然而,即使我看到了这一点,它也没有相应地表现出来 PlayState.javaJava 我需要使用JBox2D实现正确的每米像素比率,而不是使用LibGDX,java,game-engine,physics,jbox2d,Java,Game Engine,Physics,Jbox2d,我正在构建一个游戏引擎,并添加了jbox2d 我正在努力实现使用PPM的正确方法 我有三门重要的课,在那里所有的魔法都发生了 请查看我的代码,并向我显示要更改的内容 这就是我希望看到的工作: 然而,即使我看到了这一点,它也没有相应地表现出来 PlayState.java package enginex.jbox2dTestBed; import java.awt.Graphics2D; import java.awt.Point; import java.awt.event.MouseEven
package enginex.jbox2dTestBed;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import org.jbox2d.common.Vec2;
import org.jbox2d.dynamics.World;
import enginex.core.State;
public class PlayState extends State {
TestGame game;
boolean initialized = false;
Vec2 gravity = new Vec2(0.0f, 0.8f);
boolean doSleep = true;
World world = new World(gravity, doSleep);
ArrayList<Ball> balls = new ArrayList<Ball>();
Box box;
protected PlayState(TestGame game) {
super(game);
this.game = game;
}
public void postInit() {
if(!initialized) {
box = new Box(game);
initialized = true;
}
}
public void update() {
postInit();
updateWorld();
for(Ball b:balls)
b.update();
}
public void updateWorld() {
float timeStep = 1.0f / 60.f;
int velocityIterations = 6;
int positionIterations = 2;
for(int i = 0; i < 60; ++i)
world.step(timeStep, velocityIterations, positionIterations);
}
public void render(Graphics2D g) {
for(Ball b:balls)
b.render(g);
box.render(g);
}
public void mousePressed(MouseEvent e) {
Point m = game.getMousePosition();
try {
balls.add(new Ball(game, m.x, m.y));
}
catch(Exception ex) {}
}
}
Box.java
package enginex.jbox2dTestBed;
import java.awt.Color;
import java.awt.Graphics2D;
import org.jbox2d.collision.shapes.PolygonShape;
import org.jbox2d.dynamics.Body;
import org.jbox2d.dynamics.BodyDef;
import org.jbox2d.dynamics.BodyType;
import org.jbox2d.dynamics.FixtureDef;
import enginex.core.GameObject;
@SuppressWarnings("serial")
public class Box extends GameObject {
TestGame game;
public double x = 100;
public double y = 100;
public int w = 100;
public int h = 100;
Body body;
BodyDef bd = new BodyDef();
PolygonShape ps = new PolygonShape();
FixtureDef fd = new FixtureDef();
float ppm = 1/32;
public Box(TestGame game) {
super(game);
this.game = game;
bd.type = BodyType.STATIC;
// bd.position.set((float)(x), (float)(y));
// ps.setAsBox((float)(w), (float)(h));
bd.position.set((float)(x / ppm), (float)(y / ppm));
ps.setAsBox((float)(w / ppm), (float)(h / ppm));
fd.shape = ps;
body = getState().world.createBody(bd);
body.createFixture(fd);
}
public void render(Graphics2D g) {
g.setColor(Color.WHITE);
g.drawRect((int)(x), (int)(y), (int)(w), (int)(h));
}
PlayState getState() {
return (PlayState)game.stateMachine.getCurrentState();
}
}
package enginex.jbox2dTestBed;
import java.awt.Color;
import java.awt.Graphics2D;
import org.jbox2d.collision.shapes.PolygonShape;
import org.jbox2d.dynamics.Body;
import org.jbox2d.dynamics.BodyDef;
import org.jbox2d.dynamics.BodyType;
import org.jbox2d.dynamics.FixtureDef;
import enginex.core.GameObject;
@SuppressWarnings("serial")
public class Box extends GameObject {
TestGame game;
public double x = 100;
public double y = 100;
public int w = 100;
public int h = 100;
Body body;
BodyDef bd = new BodyDef();
PolygonShape ps = new PolygonShape();
FixtureDef fd = new FixtureDef();
float ppm = 1/32;
public Box(TestGame game) {
super(game);
this.game = game;
bd.type = BodyType.STATIC;
// bd.position.set((float)(x), (float)(y));
// ps.setAsBox((float)(w), (float)(h));
bd.position.set((float)(x / ppm), (float)(y / ppm));
ps.setAsBox((float)(w / ppm), (float)(h / ppm));
fd.shape = ps;
body = getState().world.createBody(bd);
body.createFixture(fd);
}
public void render(Graphics2D g) {
g.setColor(Color.WHITE);
g.drawRect((int)(x), (int)(y), (int)(w), (int)(h));
}
PlayState getState() {
return (PlayState)game.stateMachine.getCurrentState();
}
}