Ios8 iOS 8 SpriteKit渲染问题

Ios8 iOS 8 SpriteKit渲染问题,ios8,sprite-kit,xcode6,skaction,Ios8,Sprite Kit,Xcode6,Skaction,在iOS 8中测试我的应用程序时,我遇到了一些严重的渲染问题。与其浪费文字试图写一个可理解的描述,我只给你看一个简短的视频: 这就是它的工作原理 就是这样 您所看到的内容的一个小分解:放大的瓷砖是一个单独在每个瓷砖上运行的SKAction。瓷砖以0的alpha值生成,SKAction将逐渐淡入,一次一个。如果我生成alpha值为1.0的瓷砖,它们会出现,但不会执行任何操作。其他操作也不会随机运行。因此,至少在行动上似乎存在一些问题。不过,当新的一轮发生时,我不知道是什么让场景的其余部分消失了。根

在iOS 8中测试我的应用程序时,我遇到了一些严重的渲染问题。与其浪费文字试图写一个可理解的描述,我只给你看一个简短的视频:

这就是它的工作原理

就是这样

您所看到的内容的一个小分解:放大的瓷砖是一个单独在每个瓷砖上运行的SKAction。瓷砖以0的alpha值生成,SKAction将逐渐淡入,一次一个。如果我生成alpha值为1.0的瓷砖,它们会出现,但不会执行任何操作。其他操作也不会随机运行。因此,至少在行动上似乎存在一些问题。不过,当新的一轮发生时,我不知道是什么让场景的其余部分消失了。根本没有与这些节点或纹理相关的操作

有人知道iOS 8中SpriteKit是否有新的限制或问题吗?特别是与SKAction有关,但有什么可能与此相关的吗

编辑:我只是想澄清一下,尽管iOS 8的视频是模拟器,但我已经收到了一份来自beta测试人员的报告,在一台真正的iOS 8设备上出现了与此完全相同的问题。iOS 7视频是我自己的iOS 7设备的屏幕截图

编辑:以下是一些与此相关的代码:

-(void)startNewRoundWithGridSize:(CGFloat)newGridSize andWormCount:(NSInteger)wormCount{

    gameData.currentWormScore = (int)currentRound;
    [gameData checkAchievements];

    previousRandomShake = sharedUtilities.currentTime + 10;

    [self randomizeShakeType];

    if (gameData.isComputer || gameData.isPhone5) {
        directionImage.position = wormDirectionPhone5GamePos;
    } else if (gameData.isPhone4) {
        directionImage.position = wormDirectionPhone4GamePos;
    } else if (gameData.isPad) {
        directionImage.position = wormDirectionPadGamePos;
    }
    directionImage.hidden = VISIBLE;
    [directionImage setScale:0.33];

    roundCounter.hidden = VISIBLE;
    timerBar.hidden = VISIBLE;
    int additionalTime = [settingsDict[@"subsequentRoundTimerPoints"] integerValue] + 0.5 * timerValue;
    if (currentRound == 1) {
        timerValue = [settingsDict[@"firstRoundTimerPoints"] integerValue];
    } else {
        timerValue = additionalTime;
    }
    if (gameData.godMode) {
        timerValue = 600000000;
    }


    gridSize = newGridSize;
    if (gameData.isPhone4 || gameData.isPhone5 || gameData.isComputer) {
        tileBaseSize = 80;
    } else if (gameData.isPad) {
        tileBaseSize = 192;
    }

    roundCounter.intValue = currentRound;

    SKNode* oldWorld = [self childNodeWithName:@"wormWorld"];
    if (oldWorld.parent) {
        [oldWorld removeFromParent];
    }


    [startButton disableButton];
    [backButton disableButton];
    [instructionsButton disableButton];
    startButton.hidden = HIDDEN;
    backButton.hidden = HIDDEN;
    instructionsButton.hidden = HIDDEN;

    wormArray = nil;
    wormArray = [[NSMutableArray alloc] init];

    tilesArray = nil;
    tilesArray = [[NSMutableArray alloc] init];

    SKSpriteNode* alphaNode = [SKSpriteNode spriteNodeWithColor:[SKColor whiteColor] size:CGSizeMake(self.size.width, self.size.width)];
    alphaNode.anchorPoint = CGPointZero;
    alphaNode.position = CGPointMake(0, 0);

    CGFloat worldYPos = (self.size.height - self.size.width) / 2 ;

    SKCropNode* wormWorld = [SKCropNode node];
    wormWorld.position = CGPointMake(0, worldYPos);
    wormWorld.name = @"wormWorld";
    wormWorld.maskNode = alphaNode;
    wormWorld.zPosition = zGameLayer;
    [self addChild:wormWorld];



    SKSpriteNode* wormAreaBackground = [SKSpriteNode spriteNodeWithColor:[SKColor colorWithRed:0 green:0 blue:0 alpha:0.45] size:CGSizeMake(self.size.width, self.size.width)];
    wormAreaBackground.anchorPoint = CGPointZero;
    wormAreaBackground.name = @"wormAreaBackground";
    wormAreaBackground.zPosition = 0;
    [wormWorld addChild:wormAreaBackground];

    SKNode* wormScaler = [SKNode node];
    wormScaler.name = @"wormScaler";
    wormScaler.xScale = 4 / gridSize;
    wormScaler.yScale = 4 / gridSize;
    wormScaler.zPosition = 1;
    [wormWorld addChild:wormScaler];


    //tiles

    CGFloat totalDuration = 1;

    CGFloat duration = 0.15;
    SKAction* tileScaleIn = [SKAction sequence:@[
                                                 [SKAction scaleTo:5 duration:0],
                                                 [SKAction scaleXTo:1.0f y:1.0f duration:0.1],

                                                 ]];
    SKAction* tileFadeIn;
    if (gameData.debugMode) {
        tileFadeIn = [SKAction fadeAlphaTo:0.5f duration:duration];
    } else {
        tileFadeIn = [SKAction fadeAlphaTo:1.0f duration:duration];
    }

    SKAction* tileAnimation = [SKAction group:@[
                                                tileScaleIn,
                                                tileFadeIn,
                                                ]];
    for (int i = 0; i < gridSize; i++) {
        int y = i * tileBaseSize + 0.5 * tileBaseSize; //start new row of tiles and set y pos

        for (int h = 0; h < gridSize; h++) {
            int x = h * tileBaseSize + 0.5 * tileBaseSize; //set x of current tile
            SGG_TileNode* tile = [SGG_TileNode node];
            if (gameData.debugMode) {
                tile.debugMode = YES;
            }
            tile.position = CGPointMake(x, y);
            tile.gridSize = CGSizeMake(gridSize, gridSize);
            tile.tileIndex = i * gridSize + h;
            tile.name = @"tile";
            tile.zPosition = zGameLayer + 15;
            tile.alpha = 0.0;
            [wormScaler addChild:tile];
            [tilesArray addObject:tile];

            SKAction* waitABit = [SKAction waitForDuration:((totalDuration - 0.2) / (gridSize * gridSize)) * tile.tileIndex];
            SKAction* totalAction = [SKAction sequence:@[
                                                         waitABit,
                                                         tileAnimation,
                                                         ]];
            [tile runAction:totalAction withKey:@"startingZoom"];

        }
    }

    gameStarting = YES;


}

更新方法以确保游戏未暂停。

有机会看到任何代码吗?至少行动本身是好的。我会尽我所能发布。这是相当困难的,因为有几个类都是相互关联的。在设备或模拟器上进行u r测试在文章中对此进行了解释。
self.paused = NO;