Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 更改图像的点击框_Objective C_Sprite Kit_Skspritenode_Skphysicsbody - Fatal编程技术网

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