【问题标题】:Libgdx 2d floor AnimationLibgdx 2d 地板动画
【发布时间】:2017-10-16 17:47:51
【问题描述】:

我正在构建 Runner Game。 地面类。

public class Ground extends Actor {

private Texture texture;
private ArrayList<Vector2> groundLocations;
private float speed;
private float cameraLeft, cameraRight;
private int textureWidth;


public Ground() {
    this.cameraRight = Const.GAME_WIDTH + Const.GAME_MARGIN;
    this.cameraLeft = 0 - Const.GAME_MARGIN;
    texture = new Texture(Gdx.files.internal("ui/ground.png"));
    groundLocations = new ArrayList<Vector2>();
    init();
}

public void setSpeed(float speed) {
    this.speed = speed;
}

private void init() {

    textureWidth = texture.getWidth();
    float currentPosition = cameraLeft;
    while (currentPosition < cameraRight) {

        Vector2 newLocation = new Vector2(currentPosition, 0);
        groundLocations.add(newLocation);
        currentPosition += textureWidth;
    }

}

public int getFloorHeight() {
    return texture.getHeight();
}


@Override
public void act(float delta) {
    super.act(delta);
    int size = groundLocations.size();

    for (int i = 0; i < size; i++) {
        Vector2 location = groundLocations.get(i);
        location.x -= delta * speed;
        if (location.x < cameraLeft) {

            location.x = findMax().x + textureWidth;
        }
    }

}

private Vector2 findMax() {
    return Collections.max(groundLocations, new Vector2Comparator());
}


@Override
public void draw(Batch batch, float parentAlpha) {
    super.draw(batch, parentAlpha);
    for (Vector2 location : groundLocations) {
        batch.draw(texture, location.x, location.y);
    }
}




public void dispose() {
    if (texture != null)
        texture.dispose();
}

}

  • 地面纹理为 128x128

  • GAME_WIDTH = 1024f

  • GAME_MARGIN = 250f

  • 速度 = 变化。

当地面根据速度和 FPS 移动时。 (速度 * 增量) 问题是:地面纹理之间总是存在间隙。经过一定的运动 函数 findMax 找到 X 最大的纹理 任何帮助将不胜感激。

更新:图片

【问题讨论】:

  • 地面纹理之间的间隙是什么意思?我们可以看到问题的图像吗?
  • 更新添加的图片..

标签: java android libgdx


【解决方案1】:

WOW Simply Solution 不敢相信我没有看到它。

   for (int i = 0; i < size; i++) {
    Vector2 location = groundLocations.get(i);
    if (location.x < cameraLeft) {

        location.x = findMax().x + textureWidth;
    }          
    location.x -= delta * speed;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 2014-06-20
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    相关资源
    最近更新 更多