更改图像的hitbox

时间:2015-09-27 21:09:28

标签: objective-c sprite-kit skspritenode skphysicsbody

我一直在寻找解决方案已经有一段时间了,但我找不到一个。情况如下:我创建了一个带有图像的SKSpriteNode,方法touchesBegan我希望与它进行交互,就像触摸图像一样,应该改变一些东西。问题是这个图像周围的hitbox是方形的,没有调整到图像的形状。有谁知道如何解决这个问题?我尝试通过更改physicsBody这样的

来做到这一点
CGFloat offsetX = node.frame.size.width * node.anchorPoint.x;
CGFloat offsetY = node.frame.size.height * node.anchorPoint.y;

CGMutablePathRef path = CGPathCreateMutable();
CGPathCloseSubpath(path);

node.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];

似乎touchesBegan方法不使用physicsBody形状而是实际形状,我尽力解释它,抱歉,如果我困惑你。

提前致谢!

儒略

1 个答案:

答案 0 :(得分:0)

在Xcode关卡编辑器中,在SKSpriteNode的物理定义下,将主体类型更改为 alpha mask (参见图像)。这使得物理边界符合精灵的实际形状,而不是矩形边界框。

可悲的是,此解决方案仅适用于您的精灵在.sks文件中管理,因为关卡编辑器似乎有逻辑来计算您的精灵轮廓并将其转换为用于初始化物理主体的路径阿尔法面具的类型'。 (太糟糕了,SKPhysicsBody目前没有' bodyType'属性,因为能够以编程方式设置此内容而不是只能在.sks文件中执行此操作非常方便...... Apple?)

您尝试使用CG路径创建和初始化SKPhysicsBody的方式在正确的轨道上我认为... 但是因为它目前是一条空路径(没有点或线)我猜它不会有任何影响。

有什么方法可以近似某些点和用于表示精灵的粗略轮廓路径的线条?然后,您可以使用这些点来创建CGPath,然后使用它来初始化SKPhysicsBody。

如果没有,短期妥协可能是使用_.find(productsList, {id: 'tun1'}).quantity--; 来初始化你的SKPhysicsBody,并使用圆圈作为身体类型,这似乎不像一个盒子那么笨重。你也许可以玩圆半径来感受碰撞中最自然的半径。

enter image description here