2017-06-07 10 views
0

タッチスクリーンがタッチされているかどうかをチェックして、テクスチャの位置を移動したいのですが。チェックがinput.isTouched()の場合はうまく動作し、タッチパネルに触れている間はスムーズに動きます。libGDX:ちょうどタッチの場合はスムーズに移動

public void update() { 
    if(input.isTouched()){ 
     x += 60 * Gdx.graphics.getDeltaTime() 
    } 
} 

public void render(SpriteBatch batch){ 
    batch.begin(); 
    batch.draw(texture, x, y); 
    batch.end(); 
} 

今度はinput.justTouched()のときのテクスチャの動きを実装したいと思います。この場合、私のテクスチャは、私がx += 600;をやっているときに1つのフレームだけに移動します。私の考えは、私のレンダリングメソッドの2番目のレンダリングメソッドですが、それは効率的ではなく正直なところ私は実際にどのように動作するのかわかりません。

+0

ない、私は問題を理解して、何を達成しようとしていますか? justTouched()は、画面に触れると一度だけ呼び出されるので、x + = 600は一度だけ呼び出されます。それがポイントです。あなたはそれが繰り返し呼び出されることを期待していますか? –

+0

はい、私は例えば20フレームで滑らかな動きを望み、1フレームに600単位で動きません。 –

+0

アプリの設定に応じて、いくつかの方法があります。クイックハックは、justTouched()でテクスチャのステータス/状態を設定し、カウンタを20に設定することができます。その後のupdate()コールでは、カウンタが1ずつインクリメントされ、デクリメントされます。カウンターヒット0、再配置を停止します。あなたが俳優と一緒にscened2dを使っているのなら、(moveByのような)行動を調べてください。またはこれらの2つの極端な間にある他のオプション。 –

答えて

0
if(Gdx.input.isTouched()){ // condition true when screen is currently touched. 
    x += 60 * Gdx.graphics.getDeltaTime(); 
} 

だから、何らかの理由で、あなたのケースでは、目的地に到達するのに必要なフレーム数に対して条件/フラグをtrueに維持する必要があります。

これを達成するために多くの可能な解決策を持って、そして最も単純である:

public class GdxTest extends ApplicationAdapter { 

    Texture texture; 
    SpriteBatch spriteBatch; 
    float x,y,endX; 

    @Override 
    public void create() { 

     texture=new Texture("badlogic.jpg"); 
     spriteBatch=new SpriteBatch(); 
     y=20; 
     x= endX=10; 
    } 

    @Override 
    public void render() { 

     Gdx.gl.glClearColor(1,1,1,1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     spriteBatch.begin(); 
     spriteBatch.draw(texture,x,y); 
     spriteBatch.end(); 

     if(Gdx.input.justTouched()){ // when new touch down event just occurred.   
     endX=600; // give destination 
     } 

     if(x<endX){ // this condition will true unless x reaches endX or crossed 
     x+=60 * Gdx.graphics.getDeltaTime(); 
     } 
    } 

    @Override 
    public void dispose() { 
     texture.dispose(); 
     spriteBatch.dispose(); 
    } 
}