libgdx
Box2D
Zoeken…
Maak Box2D-lichamen van Tiled Map
De objecten gemaakt binnen een Tiled Map (.tmx), kunnen eenvoudig als lichamen in een Box2D-wereld worden geladen met behulp van de Libgdx MapObject-klasse als volgt:
public void buildBuildingsBodies(TiledMap tiledMap, World world, String layer){
MapObjects objects = tiledMap.getLayers().get(layer).getObjects();
for (MapObject object: objects) {
Rectangle rectangle = ((RectangleMapObject)object).getRectangle();
//create a dynamic within the world body (also can be KinematicBody or StaticBody
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.DynamicBody;
Body body = world.createBody(bodyDef);
//create a fixture for each body from the shape
Fixture fixture = body.createFixture(getShapeFromRectangle(rectangle),density);
fixture.setFriction(0.1F);
//setting the position of the body's origin. In this case with zero rotation
body.setTransform(getTransformedCenterForRectangle(rectangle),0);
}
}
De volgende functies helpen om de coördinaten van het Tiled-object toe te wijzen aan Box2D-vorm.
public static final float TILE_SIZE = 16;
//Also you can get tile width with: Float.valueOf(tiledMap.getProperties().get("tilewidth",Integer.class));
public static Shape getShapeFromRectangle(Rectangle rectangle){
PolygonShape polygonShape = new PolygonShape();
polygonShape.setAsBox(rectangle.width*0.5F/ TILE_SIZE,rectangle.height*0.5F/ TILE_SIZE);
return polygonShape;
}
En deze functie helpt om het midden van een Betegeld object toe te wijzen aan de rechthoekige vorm van de Libgdx.
public static Vector2 getTransformedCenterForRectangle(Rectangle rectangle){
Vector2 center = new Vector2();
rectangle.getCenter(center);
return center.scl(1/TILE_SIZE);
}
De eerste functie kan dus als volgt worden gebruikt:
public static final float GRAVITY = 9.8F;
public void createBodies(AssetManager assetManager){
TiledMap tiledMap = assetManager.get("tiledMap.tmx");
//create a Box2d world will contain the physical entities (bodies)
World world = new World(new Vector2(0,GRAVITY),true);
String layerName = "BuildingsLayers";
buildBuildingsBodies(tiledMap,world,layerName);
}
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow