2017-02-18 17 views
2

Javaのコード(Androidスタジオ)libgdx、クリックするとボールのような円の発射体を計算する方法あなたはそれをどのように表示しますか? バスケットボールを撮影するようなもの ....例えば、円は0度(x、y)にあり、角度は50度です... THANKS !!あなたはBOX2Dを使用している場合は、発射の動きは、あなたのBOX2Dエンジンによって処理されJavaのコード(Androidスタジオ)libgdx、発射体の計算方法

I want like this

+0

質問は不明です。投稿と画像の例を見て、あなたが試したコードをいくつか追加してください。 – JonZarate

+0

ようこそスタックオーバーフロー! [ツアー](http://stackoverflow.com/tour)を見て回り、[ヘルプセンター](http://stackoverflow.com/help)、特に[どのように私に質問しますか良い質問?](http://stackoverflow.com/help/how-to-ask)と[ここで私はどのような話題を聞くことができますか?](http://stackoverflow.com/help/on-topic)。 –

+0

box2dを使用していますか? – Aryan

答えて

1

。線速度を適用するだけです。

float speed,angle; 

Vector2 startingVelocity =new Vector2(speed,speed); 
startingVelocity.rotate((float) angle - 45); 

body.setLinearVelocity(startingVelocity); 

速度と角度はユーザーが指定します。

box2dを使用していない場合は、このようにボールの位置と速度を処理する必要があります。

public class TestGame extends Game implements InputProcessor{ 

    SpriteBatch spriteBatch; 
    Sprite ball; 
    Texture ballTex; 
    boolean isFired; 

    Vector2 gravity; 
    private float throwAngle=50; 
    private float deltaTime=2; 
    private Vector2 initialVelocity; 

    @Override 
    public void create() { 

     spriteBatch=new SpriteBatch(); 
     ballTex=new Texture("image/ball.png"); 
     ball=new Sprite(ballTex); 
     ball.setSize(50,50); 
     ball.setPosition(0,0); 

     Gdx.input.setInputProcessor(this); 
     gravity=new Vector2(0, -Gdx.graphics.getHeight()*.05f); 
     float throwVelocity=Gdx.graphics.getWidth()*.3f; 
     initialVelocity=new Vector2((float)(throwVelocity*Math.sin(throwAngle * Math.PI/180)),(float)(throwVelocity*Math.cos(throwAngle * Math.PI/180))); 
    } 

    @Override 
    public void render() { 
     super.render(); 

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

     updateBall(); 

     spriteBatch.begin(); 
     ball.draw(spriteBatch); 
     spriteBatch.end(); 
    } 

    private void updateBall(){ 

     if(isFired){ 

      float delta=Gdx.graphics.getDeltaTime(); 
      initialVelocity.x=initialVelocity.x+gravity.x*delta*deltaTime; 
      initialVelocity.y=initialVelocity.y+gravity.y*delta*deltaTime; 

      ball.setPosition(ball.getX()+initialVelocity.x * delta * deltaTime,ball.getY()+initialVelocity.y * delta * deltaTime); 
     } 

    } 

    @Override 
    public void resize(int width, int height) { 
     super.resize(width, height); 
    } 

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

    @Override 
    public boolean keyDown(int keycode) { 

     return false; 
    } 

    @Override 
    public boolean keyUp(int keycode) { 
     return false; 
    } 

    @Override 
    public boolean keyTyped(char character) { 
     return false; 
    } 

    @Override 
    public boolean touchDown(int screenX, int screenY, int pointer, int button) { 

     isFired=true; 
     return false; 
    } 

    @Override 
    public boolean touchUp(int screenX, int screenY, int pointer, int button) { 
     return false; 
    } 

    @Override 
    public boolean touchDragged(int screenX, int screenY, int pointer) { 
     return false; 
    } 

    @Override 
    public boolean mouseMoved(int screenX, int screenY) { 
     return false; 
    } 

    @Override 
    public boolean scrolled(int amount) { 
     return false; 
    } 
} 
+0

ありがとう、ありがとう。 –

関連する問題