INSpriteKit 为 Sprite Kit 添加了一些功能。这个库最初是为 iOS 设计的,但也适用于 OS X。在 OS X 上,鼠标事件(特别是左键单击)被解释为触摸。
userInteractionEnabled
属性。touchPriority
获得触摸。insertChildOrNil:atIndex:
作为 iOS 7 中存在bug的 insertChild:atIndex:
函数的工作替代品。bringToFront
和 sendToBack
用于操作树顺序。changeParent:
替换节点的父节点并转换其位置。stringifyNodeTree
从节点的树创建 NSString 以供调试。isPointInside:
检查位置点是否位于精灵节点的纹理内。sizeUnscaled
返回精灵的非缩放大小。emitterLife
计算发射器的总寿命。runActionToRemoveWhenFinished
添加一个动作,在发射器完成发射后将移除它。有两个示例项目,一个是 iOS 的,另一个是 OS X 的。它们都使用相同的示例场景和测试,可以在 'Example' 目录中找到。要运行示例项目,首先在项目目录中运行 pod install
(需要安装 Cocoapods)。然后使用 Xcode 打开工作区文件 INSpriteKitExample.xcworkspace
并运行示例或测试。示例场景在 'ExampleScenes' 目录中,只需浏览它们以了解如何使用库。
要查看 INSKView 和 SKView 之间的行为差异,只需将Storyboard(OS X项目的 WindowController.xib 文件)中 skView 类的名称从 INSKView 更改为 SKView。
iOS 7+ 或 OS X 10.9+,启用 ARC
需要以下框架
或者手动克隆仓库,将 INSpriteKit 目录添加到您的项目中,并将要求部分中提到的必要框架添加到您的项目中。
将 INSpriteKit.h 头文件包含到您的项目中以获取访问所有添加项。
如果是使用 OS X 和 iOS 代码在同一项目中,可能还需要包含 INSKOSBridge.h,它添加了一些在其他 OS 中不可用的类型和方法。
在 OS X 中,当有 AppKit 控制器覆盖 Sprite Kit 场景时,可能会发生触摸传递错误。一些鼠标抬起事件可能丢失。
要复现此错误,请运行 OS X 示例项目并启动 TouchHandlingScene。将鼠标移至场景底部 AppKit 按钮的左上角,使鼠标也位于指向两个按钮的红色按钮上。按下左鼠标按钮将触发 AppKit 按钮,按下右鼠标按钮将触发红色 Sprite Kit 按钮。
然而,在按下并持有那里的左鼠标按钮时,然后按下并持有右鼠标按钮,并且在此之后在右按钮之前释放左鼠标按钮,会导致事件丢失。在这种情况下,不会将右鼠标按钮的鼠标按下事件传递到场景,而只有右鼠标按钮的鼠标抬起事件,所以它会被过度释放。
如果改变这个顺序,将产生一个不会释放的鼠标按下事件。因此,当在相应位置按下并持有右鼠标按钮,然后按下并持有左鼠标按钮,并在随后在左按钮之前释放右鼠标按钮时,也会导致事件丢失。在这种情况下,右鼠标按钮的鼠标抬起事件将不会传递。
您可以通过观察按钮右侧的小绿色/青色方块来查看丢失的事件。当按下的按钮总数为负时,方块将消失;如果不释放点击,方块的大小将不会缩小回正常大小。
使用[NSEvent addLocalMonitorForEventsMatchingMask:handler:]进行事件观察也会产生类似的问题,因为表格视图的单元格上的点击不会传递相应的触摸抬起事件。
任何帮助都将受到欢迎,因此如果有人可以解决这个问题,或者指给我一个好的方向,请不要犹豫,给我发个信息。
INSpriteKit 在MIT许可证下可用。更多信息请参阅LICENSE文件。