本文介绍了仅在配备 Retina 的 iPad Air 和 iPad mini 上运行操作/加载资产时 Sprite Kit 崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我收到了来自 Retina mini 和 iPad Air 设备的崩溃报告,但不是来自 iPhone 5S.它发生在 SpriteKit 中,当有人点击一个应该让另一个精灵出现在屏幕上的精灵时.

I'm getting crash reports which are coming from retina mini and iPad Air devices, but not iPhone 5S. It occurs in SpriteKit when someone taps on a sprite which is supposed to then make another show up on screen.

我无法在非 A7 设备上重现此问题,所以想知道是否有人可以查看下面的崩溃日志并告诉我崩溃可能是由什么引起的?

I'm not able to reproduce this on a non-A7 device so wondered if anyone can take a look at the crash log below and let me know what the crash may be caused by?

Exception Type:  SIGSEGV
Exception Codes: SEGV_ACCERR at 0xb000000c
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                      0x39b30b66 objc_msgSend + 5
1   CoreUI                               0x3349bd0d -[CUIStructuredThemeStore renditionWithKey:] + 1050
2   CoreUI                               0x334a50af -[CUINamedImage _renditionForSpecificKey:] + 168
3   CoreUI                               0x334a50fd -[CUINamedImage image] + 18
4   UIKit                                0x31b2ec01 -[_UIAssetManager imageNamed:scale:idiom:subtype:cachingOptions:] + 260
5   UIKit                                0x31b2eaf7 -[_UIAssetManager imageNamed:scale:idiom:subtype:] + 38
6   UIKit                                0x31b2eacd -[_UIAssetManager imageNamed:idiom:subtype:] + 44
7   UIKit                                0x31b2ea9b -[_UIAssetManager imageNamed:idiom:] + 46
8   UIKit                                0x31b75c45 +[UIImage imageNamed:inBundle:] + 56
9   SpriteKit                            0x319fde65 __26-[SKTexture loadImageData]_block_invoke + 1282
10  SpriteKit                            0x31a3798d SKSpinLockSync(int*, void ()() block_pointer) + 102
11  SpriteKit                            0x319fd8fd -[SKTexture loadImageData] + 300
12  SpriteKit                            0x31a007ef -[SKTexture size] + 42
13  SpriteKit                            0x31a21585 -[SKSpriteNode initWithTexture:] + 180
14  SpriteKit                            0x31a217e3 +[SKSpriteNode spriteNodeWithTexture:] + 146
15  White                                0x000c6037 -[EggsOnShelfScene useStrawToolOn:] (EggsOnShelfScene.m:546)
16  White                                0x000c4c9b -[EggsOnShelfScene useToolOnEgg:] (EggsOnShelfScene.m:400)
17  White                                0x000d0929 -[EggsOnShelfScene handleTapGesture:] (EggsOnShelfScene.m:1746)
18  UIKit                                0x31c99739 _UIGestureRecognizerSendActions + 194
19  UIKit                                0x31b4418b -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 1138
20  UIKit                                0x31ecfd4f ___UIGestureRecognizerUpdate_block_invoke + 44
21  UIKit                                0x31b0b5cf _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 216
22  UIKit                                0x31b09d33 _UIGestureRecognizerUpdate + 296
23  UIKit                                0x31b429fd -[UIWindow _sendGesturesForEvent:] + 772
24  UIKit                                0x31b423ab -[UIWindow sendEvent:] + 666
25  UIKit                                0x31b17d79 -[UIApplication sendEvent:] + 196
26  UIKit                                0x31b16569 _UIApplicationHandleEventQueue + 7114
27  CoreFoundation                       0x2f359f1f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 12
28  CoreFoundation                       0x2f3593e7 __CFRunLoopDoSources0 + 204
29  CoreFoundation                       0x2f357bd7 __CFRunLoopRun + 628
30  CoreFoundation                       0x2f2c2471 CFRunLoopRunSpecific + 524
31  CoreFoundation                       0x2f2c2253 CFRunLoopRunInMode + 106
32  GraphicsServices                     0x33fd02eb GSEventRunModal + 138
33  UIKit                                0x31b77845 UIApplicationMain + 1136
34  White                                0x000dcf27 main (main.m:8)
35  libdyld.dylib                        0x3a02eab7 start + 0

这是我用来创建在点击另一个时显示的精灵的代码.同样,这不会发生在 A7 设备上,而不是在 iPhone 上.此外,这个相同的代码片段用于在其他精灵上执行完全相同的操作,并且不会在这些精灵上崩溃.

Here's the code I use to create the sprite that's being displayed when the other is tapped on. Again this doesn't happen on anything but A7 devices and not on iPhones. Additionally this same code snippet is used to do the exact same thing on other sprites and does not crash on those.

if ([touchedSprite.name isEqualToString:@"Sad"]) {
    // Create the crop node
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        cropNode.position = CGPointMake(touchedSprite.position.x - 120, CGRectGetMinY(self.view.frame));
    } else
        cropNode.position = CGPointMake(touchedSprite.position.x - 120 * IPHONERATIO, CGRectGetMinY(self.view.frame) - 20);


    SKSpriteNode *sadSprite = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:@"SadSprite"]];
    [sadSprite setName:@"sadSprite"];
    [cropNode addChild:sadSprite];

    sadSprite.position = CGPointMake(sadSprite.position.x, sadSprite.position.y + sadSprite.size.height / 2);

    SKSpriteNode *maskedImage = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:@"SadSpriteMask"]];
    [cropNode setMaskNode:maskedImage];

    [self addChild:cropNode];

    NSArray *slurpSounds = @[@"sadSprite01.caf", @"sadSprite02.caf", @"sadSprite03.caf"];

    // Keep the sadSprite in the same position in relation to the egg
    [sadSprite runAction:[SKAction moveByX:0 y:-sadSprite.size.height duration:0.6]];

    // Move the sadSprite into position
    [cropNode runAction:[SKAction moveByX:0 y:sadSprite.size.height duration:0.6] completion:^{
        [cropNode runAction:[SKAction playSoundFileNamed:slurpSounds[self.toolSoundNumber] waitForCompletion:YES] completion:^{
            [sadSprite runAction:[SKAction moveByX:0 y:sadSprite.size.height duration:0.6] completion:^{
                [sadSprite removeFromParent];
            }];
            [cropNode runAction:[SKAction moveByX:0 y:-sadSprite.size.height duration:0.6] completion:^{
                [cropNode removeFromParent];
            }];
        }];
    }];
}

谢谢.

推荐答案

经过反复试验,我找到了一个切片图像,其中顶部、底部、左侧或右侧切片的大小为 0.我会这样说是iOS上的一个错误.尝试为您的图像添加更多填充,这样您的切片就不会接触到边缘.

After some trial and error I tracked this down to having a sliced image where the top, bottom, left or right slice has size 0. I'd say this is a bug on iOS. Try adding more padding to your image so that your slices don't touch the edges.

这篇关于仅在配备 Retina 的 iPad Air 和 iPad mini 上运行操作/加载资产时 Sprite Kit 崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 14:31