2017-02-06 2 views
-1

Так что я просто пытаюсь сделать свой игровой персонаж, который является текстурой (ball), чтобы вскочить в воздух, а затем вернуться назад в положение, в котором оно начиналось при нажатии экрана. Мне просто интересно, может ли кто-нибудь дать мне пример кода или помочь мне сделать это с моим текущим кодом, который ниже. Я в основном рисовал фон и текстуру мяча и позиционировал мяч, где я хочу, чтобы он начал прыжок. Текстура шарика - это то, что я хочу сделать прыгать прямо вверх.Как сделать «текстуру» прыгать вверх и вернуться в исходное положение андроид java libgdx

public class MyGdxGame extends ApplicationAdapter { 
    SpriteBatch batch; 
    Texture background; 
    Texture ball; 

    @Override 
    public void create() { 
     batch = new SpriteBatch(); 
     background = new Texture("gamebackground.png"); 

     ball = new Texture("ball2.png"); 
     ball.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest); 
    } 

    @Override 
    public void render() { 
     batch.begin(); 
     float scaleFactor = 2.0f; 
     batch.draw(background, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
     batch.draw(ball, 80, 145, ball.getWidth() * scaleFactor, ball.getHeight() * scaleFactor); 
     batch.end(); 
    } 

    @Override 
    public void dispose() {} 
} 
+0

Вы можете использовать физический движок, такой как box2d, или движок tween с libgdx, который поможет вам с интерполяцией объектов. – Hllink

ответ

0

Существует миллион способов сделать это.

Вот простой (и не очень гибкий способ). Создайте класс Ball, который имеет переменные для позиции x, y, скорости и ускорения. Затем дать ему способ обновления для применения ускорения и скорости в положение:

public class Ball { 

    public static final float GRAVITY = -100; // size depends on your world scale 
    public static final float BOUNCE_DAMPENING = 0.6f; 

    public final Vector2 position = new Vector2(); 
    public final Vector2 velocity = new Vector2(); 
    public final Vector2 acceleration = new Vector2(0, GRAVITY); 

    public void update(){ 
     float dt = Gdx.graphics.getDeltaTime(); 
     velocity.add(acceleration.x * dt, acceleration.y * dt)); 
     position.add(velocity.x * dt, velocity.y * dt); 

     if (position.y <= 0){ // hit ground, so bounce 
      position.y = -position.y * BOUNCE_DAMPENING; 
      velocity.y = -velocity.y * BOUNCE_DAMPENING; 
     } 
    } 

} 

Это очень зачаточном способ обработки физики. Было бы сложнее использовать Box2D, но выше всего хорошо, если вы просто учитесь.

Теперь вам нужно создать экземпляр шарика и использовать его для отслеживания положения мяча. При рисовании используйте положение объекта Ball. И вы можете реагировать на краны, чтобы применить скорость.

public class MyGdxGame extends ApplicationAdapter { 
    SpriteBatch batch; 
    Texture background; 
    Texture ballTexture; 
    Ball ball; 

    @Override 
    public void create() { 
     batch = new SpriteBatch(); 
     background = new Texture("gamebackground.png"); 

     ballTexture = new Texture("ball2.png"); 
     ballTexture.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest); 

     ball = new Ball(); 
    } 

    @Override 
    public void render() { 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // don't forget to clear screen 

     if (Gdx.input.justTouched()) 
      ball.velocity.y += 100; 
     ball.update(); 

     batch.begin(); 
     float scaleFactor = 2.0f; 
     batch.draw(background, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
     batch.draw(ballTexture, ball.position.x, ball.position.y, ballTexture.getWidth() * scaleFactor, ballTexture.getHeight() * scaleFactor); 
     batch.end(); 
    } 

    @Override 
    public void dispose() { 
     batch.dispose(); 
     background.dispose(); 
     ballTexture.dispose(); 
    } 
} 

Вам также необходимо ознакомиться с блоками пикселей и единицами мира и как решить проблему масштаба с помощью видовых экранов. См. https://xoppa.github.io/blog/pixels/ и https://github.com/libgdx/libgdx/wiki/Viewports

+0

Я только что пробовал это и в основном, похоже, работает (Большое спасибо за вашу помощь!). Единственное, что не работает, это эта часть: speed.add (ускорение * dt); position.add (скорость * dt); Ошибка с '*' не может быть использована в части com.badlogic.gdx.math.Vector2? –

+0

Я обязательно посмотрю на единицы пикселей, спасибо –

+0

Теперь он работает, спасибо! Еще один быстрый вопрос: как отредактировать скорость, с которой мяч подталкивается вверх, чтобы ускорить его рост? –

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