如何在旋转后按指定方向移动Sprite?Libgdx - Java - Android

3
我有一个电子游戏,其中箭头会指向一侧并随着旋转的方向移动,例如:

enter image description here

在箭头旋转后,我需要将精灵向箭头指向的同一方向移动。以下是我尝试的代码:
int count = 0;
@Override
protected void handleInput() {
     if(Gdx.input.justTouched()){
         // move to the direction of pointing:
         arrow.setPosition(x, y);
     }

}

public void update(float dt){

    count++;
    // rotate sprite:
    arrow.setRotation(count);

}

你想要实现什么?在旋转精灵的同时移动它,还是先旋转精灵再移动它? - Draz
3个回答

2
在《使用LibGDX开始Java游戏开发》一书中,作者制作了一个游戏,我认为它展示了您想要的行为。该游戏是第三章中的“海星收集者”。玩家移动海龟以收集海星。左右箭头键旋转海龟,上箭头键使海龟向当前面对的方向前进。
游戏的源代码可以从作者的Github帐户这里下载。(我不知道为什么他把它放在了一个zip文件中。)
相关代码如下:
@Override
public void update(float dt) {
    // process input
    turtle.setAccelerationXY(0, 0);

    if (Gdx.input.isKeyPressed(Keys.LEFT)) {
        turtle.rotateBy(90 * dt);
    }
    if (Gdx.input.isKeyPressed(Keys.RIGHT)) {
        turtle.rotateBy(-90 * dt);
    }
    if (Gdx.input.isKeyPressed(Keys.UP)) {
        turtle.accelerateForward(100);
    }
    // ...

“turtle” 扩展一些自定义类,这些类又扩展了 “Actor”。
“accelerateForward” 的代码如下:
public void accelerateForward(float speed) {
    setAccelerationAS(getRotation(), speed);
}

然后,setAccelerationAS 的代码如下:
// set acceleration from angle and speed
public void setAccelerationAS(float angleDeg, float speed) {
    acceleration.x = speed * MathUtils.cosDeg(angleDeg);
    acceleration.y = speed * MathUtils.sinDeg(angleDeg);
}

请注意,最后一段代码可能正是用户unexistential所指的内容。
(如果您正在学习LibGDX和游戏开发,我推荐这本书。它非常好。)
另请参阅:

1
最简单的方法是使用旋转角度的正弦和余弦来确定平移向量的x和y分量。

0

我通过这个页面解决了问题:在此输入链接描述

        float mX = 0;
float mY = 0;
int velocity = 5;
private float posAuxX = 0;
private float posAuxY = 0;
int count = 0;
public void update(float dt){
    count2++;
    flecha.setRotation(count2);
    if (count2 >= 360){
        count2 =  0;
    }
    position = new Vector2((float) Math.sin(count2) * velocity,
            (float) Math.cos(count2 * velocity));
    mX = (float) Math.cos(Math.toRadians(flecha.getRotation()));
    mY = (float) Math.sin(Math.toRadians(flecha.getRotation()));
    position.x = mX;
    position.y = mY;
    if (position.len() > 0){
        position = position.nor();
    }
    position.x = position.x * velocity;
    position.y = position.y * velocity;
    posAuxX = flecha.getX();
    posAuxY = flecha.getY();

}

flecha.setPosition(posAuxX, posAuxY);

如果答案解决了你的问题,你应该将其标记为正确。 - DavidS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接