0
У меня есть файл TMX с слоем изображения плитки, а также слой объекта. Я все импортировал его в проект libGDX, но, похоже, не могу получить координаты Rectangle каждого объекта в свой код. См. Ниже мой класс Level и файл TMX для справки. (Я застрял на этом в течение нескольких дней теперь его так frustating я пытался десятки вещей, и я нахожусь в правильном беспорядке сейчас!):Свойства объекта MapGbjects Libgdx/Tiled?
package com.moneylife.solarsystem;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.maps.MapLayer;
import com.badlogic.gdx.maps.MapObject;
import com.badlogic.gdx.maps.objects.RectangleMapObject;
import com.badlogic.gdx.maps.tiled.TiledMap;
import com.badlogic.gdx.maps.tiled.TmxMapLoader;
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.math.Rectangle;
public class Level {
BitmapFont font;
int sizeTest = 0;
OrthogonalTiledMapRenderer renderer;
OrthographicCamera camera;
Stage mainStage;
TiledMap map;
Array<Rectangle> platformRects;
Array<Platform> platforms;
SpriteBatch spriteBatch;
float unitScale = 1/256f;
Platform platform;
public Level(String TmxFileName, OrthographicCamera Camera, Stage MainStage) {
font = new BitmapFont();
font.setColor(Color.RED);
mainStage = MainStage;
map = new TmxMapLoader().load(TmxFileName);
renderer = new OrthogonalTiledMapRenderer(map, unitScale);
camera = Camera;
camera.setToOrtho(false, 7, 4);
camera.update();
spriteBatch = new SpriteBatch();
platformRects = new Array<Rectangle>();
MapLayer layer = map.getLayers().get("platforms");
for (MapObject object : layer.getObjects()) {
if (object instanceof RectangleMapObject) {
RectangleMapObject rectangleObject = (RectangleMapObject) object;
// If you want to use the name to determine if it belongs in your array
if ("floorRect".equals(rectangleObject.getName())) {
Rectangle rectangle = rectangleObject.getRectangle();
platformRects.add(rectangle);
}
// If you want to look at the "type" property to determine if it belongs in your array
// if ("rectie".equals(rectangleObject.getProperties().get("type", String.class))) {
// Rectangle rectangle = rectangleObject.getRectangle();
// platformRects.add(rectangle);
// }
}
}
for (int i = 0; i < platformRects.size; i++){
platform = new Platform(platformRects.get(i));
mainStage.addActor(platform);
}
}
public void draw() {
spriteBatch.begin();
renderer.setView(camera);
renderer.render();
font.draw(spriteBatch, "plat Rects count: " + sizeTest, 0, 0);
spriteBatch.end();
}
}
И TMX FILE ...... ..
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" renderorder="right-up" width="20" height="5" tilewidth="256" tileheight="256" nextobjectid="47">
<tileset firstgid="1" name="bg" tilewidth="256" tileheight="256" tilecount="12">
<image source="../textures/bg.jpg" width="1024" height="768"/>
</tileset>
<tileset firstgid="13" name="platforms" tilewidth="256" tileheight="256" tilecount="2">
<tile id="0">
<image width="256" height="256" source="../textures/tiles-brown.png"/>
</tile>
<tile id="1">
<image width="256" height="256" source="../textures/tiles-green.png"/>
</tile>
</tileset>
<layer name="background" width="20" height="5">
<data encoding="base64" compression="zlib">
eJytybkNADAIBEH/f//1ehMnyBCBNMGxIfheQURCdthWe79fT0qvaOgYYltN2xMLG0dsq2n7AsAQAbY=
</data>
</layer>
<objectgroup name="platforms">
<object id="20" name="floorRect" type="rectie" gid="14" x="1280" y="1280" width="256" height="256"/>
<object id="21" name="floorRect" type="rectie" gid="14" x="1792" y="1280" width="256" height="256"/>
<object id="22" name="floorRect" type="rectie" gid="14" x="1536" y="1280" width="256" height="256"/>
<object id="23" name="floorRect" type="rectie" gid="13" x="2304" y="1280" width="256" height="256"/>
<object id="24" name="floorRect" type="rectie" gid="13" x="2560" y="1280" width="256" height="256"/>
<object id="25" name="floorRect" type="rectie" gid="14" x="2816" y="1280" width="256" height="256"/>
<object id="26" name="floorRect" type="rectie" gid="14" x="2560" y="1024" width="256" height="256"/>
<object id="27" name="floorRect" type="rectie" gid="14" x="2304" y="1024" width="256" height="256"/>
<object id="28" name="floorRect" type="rectie" gid="14" x="3328" y="1280" width="256" height="256"/>
<object id="29" name="floorRect" type="rectie" gid="14" x="3584" y="1024" width="256" height="256"/>
<object id="30" gid="13" x="3584" y="1280" width="256" height="256"/>
<object id="31" name="floorRect" type="rectie" gid="14" x="3840" y="1280" width="256" height="256"/>
<object id="32" name="floorRect" type="rectie" gid="14" x="4096" y="1280" width="256" height="256"/>
<object id="33" name="floorRect" type="rectie" gid="14" x="4352" y="1280" width="256" height="256"/>
<object id="34" name="floorRect" type="rectie" gid="14" x="4608" y="1280" width="256" height="256"/>
<object id="35" name="floorRect" type="rectie" gid="14" x="0" y="1280" width="256" height="256"/>
<object id="36" gid="14" x="256" y="1280" width="256" height="256"/>
<object id="37" name="floorRect" type="rectie" gid="14" x="512" y="1280" width="256" height="256"/>
<object id="38" name="floorRect" type="rectie" gid="14" x="768" y="1280" width="256" height="256"/>
<object id="39" gid="13" x="1024" y="1280" width="256" height="256"/>
<object id="40" name="floorRect" type="rectie" gid="14" x="1024" y="1024" width="256" height="256"/>
<object id="41" gid="14" x="0" y="1279" width="256" height="256"/>
<object id="42" name="floorRect" type="rectie" gid="14" x="256" y="1280" width="256" height="256"/>
</objectgroup>
</map>
'прямоугольник прямоугольника = rectangleObject.getRectangle();' Это, как вы получите прямоугольник COORDS. Какова ваша проблема? – noone
Я нашел свой ответ. Я поместил «платформы» в слое объекта Tiled с помощью значка «Вставить плитку», и в нем было помещено то, что выглядело как прямоугольник, но условие RectangleMapObject в моем lbgdx для каждого кода никогда не выполнялось, поскольку этот «Insert Tile» не делал никаких RectangleMapObjects. В конце я просто рисовал прямоугольники вокруг платформ в слое объектов с помощью значка «Вставить прямоугольник» в «Плиточный». Я уверен, что в LibGDX будет класс, который ищет TileMapObjects (хотя я пробовал TiledMapObjects, и это определенно не так) Во всяком случае, я перешел на эту проблему, но спасибо за ответ – user3191767