2017-10-16 97 views
1

我正在建立亚军游戏。 地面类。Libgdx 2d楼动画

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 任何帮助将被赞赏。

更新:图片 Image 1

+0

你是指地面纹理之间的差距?我们能看到这个问题的一个形象吗? –

+0

更新已添加图像.. –

回答

0

WOW简单的解决方案不敢相信我没看出来。

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; 

}