Objective c 更改图像的点击框
我一直在寻找一个解决方案,但我不能不找到一个。情况如下:我创建了一个带有图像的Objective c 更改图像的点击框,objective-c,sprite-kit,skspritenode,skphysicsbody,Objective C,Sprite Kit,Skspritenode,Skphysicsbody,我一直在寻找一个解决方案,但我不能不找到一个。情况如下:我创建了一个带有图像的SKSpriteNode,通过方法touchesbeated我想与它交互,就像如果一个人触摸了图像,就会发生一些变化。问题是,此图像周围的复选框是方形的,不能调整为图像的形状。有人知道我如何解决这个问题吗?我试着这样改变physicsBody CGFloat offsetX = node.frame.size.width * node.anchorPoint.x; CGFloat offsetY = node.fram
SKSpriteNode
,通过方法touchesbeated
我想与它交互,就像如果一个人触摸了图像,就会发生一些变化。问题是,此图像周围的复选框是方形的,不能调整为图像的形状。有人知道我如何解决这个问题吗?我试着这样改变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];
似乎touchesbeated
方法没有使用physicsBody
形状,但是实际的形状,我已经尽力解释了,如果我把你弄糊涂了,很抱歉
提前谢谢
Julian在Xcode级别编辑器中,在SKSpriteNode的物理定义下,将body type更改为alpha mask(见图)。这使物理边界符合精灵的实际形状,而不是矩形边界框 遗憾的是,此解决方案仅适用于在.sks文件中管理精灵的情况,因为level editor似乎具有计算精灵轮廓的逻辑,并将其转换为用于初始化具有“alpha mask”主体类型的物理主体的路径。(遗憾的是,目前SKPhysicsBody上没有“bodyType”属性,因为可以通过编程方式设置它,而不仅仅是在.sks文件中设置它……Apple?) 我认为,您尝试使用CGpath创建和初始化SKPhysicsBody的方式是正确的但由于它当前是一条空路径(没有点或线),我猜它不会有任何影响。 有什么方法可以近似一些点和线来表示精灵的大致轮廓路径吗?然后,您可以使用这些点创建CGPath,然后使用它初始化SKPhysicsBody 如果不是,一个短期的折衷方案可能是使用
init(circleOfRadius:)
初始化SKPhysicsBody,并使用一个圆作为body类型,它看起来不像一个盒子那么笨重。你可以在圆的半径上玩一玩,为你的碰撞找到最自然的半径
阅读这篇文章。如果您仍然有问题,请让我知道。非常感谢您的回复,虽然效果并不完美,但已经足够好了!:)PS:CGPath不是空的,我只是觉得没有必要写下点和线:P