无限垂直世界



我在box2d中创建了两个身体,它们是:播放器和平台;

我想创建像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);
        }
    }

它有效!它将最后一个平台位置更改为距离很远:

关于如何创建无限世界?

使用世界实例 shift Origin 方法。在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中,您应该能够找到类似的接口方法。

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

的原因是,Box2D所依赖的浮点算术的实现本身不是无限宽的,也不是无限准确的。因此,转移事物有助于使事物更接近浮点值更准确的原点,并防止事物摆脱实际可用值的范围,假设您只会显示有限的x和y值范围。<<<<<<<<<<<<<</p>

最新更新