注:因为 b2PolygonShape 类有 SetAsBox 方法,所以看起来好像我们可以直接把屏幕的宽和高传给这 个方法以得到包含屏幕区域的刚体。不过如果你这样做的话,实际上生成的是一个实心的刚体。任何 添加到屏幕上的动态刚体将会被包含在一个实心刚体中,而不是我们需要的空心刚体。结果是添加到 屏幕上的动态刚体将会与实心刚体发生碰撞,从而以很快的速度离开屏幕。因此,屏幕的四个边需要 单独创建,以便只有四个边是实心的,中间则是空心的,用于放入其它刚体。
return ccpMult(CGPointMake(vec.x, vec.y), PTM_RATIO); }
在 Box2D 世界中添加盒子(动态刚体) 把 David Gervais 的 90 度角瓷砖集(dg_grounds32.png)添加到了 PhysicsBox2D01 项目的 Resources 文件夹中。这些瓷砖都是 32x32 像素大小的, 所以它们的尺寸刚好是 1x1 米大小。列表 12-3 展示了
现在我们讨论之前没有解释过的那些边角变量。请注意以下代码中,屏幕的宽度和高度值除以一个名 为 PTM_RATIO 的常量,把像素值转换成了以米为单位来计算长度: //需要用到的一些数值
CGSize screenSize = [CCDirector sharedDirector].winSize; float widthInMeters = screenSize.width / PTM_RATIO; float heightInMeters = screenSize.height / PTM_RATIO; b2Vec2 lowerLeftCorner = b2Vec2(0, 0); b2Vec2 lowerRightCorner = b2Vec2(widthInMeters, 0); b2Vec2 upperLeftCorner = b2Vec2(0, heightInMeters); b2Vec2 upperRightCorner = b2Vec2(widthInMeters, heightInMeters);