2016-06-25 5 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

をそして、あなたの試みの結果は何ですか??:

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

次に、あなたのコードにこれを追加するには、あなたのisTouchedを()の編集 –

+0

@ΦXocen웃いepepeúpaそれはバウンス! :)最初のイメージのように。私はそのバウンスを取り除く必要があります。 – Beckham

答えて

1

ロジックを使用すると、画像が境界を越えて行くことを許可しているということですあなたが選んだレンダリングそれ次に x位置を計算して取得するそれを内側に戻してください。

明らかに、境界を計算し、それに基づいて、新しいXとYをレンダリングする前にそれを決める必要があります。

calculatePositionというメソッドを作成して、ユーザーの入力(x、y)を取り、スプライトの位置を設定することができます。

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); 
} 
関連する問題