如何移动类似于正弦波运动的物体?-LibGdx

时间:2017-11-15 13:01:58

标签: libgdx

我希望以锯齿形运动垂直移动物体,类似于sisnusoidal运动;

enter image description here

我正在移动我的对象:

public void moveLeavesDown(float delta) {

    setY(getY() - (getSpeed()* delta));

}

我怎样才能进行这种运动?

1 个答案:

答案 0 :(得分:0)

您可以添加计时器并使用math.sin函数为叶子添加偏移量。

下面的演示展示了如何完成:

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector2;

public class Test extends ApplicationAdapter{

    float time =0; // timer to store current elapsed time
    Vector2 leaf = new Vector2(150,150); // holds the leaf x,y pos
    float sinOffset = 0; // the offset for adding to the image
    private SpriteBatch sb; // spritebatch for rendering
    TextureRegion tx;  // a texture region(the leaf)


    @Override
    public void create() {
        sb = new SpriteBatch(); // make spritebatch
        tx = DFUtils.makeTextureRegion(10, 10, "FFFFFF"); // makes a textureRegion of 10x10 of pure white

    }

    @Override
    public void render() {
        // clear screen
        Gdx.gl.glClearColor(0f, 0f, 0f, 0f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        leaf.y = leaf.y-0.2f; // move downwards
        time+= Gdx.graphics.getDeltaTime(); // update sin timer
        sinOffset =(float)Math.sin(time)*10; // calculate offset

        // draw leaf with offset
        sb.begin();
        sb.draw(tx, leaf.x+sinOffset, leaf.y);
        sb.end();

    }
}