2016-03-08 5 views
1
  • Основной вопрос: как ВСЕГДА сохранить ваши спрайты в Fitviewport? Как сохранить ссылку на представление, чтобы иметь правильные координаты относительно того, где рисовать?

Я пытаюсь вызвать врагов на экран игрового процесса. Но это управляется FitViewport, а враги и даже игрок могут перемещаться за пределы FitViewport на определенных разрешениях экрана. До сих пор проблема, похоже, была в оси Y.Как нарисовать спрайт в представлении FitViewport. libgdx

FitViewport сделан так:

gameCamera = new OrthographicCamera(); 
gameCamera.setToOrtho(false); 
gameViewport = new FitViewport(MyGame.WORLD_WIDTH,MyGame.WORLD_HEIGHT,gameCamera); 
gameViewport.setScreenBounds(0,0,MyGame.WORLD_WIDTH,MyGame.WORLD_HEIGHT); 

Затем положение камеры обновляется, как это в методе изменения размера():

gameViewport.update(width,height); //not used when using the virtual viewport in the render method. 
gameCamera.position.set(player.position.x + 200,player.position.y, 0); 

Затем обновление() метод называет игрока собственного update(), который включает следующие строки:

//POSITION UPDATE 
if (this.position.x<0) this.position.x=0; 
if (this.position.x>Gdx.graphics.getWidth() - width) this.position.x= Gdx.graphics.getWidth() - width; 
if (this.position.y<0) this.position.y = 0; 
if (this.position.y>PlayScreen.gameViewport.getScreenHeight() - height) this.position.y = PlayScreen.gameViewport.getScreenHeight()- height; 

Уведомление об оси X Я все еще использующие размеры Gdx.graphics, потому что я еще не сделал его работу с PlayScreen.gameViewport.getScreenHeight() (для этой цели для игрового представления был установлен статический).

Также на вражескую икру (проблема, связанная в том, что они икру за пределами экрана Y с точки зрения того, что я вижу) у меня есть этот код внутри метода Update() на экране реализующей все эти видовые:

//Alien Spawn 
    if (System.currentTimeMillis() - lastZSpawn >= SpawnTimer){ 
     count++; 
     lastZSpawn= System.currentTimeMillis(); 
     for (int i=0;i<count;i++){ 
      int x = Gdx.graphics.getWidth(); 
      int y = random.nextInt((int)gameViewport.getScreenHeight() - Alien.height); 
      if (entities.size()<6){ 
       entities.add(new Alien(new Vector2(x,y),1, alienImages,(float)((0)))); 
      } 
     } 

    } 

Кроме того, использование gameViewport.getScreenHeight() здесь приводит к тому, что Gdx.graphics не дает правильный результат (это дало мне ту же проблему).

рендер) метод внедрен правильно (с точки зрения партии и применения в иллюминатор:

MyGame.batch.setProjectionMatrix(gameCamera.combined); 
gameViewport.apply(); 
MyGame.batch.begin(); 

for (int i = entities.size()-1; i>=0;i--){ 
    entities.get(i).render(); 
} 

ответ

0

Ответ на мою проблему опубликован мной в другом вопросе, который также был вызван путаницей в реализации FitViewports и использованием свойств WorldWidth и WorldHeight в качестве координат ссылки при рисовании объектов в игре, а также правильной настройке положение камеры, учитывающее эти значения. Ответ здесь, хотя его текст, а не код, и его в основном то, что я уже написал в этом самом посте. FitViewport doesnt scale properly Libgdx

0

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

public static OrthographicCamera update(int width,int height){ 
     instance = new OrthographicCamera(width, height); 
     instance.setToOrtho(false); 
     return instance; 
    } 
+0

У меня нет кода, который бы переустанавливал мои объекты внутри метода resize(). но плохо попробуйте намек на камеру. – rufoDev

+0

ОК, я устал от этого, но в моем устройстве ведьма - устройство с очень высоким разрешением, камера фокусируется, а не позиционируется по отношению к игроку. и все уменьшено, как будто FitViewport вообще отсутствует. Я использовал FitViewport именно для того, чтобы развернуть спрайты игры по желанию и сохранить пропорции – rufoDev

+0

, должен ли я обновить видовое окно так, чтобы я мог передать ему новый экземпляр камеры? – rufoDev