2016-06-25 13 views
0

Я бы хотел, чтобы спрайт не мог выйти за пределы экрана. Я попытался, но я сделал это отскок от края.Избегайте изображений, чтобы выйти за пределы экрана (Android) (libGDX)

my try

Но мне нужно, чтобы остановить движение к краю (ы), которые сталкиваются с изображением. (без отскока)

Например: вы перетаскиваете по диагонали вправо-вправо, спрайт сталкивается с правым краем и по-прежнему скользит вниз до угла.

Вроде как это:

how it should work

Мой код попытка (см первое изображение результата):

public class MyGdxGame extends ApplicationAdapter { 
SpriteBatch batch; 
Texture img; 
Sprite sprite; 
float offsetX; 
float offsetY; 

@Override 
public void create() { 
    batch = new SpriteBatch(); 
    img = new Texture("badlogic.jpg"); 
    sprite = new Sprite(img); 

} 

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

    batch.begin(); 
    sprite.draw(batch); 
    batch.end(); 

    /* 
    Bouncing sprite off the edge. 
    */ 

    if(sprite.getX() <= 0){ 
     sprite.setX(1); 
    } else if(sprite.getX() + sprite.getWidth() >= Gdx.graphics.getWidth()){ 
     sprite.setX(Gdx.graphics.getWidth() - sprite.getWidth() - 1); 
    } else if(sprite.getY() <= 0){ 
     sprite.setY(1); 
    } else if (sprite.getY() + sprite.getHeight() >= Gdx.graphics.getHeight()) { 
     sprite.setY(Gdx.graphics.getHeight() - sprite.getHeight() - 1); 
    } 

    if (Gdx.input.justTouched()) { 

      offsetX = Gdx.input.getX() - sprite.getX(); 
      offsetY = Gdx.graphics.getHeight() - Gdx.input.getY() - sprite.getY(); 

    } 

    if (Gdx.input.isTouched()){ 

     sprite.setPosition(Gdx.input.getX() - offsetX, (Gdx.graphics.getHeight() - Gdx.input.getY()) - offsetY); 

    } 

} 

} 
+0

И каков результат вашей попытки ?? –

+0

@ ΦXocę 웃 Пepeúpa Он отскакивает! :) Как первое изображение. Мне нужно избавиться от этого отскока. – Beckham

ответ

1

Логика в том, что вы позволяете изображение выйти за пределы вы выбрали и рендеринг это затем расчет положения x и получение вернув его обратно внутрь.

Очевидно, вам необходимо рассчитать границы и на основании этого вы решите, какие будут новые X и Y, прежде чем рендеринг.

Вы можете создать метод под названием calculatePosition, который принимает вход пользователя (x, y), а затем устанавливает положение спрайта.

Редактирование isTouched() для

calculatePosition(Gdx.input.getX() - offsetX, (Gdx.graphics.getHeight() 0 Gdx.input.getY()) - offsetY); 

Затем добавив в свой код:

private void calculatePosition(float x, float y) { 
    float minX = 0; 
    float maxX = Gdx.graphics.getWidth() - sprite.getWidth(); 
    float minY = 0; 
    float maxY = Gdx.graphics.getHeight() - sprite.getHeight(); 

    float newX = Math.min(maxX, Math.max(x, minX)); 
    float newY = Math.min(maxY, Math.max(y, minY)); 

    sprite.setPosition(newX, newY); 
}