2017-02-18 1 views
2

Java (Android Studio)에서 코드 libgdx, ... 볼을 터치 할 때 원을위한 발사체를 계산하는 방법 화면을 어떻게 표시합니까? 농구를 찍는 것과 같습니다 .... 예를 들어 원이 50 °의 각도로 0,0 (x, y)에 있습니다 ... 고맙습니다!Java (Android Studio)에서 코드 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

당신은 Box2D의 다음 발사체 움직임이 당신 Box2D의 엔진에 의해 처리됩니다 사용하는 경우. 선형 속도를 적용하면됩니다.

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

고맙습니다. 고맙습니다. –

관련 문제