无限垂直世界
问题描述:
我在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);
}
}
它作品! 但是它将最后一个平台位置改变到很远的底部:
答
关于如何创建一个无限的世界?
使用世界实例转换原点方法。在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中,您应该能够找到类似的接口方法。
With 移位原点您将视口保持以物理世界原点(0,0)为中心(或靠近)的物理世界。这基本上是完成Yevhen Danchenko在评论中建议的实际手段。
使用此的一个原因是Box2D依赖的浮点运算的实现本身并不是无限宽的,也不是无限精确的。所以,移动事物有助于使事物更接近浮点值更准确的原点,并且假设您只会显示有限的x和y值范围,从而避免事物脱离实际可用值的范围。
这种类型的游戏只能模拟无穷大。只需移动所有平台,并将您的角色保持在同一垂直位置 –
您不必使用box2d作为涂鸦跳转克隆,实际上它只会使其更加复杂而没有理由。幸运的是,已经有一个使用libgdx完成的涂鸦跳转克隆,其中包含源代码,实际上由libgdx核心贡献者制作,其名为Super Jumper https://github.com/libgdx/libgdx-demo-superjumper – Lestat