- Основной вопрос: как ВСЕГДА сохранить ваши спрайты в 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();
}
У меня нет кода, который бы переустанавливал мои объекты внутри метода resize(). но плохо попробуйте намек на камеру. – rufoDev
ОК, я устал от этого, но в моем устройстве ведьма - устройство с очень высоким разрешением, камера фокусируется, а не позиционируется по отношению к игроку. и все уменьшено, как будто FitViewport вообще отсутствует. Я использовал FitViewport именно для того, чтобы развернуть спрайты игры по желанию и сохранить пропорции – rufoDev
, должен ли я обновить видовое окно так, чтобы я мог передать ему новый экземпляр камеры? – rufoDev