2014-09-05 3 views
1

Почему-то, когда я убегаю, блоки позади меня по краю экрана исчезают. Трудно получить выстрел из них делают это, потому что отличается каждый кадр, но это то, что он выглядит следующим образом:libGDX - проблема рендеринга с плиткой

enter image description here

Если кто-то может пожалуйста, скажите мне, почему это его, что было бы удивительным делать:)

public void show() { 
    map = new TmxMapLoader().load("assets/maps/map.tmx"); 

    renderer = new OrthogonalTiledMapRenderer(map); 
    sr = new ShapeRenderer(); 
    sr.setColor(Color.CYAN); 
    Gdx.gl.glLineWidth(3); 

    camera = new OrthographicCamera(); 
} 

public void render(float delta) { 
    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    camera.position.set(player.getX() + player.getWidth()/2, player.getY() + player.getHeight()/2, 0); 
    camera.update(); 

    renderer.setView(camera); 

    renderer.render(background); 

    renderer.getSpriteBatch().begin(); 
    player.draw(renderer.getSpriteBatch()); 
    renderer.getSpriteBatch().end(); 

    renderer.render(foreground); 

    // render objects 
    sr.setProjectionMatrix(camera.combined); 
    for(MapObject object : map.getLayers().get("objects").getObjects()) 
     if(object instanceof RectangleMapObject) { 
      RectangleMapObject rectObject = (RectangleMapObject) object; 
      Rectangle rect = rectObject.getRectangle(); 
      if(rectObject.getProperties().containsKey("gid")) { // if it contains the gid key, it's an image object from Tiled 
       int gid = rectObject.getProperties().get("gid", Integer.class); 
       TiledMapTile tile = map.getTileSets().getTile(gid); 
       renderer.getSpriteBatch().begin(); 
       renderer.getSpriteBatch().draw(tile.getTextureRegion(), rect.x, rect.y); 
       renderer.getSpriteBatch().end(); 
      } else { // otherwise, it's a normal RectangleMapObject 
       sr.begin(ShapeType.Filled); 
       sr.rect(rect.x, rect.y, rect.width, rect.height); 
       sr.end(); 
      } 
     } else if(object instanceof CircleMapObject) { 
      Circle circle = ((CircleMapObject) object).getCircle(); 
      sr.begin(ShapeType.Filled); 
      sr.circle(circle.x, circle.y, circle.radius); 
      sr.end(); 
     } else if(object instanceof EllipseMapObject) { 
      Ellipse ellipse = ((EllipseMapObject) object).getEllipse(); 
      sr.begin(ShapeType.Filled); 
      sr.ellipse(ellipse.x, ellipse.y, ellipse.width, ellipse.height); 
      sr.end(); 
     } else if(object instanceof PolylineMapObject) { 
      Polyline line = ((PolylineMapObject) object).getPolyline(); 
      sr.begin(ShapeType.Line); 
      sr.polyline(line.getTransformedVertices()); 
      sr.end(); 
     } else if(object instanceof PolygonMapObject) { 
      Polygon poly = ((PolygonMapObject) object).getPolygon(); 
      sr.begin(ShapeType.Line); 
      sr.polygon(poly.getTransformedVertices()); 
      sr.end(); 
     } 
} 
+1

Что карта визуализации вы используете? –

+0

Im, использующий графику libGDX, OrthogonalTiledMapRenderer – Divergent

+0

Попробуйте переключиться на «OrthoCahedTiledMaprenderer», чтобы узнать, все еще проблема. Кроме того, отправьте функцию, в которой вы отображаете карту. Существуют ли какие-либо другие экземпляры «SpriteBatch» помимо того, что используется средством отображения карты? –

ответ

0

Я пользуюсь OrthogonalTiledMapRenderer.

Это теперь работает и плитки (большие плитки) не исчезнет:

float x = orthographicCamera.position.x - orthographicCamera.viewportWidth * orthographicCamera.zoom; 
    float y = orthographicCamera.position.y - orthographicCamera.viewportHeight * orthographicCamera.zoom; 

    float width = orthographicCamera.viewportWidth * orthographicCamera.zoom * 2; 
    float height = orthographicCamera.viewportHeight * orthographicCamera.zoom * 2; 

    orthogonalTiledMapRenderer.setView(orthographicCamera.combined, x, y, width, height); 
Смежные вопросы