Java(Android Studio)libgdx中的代码,如何计算投射物

Java(Android Studio)libgdx中的代码,如何计算投射物,java,android,libgdx,Java,Android,Libgdx,Java(Android Studio)libgdx中的代码,。。。单击/触摸屏幕时,如何计算圆形(如球)的投射物,以及如何显示像打篮球一样…例如,圆圈在0,0(x,y)内,角度为50度。。。 谢谢 如果您使用的是box2d,则投射运动由您的box2d引擎处理。你只需要应用线速度 float speed,angle; Vector2 startingVelocity =new Vector2(speed,speed); startingVelocity.rotate((float) angle

Java(Android Studio)libgdx中的代码,。。。单击/触摸屏幕时,如何计算圆形(如球)的投射物,以及如何显示像打篮球一样…例如,圆圈在0,0(x,y)内,角度为50度。。。 谢谢


如果您使用的是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;
    }
}

问题还不清楚。张贴和图像示例,并添加一些您尝试过的代码。欢迎使用堆栈溢出!请拿起,四处看看,并通读,尤其是和。您使用的是box2d吗?如果您不使用box2d,那么您的球的初始速度是多少?是的,我使用的是box2d非常感谢,非常感谢。