无限的垂直世界

时间:2017-05-05 17:20:35

标签: java android libgdx box2d

我在Box2d中创建了两个实体,它们是:Player和Platform;

我想创建像Doodle Jump这样的游戏,但我不知道如何创建“生成平台的无限世界”;

我的代码在哪里创建数组:

buckets = new Array<Bucket>();

for(int i=1;i<BUCKET_COUNT;i++){
    buckets.add(new Bucket(W/2,BUCKET_MARGIN*i, world));
}

这个代码我在“尝试”改变相机位置变化时每个平台的位置:

for(Bucket bucket : buckets){
        if(cam.position.y - (cam.viewportHeight/2) > bucket.getBody().getPosition().y + 22/PPM){
            bucket.repos(W/2,bucket.getBody().getPosition().y + BUCKET_MARGIN);
        }
    }

有效! 但是它将最后的平台位置改为最远的底部:

1 个答案:

答案 0 :(得分:1)

关于如何创造无限世界?

使用世界实例移位原点方法。在Box2D 2.3.2 C ++库代码中,这是b2World::ShiftOrigin(const b2Vec2& newOrigin)方法。以下是此方法声明的摘录及其文档:

/// Shift the world origin. Useful for large worlds.
/// The body shift formula is: position -= newOrigin
/// @param newOrigin the new origin with respect to the old origin
void ShiftOrigin(const b2Vec2& newOrigin);

在Java中,您应该能够找到类似的接口方法。

使用移位原点,您可以将视口保持在以(或接近)物理世界原点(0,0)为中心的物理世界中。这基本上是完成Yevhen Danchenko在评论中所建议的实用方法。

使用它的一个原因是Box2D所依赖的浮点运算的实现本身并不是无限宽范围,也不是无限精确。因此,移动事物有助于使事物更接近原点,浮点值更准确,并使事物远离实际可用值的范围,假设您只显示有限范围的x和y值。 / p>