Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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
Xamarin.ios SKPhysicsBody.BodyWithPolygonFromPath返回null_Xamarin.ios_Xamarin_Sprite Kit - Fatal编程技术网

Xamarin.ios SKPhysicsBody.BodyWithPolygonFromPath返回null

Xamarin.ios SKPhysicsBody.BodyWithPolygonFromPath返回null,xamarin.ios,xamarin,sprite-kit,Xamarin.ios,Xamarin,Sprite Kit,我正在尝试使用从多边形路径(一个CGPath对象)创建的SKPhysicsBody设置SKSpriteNode对象的PhysicsBody。 我已经通过使用路径创建一个SKShapeNode并将其添加为精灵的子级来验证我使用的路径是否有效(请参见屏幕截图) 但是,当我尝试创建SKPhysicsBody对象时,BodyWithPolygonFromPath方法返回NULL。 该方法不抛出异常,只返回NULL 有什么想法吗 虽然Objective-C中确实存在异常,但它们并不常用(如.NET中)。绑

我正在尝试使用从多边形路径(一个
CGPath
对象)创建的
SKPhysicsBody
设置
SKSpriteNode
对象的PhysicsBody。
我已经通过使用路径创建一个
SKShapeNode
并将其添加为精灵的子级来验证我使用的路径是否有效(请参见屏幕截图)

但是,当我尝试创建
SKPhysicsBody
对象时,
BodyWithPolygonFromPath
方法返回NULL。
该方法不抛出异常,只返回NULL

有什么想法吗


虽然Objective-C中确实存在异常,但它们并不常用(如.NET中)。绑定可以提供一些额外的检查(例如,针对空参数,避免崩溃),但某些条件不能重复(例如,何时会认为路径无效?)

一般来说,您会发现苹果提供了一个API:

  • 返回一个
    NSError
    实例(作为返回值或更常见的
    out
    参数);或

  • 当其输入(或上下文)无效时,返回
    null
    nil
    ,在Objective-C中)。这在
    init*
    选择器中非常常见(这不是.NET开发人员会想到的,即.ctor返回
    null
    );或

  • 在少数情况下,会抛出
    NSException

在某些情况下,您将获得一些日志(请参阅Console.app以了解iOS模拟器或Xcode的organizer以了解设备),这些日志将为您提供出错原因的线索。通常你什么都得不到。。。YMMV

在后一种情况下,您应该尝试回溯您的步骤,例如,您的
路径是如何创建的?它会是空的吗?它的某些属性在手表窗口中看起来奇怪吗


给我们一些代码来复制这个问题也可能很有用(或者至少看看如何创建“路径”)。其他人以前可能遇到过同样的问题。。。但是如果没有其他详细信息,可能无法辨别/记住。

我试图将一些详细信息输出到Visual Studio调试控制台,突然注意到Xamarin/Mono从
SKPhysicsBody
对象输出了一条错误消息:

SKPhysicsBody:尝试创建具有18个顶点的多边形时出错, 最多12个

所以问题是我的多边形太复杂了。

我已经将它简化为12个顶点,现在可以工作了

谢谢你的意见。我还没有检查Console.app,今天第一次有机会就会检查。这个路径是用一个在线生成器创建的,它在SKShapeNode对象上工作,所以我认为它是一个有效的路径。它可能是特定于上下文的。我见过SpriteKit要求按特定顺序执行某些操作,即重新排序代码以解决问题(和崩溃)。但在走得太远之前,首先要确保它符合苹果公司的文件要求:一条具有逆时针缠绕且无自相交的凸多边形路径。这些点是相对于所属节点的原点指定的。