- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在玩游戏的过程中,我希望能够改变 Box2D 世界中的地面边缘。我创建了一个地面主体,然后我在主体上添加了一个地面固定装置。例如,以下代码将在我的 Box2D 世界中屏幕底部上方 20 像素处创建一个平坦的地面:
b2BodyDef groundBodyDef;
groundBodyDef.type = b2_staticBody;
groundBodyDef.position.Set(0, 0);
groundBody = world->CreateBody(&groundBodyDef);
b2PolygonShape groundShape;
b2FixtureDef groundFixtureDef;
groundFixtureDef.shape = &groundShape;
groundFixtureDef.density = 0.0;
CGSize screenSize = [CCDirector sharedDirector].winSize;
int num = 2;
b2Vec2 verts[] = {
b2Vec2(-screenSize.width / 100.0, 20.0 / 100.0),
b2Vec2(screenSize.width / 100.0, 20.0 / 100.0)
};
for(int i = 0; i < num - 1; ++i) {
b2Vec2 offset = b2Vec2(screenSize.width/2/PTM_RATIO,
20.0/2/PTM_RATIO);
b2Vec2 left = verts[i] + offset;
b2Vec2 right = verts[i+1] + offset;
groundShape.SetAsEdge(left, right);
groundBody->CreateFixture(&groundFixtureDef);
}
假设我需要更改 verts 数组以具有不同的地面固定装置定义?例如,是否可以在玩家移动之间将地面动态升高 50 像素?我是否需要删除整个地面体并重新创建地面体和夹具,或者我是否可以只删除或修改现有的地面夹具?
最佳答案
我发现它可以破坏当前的 groundBody,然后创建一个新的 groundBody 和 ground fixture 工作正常。我不知道这是否最适合性能,但它的工作方式符合我的预期。
所以基本上,在游戏期间的适当时间,我会执行以下操作:
world->DestroyBody(groundBody);
然后我重新执行上面问题陈述中显示的代码,将 verts 数组中的 20.0 像素值替换为 50.0 像素值,如下所示:
b2Vec2 verts[] = {
b2Vec2(-screenSize.width / 100.0, 50.0 / 100.0),
b2Vec2(screenSize.width / 100.0, 50.0 / 100.0)
}
关于ios - 如何更改 box2d 地面体中地面固定装置的边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15073261/
我想做同样的事情:(没有复制球体) http://people.mozilla.org/~sicking/webgl/ray.html 我做到了,它有效,但反射太大:/ var groundTextu
我知道做水平和垂直卷轴游戏(如马里奥),在这种游戏类型中,角色与用户的距离始终相同。字符仅在水平滚动条中左右移动,在垂直滚动条中上下移动。 但有些 2D 游戏中的角色可以在场景中自由移动,例如图形冒险
如何从 bigcommerce API(Ground、Express)获取订单“运输方式”? 客户下单时选择的送货方式。 谢谢 最佳答案 请参阅此 page , 获取特定订单的运输相关数据。 关于bi
我需要一个 C# 函数来执行以下操作:从 gps 点 A 向 gps 点 B 的方向移动 50 米,并计算该点的 GPS 坐标。 例如我有两个坐标: LatLon LatLonA = new LatL
我是一名优秀的程序员,十分优秀!