2016-06-25 54 views
0

我想讓精靈不能出現在屏幕邊緣之外。我試過了,但是我把它從邊緣反彈了出來。避免圖像出現在屏幕外(Android)(libGDX)

my try

但我需要停止向與圖像碰撞邊緣(S)的運動。 (沒有反彈)

例如:你向右下方拖動,精靈與右邊緣碰撞,然後向下滑動直到角落。

有點像這樣:

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); 
}