gerendert Ich erneuten Besuch LibGDX Spiele-Programmierung und ich leider habe Sachen wieder zu lernen, ich kannte.Libgdx/Box2D - nur ein Rechteck von debugrenderer wird
Ich verwende derzeit Tiled Map Editor, um eine sehr einfache Donkey Kong Stilstufe zu erstellen. Ich habe ungefähr 20 Rechtecke für das Level.
Ich habe eine Box2D-Welt in meiner Haupt-GameScreen-Klasse erstellt und habe eine for-Schleife, um die Rechteck-Objekte in die Welt und den DebugRenderer zu bekommen.
Mein Problem ist, dass nur das untere (und erste) Rechteck, das ich gezeichnet habe, angezeigt wird. Ich habe die Waage überprüft, auch habe ich ein println()
, die mir die Objektinformationen erzählt hat mit allen Rechtecken Informationen korrekt zeigen analysiert wurde (dh. Die Rechtecken x, y, w, h-Werte), aber wie gesagt, nur ein Rechteck zeigt auf dem DebugRenderer.
Ich bin gerade wieder in Programmierung nach ca. 6 Monaten Pause und so hoffe ich, ich habe etwas Einfaches verpasst. Derselbe Code in meinen alten Projekten funktioniert immer noch gut, da ich einige getestet habe.
Hier ist mein Code, jede Hilfe wird massiv geschätzt. Danke
public class GameScreen implements Screen {
SpriteBatch spriteBatch;
OrthographicCamera cam;
Viewport v;
TmxMapLoader mapLoader;
TiledMap map;
OrthogonalTiledMapRenderer mapRenderer;
World world;
Box2DDebugRenderer b2dr;
float mapScale = 10f/140f;
public GameScreen(){
spriteBatch = new SpriteBatch();
cam = new OrthographicCamera();
v = new FitViewport(Constants.V_WIDTH, Constants.V_HEIGHT, cam);
cam.setToOrtho(false, v.getWorldWidth(), v.getWorldHeight());
mapLoader = new TmxMapLoader();
map = mapLoader.load("level1.tmx");
mapRenderer = new OrthogonalTiledMapRenderer(map, mapScale);
world = new World(new Vector2(0,-9.8f), true);
b2dr = new Box2DDebugRenderer();
// box2d local variables
BodyDef bdef = new BodyDef();
PolygonShape shape = new PolygonShape();
FixtureDef fdef = new FixtureDef();
Body body;
// create platform object rectangles
for (MapObject object : map.getLayers().get(2).getObjects().getByType(RectangleMapObject.class)){
Rectangle rect = ((RectangleMapObject)object).getRectangle();
bdef.type = BodyDef.BodyType.StaticBody;
bdef.position.set(rect.getX() + rect.getWidth()/2 * mapScale, rect.y + rect.getHeight()/2 * mapScale);
body = world.createBody(bdef);
shape.setAsBox(rect.getWidth()/2 * mapScale, rect.getHeight()/2 * mapScale);
fdef.shape = shape;
body.createFixture(fdef);
}
}
@Override
public void show() {
}
@Override
public void render(float delta) {
update(delta);
clearScreen();
draw();
}
public void update(float dt){
mapRenderer.setView(cam);
}
public void clearScreen(){
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
}
public void draw(){
spriteBatch.setProjectionMatrix(cam.combined);
mapRenderer.render();
b2dr.render(world, cam.combined);
spriteBatch.begin();
spriteBatch.end();
}
@Override
public void resize(int width, int height) {
v.update(width, height);
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
}
@Override
public void dispose() {
spriteBatch.dispose();
}
}