El uso del efecto de gradiente en el kit de sprites disminuye los fps de 60 a 30

Estoy trabajando en un proyecto de juego de sprite kit para iOS, y mi juego funciona a 60 fps sin usar el efecto de gradiente. Lo que estoy usando es self.backgroundcolor = [SkColor randomColor] , pero cuando uso el efecto Gradient en mi background, mi juego recto baja a 30 fps.

A continuación se muestra mi código que estoy usando para el efecto Gradiente.

Este método está en mi class SkScene no en mi class ViewController.

 #pragme mark - Gradient Effect setup. - (void)drawRect { UIGraphicsBeginImageContext(CGSizeMake(1168, 660)); //For landscape mode. CGContextRef context = UIGraphicsGetCurrentContext(); CGGradientRef gradient; CGColorSpaceRef colorSpace; CGFloat location[] = {1}; UIColor *colorOne = [UIColor colorWithRed:(48/255.0) green:(204/255.0) blue:(255/255.0) alpha:1.0]; UIColor *colorTwo = [UIColor colorWithRed:(200/255.0) green:(251/255.0) blue:(255/255.0) alpha:1.0]; NSArray *color = [NSArray arrayWithObjects:(id)colorTwo.CGColor, (id)colorOne.CGColor, nil]; colorSpace = CGColorSpaceCreateDeviceRGB(); gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef) color, location); CGPoint startPoint, endPoint; startPoint.x = 0; startPoint.y = 0; endPoint.x = 0; endPoint.y = 250; CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, kCGGradientDrawsAfterEndLocation); CGColorSpaceRelease(colorSpace); CGGradientRelease(gradient); UIImage *newimage = UIGraphicsGetImageFromCurrentImageContext(); SKTexture *newte = [SKTexture textureWithImage:newimage]; newte.filteringMode = SKTextureFilteringNearest; SKSpriteNode *newnode = [SKSpriteNode spriteNodeWithTexture:newte]; newnode.zPosition = -10; [gradientCloud addChild:newnode]; } 

Cualquier ayuda es apreciada.

Tuve un problema similar cuando utilicé un sprite grande con una image como background para una de mis escenas. Sin él, (solo auto.backgroundColor = [SKColor blackColor]), los fps eran alnetworkingedor de 60, pero en el momento en que agregué un background, se networkingujo a alnetworkingedor de 30.

El problema era que estaba probando la aplicación en el simulador. Cuando cargé la aplicación en un dispositivo real, los fps volvieron a upload hasta 60. Incluso añadí algunos efectos de partículas a la escena y los fps aún tenían 60. Prueba tu proyecto en un dispositivo real para ver si cae el fps. Si lo hace, entonces hay otro problema. si no, ¡estás bien!

Los cuadros por segundo se basan en la rapidez con que el dispositivo puede procesar su método draw rect. Mueva TODO lo que está estático fuera de él e intente de nuevo. Por ejemplo:

 UIColor *colorOne = [UIColor colorWithRed:(48/255.0) green:(204/255.0) blue:(255/255.0) alpha:1.0]; UIColor *colorTwo = [UIColor colorWithRed:(200/255.0) green:(251/255.0) blue:(255/255.0) alpha:1.0]; NSArray *color = [NSArray arrayWithObjects:(id)colorTwo.CGColor, (id)colorOne.CGColor, nil]; 

Nunca cambia, muévelo afuera y haz que el color sea una variable de class.

También el gradiente en sí mismo parece ser estático, también lo mueve fuera. El draw rect está destinado a ser para cosas que deben ser recalculadas en cada ciclo.

EDITAR:

Acabo de leer su código una vez más, no estoy seguro de lo que está tratando de lograr. Pero la mayoría parece ser estática. Muévelo fuera del ciclo.

Mi mejor consejo sería probar en un dispositivo real, y tal vez incluso crear una image de gradiente para el nodo en Illustrator o Gimp (gratis) o lo que sea que puedas usar.