2013-07-03 2 views
2

В настоящее время у меня есть игра, в которой есть карта 480x3200, и человек, падающий с вершины. Камера следует за человеком, и есть платформы, когда человек падает. Платформы должны быть осязаемыми, поэтому я могу вращать и перемещать их во время игры, поэтому я сделал это Image, когда он изначально был просто спрайтом.libGDX движущаяся камера и изображение

Когда я изменил его с спрайта на изображение, все сработало хорошо, за исключением случаев, когда человек падает (камера начинает двигаться вниз и следует за человеком), платформа также перемещается вместе с камерой, поэтому похоже, что это также падение. Платформа должна просто оставаться в одном месте и не перемещаться с камерой, так как камера продолжает двигаться вниз, платформа в конечном итоге исчезнет из виду.

Настройка платформы и добавить его на сцену

@Override 
public void show() { 
    ... 
    platform = new Image(new Texture(Gdx.files.internal("img_platform.png"))); 
    platform.setX(2); 
    platform.setY(110); 
    platform.setOrigin(platform.getWidth()/2, platform.getHeight()/2); 

@Override 
public void render(float delta) { 
    .... 
    stage.addActor(platform); 
} 

Я посмотрел вокруг API, и не может определить, нужно ли камера, сцена, или изображение, чтобы изменить, или что-то другое о котором я не думал. Есть идеи?

Edit:

public WorldRenderer(FallDown game, SpriteBatch batch, World w) { 
    this.cam = new OrthographicCamera(CAMERA_WIDTH, CAMERA_HEIGHT); 
    this.cam.position.set(CAMERA_WIDTH/2, CAMERA_HEIGHT/2, 0); 
    this.cam.setToOrtho(false, CAMERA_WIDTH, CAMERA_HEIGHT); 
    cam.position.set(CAMERA_WIDTH/2, 105, 0); 
    stage = new Stage(480, 800, true); 

    platformTexture = new Image(new Texture(Gdx.files.internal("img_platform.png"))); 
    platformTexture.setX(2); 
    platformTexture.setY(100); 
    platformTexture.setOrigin(platformTexture.getWidth()/2, platformTexture.getHeight()/2); 
    ... 

} 

public void render(float delta) { 
    stage.addActor(platformTexture); 
    moveCamera(); 
    ... 
} 

private void moveCamera() { 
    if (Person.getPosition().y < cam.position.y) 
     cam.position.y = Person.getPosition().y; 
    cam.update(); 
} 

... 
+0

Переместите stage.addActor (platform) в метод show(). В настоящее время вы повторно добавляете актера на сцену каждый цикл рендеринга. – Aert

+0

@Aert Я добавил stage.addActor (platform), чтобы показать(), и это дает мне исключение NullPointerException. Но я не думаю, что добавление в show() будет работать в моем случае, потому что мне также требуется обнаружение конфликтов на платформе – Jon

ответ

0

Вместо использования изображения я решил использовать Sprite. Это позволяет мне делать все, что мне нужно делать, и у меня нет проблемы со сценой, просто являющейся текущим экраном.

1

Обычно эта вещь достигается путем установки вашей камеры на актера (который падает) и перемещение актера вниз. Когда актер движется вниз, камера будет следить за ним, сохраняя платформы статичными.

Помогает ли это?

+0

Вот как я сейчас устанавливаю свою камеру. У меня есть метод, который перемещает камеру вниз, когда позиция человека попадает в определенную точку. – Jon

+0

Sry my bad. На самом деле вам нужно взять 2 камеры. обычно один берется за игровой экран, а другой - в игровом мире. Камера в игровом экране не будет двигаться. теперь нарисуйте свои платформы с помощью статической камеры и нарисуйте свои другие вещи с помощью движущейся камеры. Идея проста, все статические вещи в игре будут использовать статическую камеру, а динамические вещи будут использовать движущуюся камеру. Для любого контрольного источника супер перемычки. https://github.com/libgdx/libgdx/tree/master/demos/superjumper – Pranav008

+0

Я вроде как это настроил так, как вы говорите раньше. У меня есть камера в моем GameScreen, которая не перемещается, а другая движущаяся камера в WorldRenderer (также где я изначально рисовал свои спрайты на платформе). Я перевел свой код на WorldRenderer и попытался заставить его работать, но Image все еще не остается в одном месте. Я редактировал свой пост и обновлял свой текущий код. Я ценю помощь до сих пор – Jon

Смежные вопросы