我正在为ios开发一个sprite kit游戏项目,我的游戏运行速度为60 fps而不使用渐变效果。我使用的是self.backgroundcolor = [SkColor randomColor]
,但当我在背景上使用渐变效果时,我的游戏直接降至30 fps。
以下是我用于Gradient效果的代码。
此方法在我的SkScene类中,而不在我的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];
}
感谢任何帮助。
答案 0 :(得分:3)
我遇到了类似的问题,我使用了一个大型精灵,其中一个图像作为我的一个场景的背景。没有它,(只是self.backgroundColor = [SKColor blackColor]),fps大约是60,但是当我添加背景时,它下降到30左右。
问题是我在模拟器上测试应用程序。当我将应用程序加载到真实设备时,fps又回到了60.我甚至还为场景添加了一些粒子效果,fps仍为60.在真实设备上测试你的项目以查看fps是否下降。如果确实如此,则还有另一个问题。如果没有,你一切都好!
答案 1 :(得分:1)
每秒帧数取决于设备处理draw rect方法的速度。移动一切静态的东西,然后再试一次。例如:
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];
永远不要改变,将其移到外面并将颜色变成类变量。
此外,渐变本身似乎是静态的,也可以将其移到外面。 draw rect意味着应该在每个周期重新计算的东西。
修改强>
我再次阅读您的代码,我不确定您要实现的目标。但大多数似乎都是静态的。将它移到循环之外。
答案 2 :(得分:0)
我最好的建议是在实际设备上进行测试,甚至可以在Illustrator或Gimp(免费)或任何可以使用的设备中为节点创建渐变图像。