2015-11-15 4 views
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> 
+0

'прямоугольник прямоугольника = rectangleObject.getRectangle();' Это, как вы получите прямоугольник COORDS. Какова ваша проблема? – noone

+0

Я нашел свой ответ. Я поместил «платформы» в слое объекта Tiled с помощью значка «Вставить плитку», и в нем было помещено то, что выглядело как прямоугольник, но условие RectangleMapObject в моем lbgdx для каждого кода никогда не выполнялось, поскольку этот «Insert Tile» не делал никаких RectangleMapObjects. В конце я просто рисовал прямоугольники вокруг платформ в слое объектов с помощью значка «Вставить прямоугольник» в «Плиточный». Я уверен, что в LibGDX будет класс, который ищет TileMapObjects (хотя я пробовал TiledMapObjects, и это определенно не так) Во всяком случае, я перешел на эту проблему, но спасибо за ответ – user3191767

ответ

0

Я думаю, что это то, что вы ищете ...

if(object instanceof TextureMapObject) { 
     TextureMapObject mapObject = (TextureMapObject) object; 
     this.bounds = new Rectangle(mapObject.getX(), mapObject.getY(), 
            mapObject.getTextureRegion().getRegionWidth(), 
            mapObject.getTextureRegion().getRegionHeight()); 
    } 
    else 
     this.bounds = ((RectangleMapObject) object).getRectangle();