Ios8 iOS 8 SpriteKit渲染问题
在iOS 8中测试我的应用程序时,我遇到了一些严重的渲染问题。与其浪费文字试图写一个可理解的描述,我只给你看一个简短的视频: 这就是它的工作原理 就是这样 您所看到的内容的一个小分解:放大的瓷砖是一个单独在每个瓷砖上运行的SKAction。瓷砖以0的alpha值生成,SKAction将逐渐淡入,一次一个。如果我生成alpha值为1.0的瓷砖,它们会出现,但不会执行任何操作。其他操作也不会随机运行。因此,至少在行动上似乎存在一些问题。不过,当新的一轮发生时,我不知道是什么让场景的其余部分消失了。根本没有与这些节点或纹理相关的操作 有人知道iOS 8中SpriteKit是否有新的限制或问题吗?特别是与SKAction有关,但有什么可能与此相关的吗 编辑:我只是想澄清一下,尽管iOS 8的视频是模拟器,但我已经收到了一份来自beta测试人员的报告,在一台真正的iOS 8设备上出现了与此完全相同的问题。iOS 7视频是我自己的iOS 7设备的屏幕截图 编辑:以下是一些与此相关的代码:Ios8 iOS 8 SpriteKit渲染问题,ios8,sprite-kit,xcode6,skaction,Ios8,Sprite Kit,Xcode6,Skaction,在iOS 8中测试我的应用程序时,我遇到了一些严重的渲染问题。与其浪费文字试图写一个可理解的描述,我只给你看一个简短的视频: 这就是它的工作原理 就是这样 您所看到的内容的一个小分解:放大的瓷砖是一个单独在每个瓷砖上运行的SKAction。瓷砖以0的alpha值生成,SKAction将逐渐淡入,一次一个。如果我生成alpha值为1.0的瓷砖,它们会出现,但不会执行任何操作。其他操作也不会随机运行。因此,至少在行动上似乎存在一些问题。不过,当新的一轮发生时,我不知道是什么让场景的其余部分消失了。根
-(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;