如何在鼠标上旋转Box2D世界固定装置

时间:2019-01-16 17:41:21

标签: java libgdx box2d

我想将播放器的手臂指向窗口中的鼠标,这是我无法找到如何设置其旋转并指向鼠标的灯具的手臂代码

package com.mygdx.game.Sprites.player;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.mygdx.game.PlayScreen;
import com.mygdx.game.main;



@SuppressWarnings("unused")
public class LArm extends Sprite {
    public LArm(PlayScreen screen){
        setBounds(getX(), getY(), 3 / main.PPM, 8 / main.PPM);
        setPosition(Player.b2body.getPosition().x, (float) Player.b2body.getPosition().y );
        setRegion(new Texture(Gdx.files.internal("LArm.png")));

    }
    public void update(float dt) {
        //setRotation(to the mouse);
        if(Player.runningRight)
            setPosition(Player.b2body.getPosition().x-1/main.PPM,Player.b2body.getPosition().y-8/main.PPM);
        if(!Player.runningRight)
            setPosition(Player.b2body.getPosition().x-2/main.PPM,Player.b2body.getPosition().y-8/main.PPM);
        setRegion(new Texture(Gdx.files.internal("LArm.png")));
        setOrigin((float)1.5 / main.PPM, 8 / main.PPM);

    }
}

1 个答案:

答案 0 :(得分:0)

Sprite具有方法#setRotation(float degrees)来旋转图像一定程度。

您所需要做的就是计算对象与鼠标之间的度数,this is one of many posts已经被解答了无数次,它计算了两个坐标之间的弧度,因此我将其更改为度数:

double angle = Math.toDegrees(Math.atan2(mouse.x - arm.x, mouse.y - arm.y));

我假设您具有鼠标坐标,否则设置InputProcessor是一个好主意。现在,您的情况下的特定坐标可能会有所不同,您可能需要计算鼠标与播放器之间的角度而不是手臂来保持一致,在这种情况下,只需根据自己的喜好更改坐标即可。希望这对您有帮助