Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.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 我需要使用JBox2D实现正确的每米像素比率,而不是使用LibGDX_Java_Game Engine_Physics_Jbox2d - Fatal编程技术网

Java 我需要使用JBox2D实现正确的每米像素比率,而不是使用LibGDX

Java 我需要使用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

我正在构建一个游戏引擎,并添加了jbox2d

我正在努力实现使用PPM的正确方法

我有三门重要的课,在那里所有的魔法都发生了

请查看我的代码,并向我显示要更改的内容

这就是我希望看到的工作:

然而,即使我看到了这一点,它也没有相应地表现出来

PlayState.java

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