Xcode 9在Spritekit中设置SKScene中的纹理时崩溃

时间:2017-10-22 21:36:30

标签: xcode sprite-kit xcode9 sktexture

我正在使用Xcode在Spritekit中构建游戏。更新到Xcode 9后,我发现每次通过.sks文件设置纹理时,Xcode会立即崩溃。我重新启动了计算机,更新了应用程序,重新加载了纹理,没有任何变化。我有2017年Macbook教授13"带触摸杆。以下是诊断:

Process:               Xcode [577]
Path:                  /Applications/Xcode.app/Contents/MacOS/Xcode
Identifier:            com.apple.dt.Xcode
Version:               9.0.1 (13249)
Build Info:            IDEFrameworks-13249000000000000~2
App Item ID:           497799835
App External ID:       823984564
Code Type:             X86-64 (Native)
Parent Process:        ??? [1]
Responsible:           Xcode [577]
User ID:               501

Date/Time:             2017-10-22 17:30:06.029 -0400
OS Version:            Mac OS X 10.12.6 (16G29)
Report Version:        12
Anonymous UUID:        0537A8C3-9FB2-836A-088B-E5D2B7FEB3EB


Time Awake Since Boot: 100 seconds

System Integrity Protection: enabled

Crashed Thread:        0  Dispatch queue: SKCRenderer_resource_queue

Exception Type:        EXC_BAD_ACCESS (SIGBUS)
Exception Codes:       KERN_PROTECTION_FAILURE at 0x000000012ceef7b8
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Bus error: 10
Termination Reason:    Namespace SIGNAL, Code 0xa
Terminating Process:   exc handler [0]

VM Regions Near 0x12ceef7b8:
    MALLOC_LARGE           000000012ceaf000-000000012ceef000 [  256K] rw-/rwx SM=PRV  
--> mapped file            000000012ceef000-000000012cf22000 [  204K] r--/rw- SM=COW  
    MALLOC_LARGE           000000012cf31000-000000012cf71000 [  256K] rw-/rwx SM=PRV  

Application Specific Information:
Sending userDidChangeValue: to <SKInspectorTextureProperty: 0x7fadb2219440> from <NSComboBox: 0x7fadb221ad80>
ProductBuildVersion: 9A1004
Performing @selector(userDidChangeValue:) from sender NSComboBox 0x7fadb221ad80

9 个答案:

答案 0 :(得分:9)

我解决了崩溃的问题。

问题在于你的@ 2x和@ 3x图像。使用Assets.xcassets文件夹中的那些 - SKS节点将崩溃XCODE。

  1. 仅将1x图像添加到Assets.xcassets文件夹。
  2. 将颜色节点放置在SKS场景中。
  3. 选择纹理
  4. 调整纹理大小。
  5. 稍后添加您的@ 2x和@ 3x文件。
  6. 此解决方案每次都可以100%运行。

答案 1 :(得分:2)

OHM,我找到了原因 如果您的图像与故事板上的skspritenode的当前大小不相等,则会发生这种情况 祝你好运!

答案 2 :(得分:2)

在将图像设置为纹理之前从图像中剥离元数据。

例如,使用ImageMagick

require

答案 3 :(得分:2)

我发现清理构建一次,然后将图像放入Photoshop中并导出为PNG,然后将其放入资产文件夹中,这似乎可以工作一段时间。但是自从Mojave和最新的Xcode更新以来,这似乎不再起作用。我已经向苹果提交了3个崩溃报告,花了将近一个小时的时间才能在屏幕上获得2个纹理正确的精灵。并不是说听起来很粗鲁,但苹果需要停止在这上面放一堆橘子,并尽快修复!!

答案 4 :(得分:1)

我发现了一种可能会或可能不会起作用的解决方法,它既不可靠,又比不工作更好。我创建了一个空的SKS文件并在此文件中设置了所有纹理。然后,我将节点复制并粘贴到首选的SKS文件中。

答案 5 :(得分:1)

Apple论坛有一个很好的解决方法。

如何修复.sks文件:

  • 在项目外打开.sks文件(关闭项目并直接从Finder打开文件)

  • 您应该看到红色十字架而不是Sprite,删除所有这些的纹理名称信息。

  • 现在,您应该可以从项目中重新打开该文件。

  • 最后,重新输入所有精灵的纹理名称。

答案 6 :(得分:1)

我只遇到了一个我的精灵纹理,导致Xcode精灵编辑器崩溃(即使在删除了@ 2x和@ 3x图像后)。它的图像DPI为300像素/英寸。我将其更改为72像素/英寸,与其他精灵纹理相匹配。没有更多的崩溃。

我希望这有助于某人。 Xcode的精灵编辑器中的这个错误已经存在于Xcode的很多版本中,并且是真正的生产力杀手。继续将这些错误报告提交给苹果。

答案 7 :(得分:1)

我认为这是由于您的计算机:MacBook Pro(13英寸,2017年),它现在也是我的工作站。

我在装有Mojave 10.14和Xcode 10.1的以下计算机上测试了相同的项目(由游戏模板创建的具有相同的纹理图像):

Mac mini服务器(2012年后期) iMac,27岁(2011年中) MacBook Pro,13(2014年中) MacBook Air,13(2014年中) MacBook Pro,15(2014年中) 以上所有计算机均能正常工作。

当我通过AirPlay投影MacBook Pro(13英寸,2017年)时,又发生了一件奇怪的事情,它不再崩溃了。

答案 8 :(得分:0)

我遇到了同样的问题,对我有用的是一起绕过使用.xcassets。我只是将一个文件夹添加到我的项目中,然后将图像导入到该文件夹​​中。之后,在场景编辑器中分配纹理不再使Xcode崩溃