ios - Box2D:如何使用 b2ChainShape 制作带有正方形的基于图 block 的 map

标签 ios swift box2d

我在这里与所谓的幽灵碰撞战斗,在一个简单的基于图 block 的 map 上,以圆圈作为玩家角色。

当对圆圈施加脉冲时,它首先开始正确弹跳,然后迟早会弹​​错(错误的角度)。

在互联网上查找时,我读到了 Box2D 中的一个问题(我使用 iOS Swift 和 Box2d Swift 端口)。

使用 b2ChainShape 没有帮助,但看起来我误解了它。我还需要使用“prevVertex”和“nextVertex”属性来设置幻影顶点。

但我很困惑。我有一张由盒子(简单的正方形)组成的简单 map ,所有盒子彼此相邻放置,形成一个封闭的房间。在我的圈子里,我看到这个问题就产生了冲动。

现在为了解决这个问题,我在 View 上放置的每个正方形/盒子的幽灵顶点应该放在哪里?我是否需要将任何顶点放置在 chainShape 的最后一个和第一个顶点附近,或者它是否需要成为当前框的下一个顶点之一?我不明白。 Box2D的手册没有解释这些幽灵顶点坐标从何而来。

下面您可以看到描述问题的图像。

enter image description here

一些显示墙壁和圆的物理部分的代码:

首先是墙壁部分:

let bodyDef = b2BodyDef()
bodyDef.position = self.ptm_vec(node.position+self.offset)
let w = self.ptm(Constants.Config.wallsize)
let square = b2ChainShape()
var chains = [b2Vec2]()
chains.append(b2Vec2(-w/2,-w/2))
chains.append(b2Vec2(-w/2,w/2))
chains.append(b2Vec2(w/2,w/2))
chains.append(b2Vec2(w/2,-w/2))
square.createLoop(vertices: chains)

let fixtureDef = b2FixtureDef()
fixtureDef.shape = square
fixtureDef.filter.categoryBits = Constants.Config.PhysicsCategory.Wall
fixtureDef.filter.maskBits = Constants.Config.PhysicsCategory.Player

let wallBody = self.world.createBody(bodyDef)
wallBody.createFixture(fixtureDef)

圆圈部分:

let bodyDef = b2BodyDef()
bodyDef.type = b2BodyType.dynamicBody
bodyDef.position = self.ptm_vec(node.position+self.offset)

let circle = b2CircleShape()
circle.radius = self.ptm(Constants.Config.playersize)
let fixtureDef = b2FixtureDef()
fixtureDef.shape = circle
fixtureDef.density = 0.3
fixtureDef.friction = 0
fixtureDef.restitution = 1.0
fixtureDef.filter.categoryBits = Constants.Config.PhysicsCategory.Player
fixtureDef.filter.maskBits = Constants.Config.PhysicsCategory.Wall

let ballBody = self.world.createBody(bodyDef)
ballBody.linearDamping = 0
ballBody.angularDamping = 0
ballBody.createFixture(fixtureDef)

最佳答案

不确定我是否知道在每个图 block 可能具有不同物理特性的情况下有一个简单的解决方案。

如果您的墙壁都是水平和/或垂直的,您可以编写一个类来获取一排盒子,创建单个边缘或矩形主体,然后在碰撞时计算哪个盒子(一个简单的 a < x < b 测试)应该与碰撞对象交互,并适本地应用物理,手动调用 OnCollision 方法,否则您将指定为每个单独框的回调。

关于ios - Box2D:如何使用 b2ChainShape 制作带有正方形的基于图 block 的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38979844/

相关文章:

android - Box2D 启动 AndEngine?

ios - 将 UIView 设置在距屏幕 iOS 右边缘的固定比例位置

ios - 通过 ViewControllers 传递数据 - 进行设置页面

iphone - iphone内存泄漏

swift - 可以快速转换 T 以符合协议(protocol)

java - 使用 box2d 和 libgdx 中的顶点构建镜像体

ios - 如何防止 CABasicAnimation 缩放 UIView 中的所有内容?

ios - 在 ToolbarItem SwiftUI 中添加带有图像和文本的按钮

ios - Swift:创建具有不同自定义类型的数组

c++ - 在 Swift 项目中集成 Box2d 会出现找不到 cassert 文件的错误