我在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);
}
}
有效! 但是它将最后的平台位置改为最远的底部:
答案 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>