java - Java(Android Studio) libgdx 中的代码,如何计算射弹

标签 java android libgdx

<分区>

Java 中的代码(Android Studio)libgdx,...当您单击/触摸屏幕时如何计算圆形(如球)的射弹以及如何显示它? 就像打篮球....例如圆在 0,0(x,y) 中,角度为 50 度... 谢谢!!

I want like this

最佳答案

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

关于java - Java(Android Studio) libgdx 中的代码,如何计算射弹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42315977/

相关文章:

java - 如何使用 apache poi 更改 docx 的 style.xml 中的字体大小

java - TreeMap - 同步文档说明

java - 使用 ADB 截取屏幕截图并在 java 中检索它而无需写入文件

java - 指向应用程序内部 Activity 的 anchor 标记超链接

android - Xamarin Forms MasterDetail 页面导航导致 Android 崩溃 [致命信号 6 (SIGABRT),代码 -6],适用于 iOS 和 UWP

java - TextureRegions setRegion 方法 libgdx java

java - libgdx 中的声音问题

Java:有没有可能拿一个GUI Panel,输出成图片?

android - 用于数据发布的 native 表与 ListView

java - Libgdx shaperenderer 圆由于缩放而绘制为三角形