我正在开发一个sprite-kit游戏,其中节点在屏幕的最低点下方生成,重力设置为让它们浮动到屏幕顶部.一切都很完美,但它很快就开始减慢FPS,最终滞后和故障变得非常缓慢.我认为解决这个问题的方法是在经过一个点之后从父节点中删除节点,这是我在更新中使用的代码:
-(void)update:(CFTimeInterval)currentTime {
if (_bubble1.position.y > CGRectGetMaxX(self.frame)+40) {
[self removeFromParent];
}
}
Run Code Online (Sandbox Code Playgroud)
如果需要,这就是我在initWithSize方法下面产生气泡的方法:
-(void)didMoveToView:(SKView *)view {
[self performSelector:@selector(spawnBubbles) withObject:nil afterDelay:1.0];
[self performSelector:@selector(spawnBubbles1) withObject:nil afterDelay:1.5];
}
-(void)spawnBubbles {
randomPosition = arc4random() %260*DoubleIfIpad;
randomPosition = randomPosition + 20*DoubleIfIpad;
randomNumber = arc4random() %7;
randomNumber = randomNumber + 1;
myColorArray = [[NSArray alloc] initWithObjects:colorCombo1, colorCombo2, colorCombo3, colorCombo4, colorCombo5, colorCombo6, colorCombo7, colorCombo8, nil];
myRandomColor = [myColorArray objectAtIndex:randomNumber];
_bubble1 = [SKShapeNode node];
[_bubble1 setPath:CGPathCreateWithEllipseInRect(CGRectMake(-25*DoubleIfIpad, -25*DoubleIfIpad, 50*DoubleIfIpad, 50*DoubleIfIpad), nil)];
_bubble1.strokeColor = _bubble1.fillColor = myRandomColor;
_bubble1.position …Run Code Online (Sandbox Code Playgroud) 我正在创建一个游戏,我希望它有一个可以选择级别的场景,然后有级别可以玩.我只是想知道如何在用户达到该级别时创建关卡并进行保存.我想在ViewController.h中创建一个BOOL并在每个场景中调用它,即LevelCompleted = YES; 然后在玩家尝试播放新关卡或重播之前关卡时使用该布尔值
要么,
我是否在每个场景中都有一个BOOL,然后将每个场景的头文件导入到水平导航场景中,并使用BOOL显示该级别是否已解锁.
另外,要在关闭应用程序时保存BOOL的值,我是否使用NSUserDefaults?
我已经搜索了很多这方面的教程,似乎找不到任何东西.如果需要更多信息,请告诉我.
我一直在阅读有关如何以编程方式截取屏幕截图的已解决的问题,但我似乎无法得到我在sprite工具包中读到的内容.例如:
这个问题如何以编程方式截取屏幕截图
UIGraphicsBeginImageContext(self.window.bounds.size);
[self.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData * data = UIImagePNGRepresentation(image);
[data writeToFile:@"foo.png" atomically:YES];
Run Code Online (Sandbox Code Playgroud)
更新2011年4月:对于视网膜显示,将第一行更改为:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
UIGraphicsBeginImageContextWithOptions(self.window.bounds.size, NO, [UIScreen mainScreen].scale);
else
UIGraphicsBeginImageContext(self.window.bounds.size);
Run Code Online (Sandbox Code Playgroud)
给了我这个信息,我在游戏中测试了但是它没有用,因为SKScene上没有识别窗口.我尝试用场景替换它但是没有用.有什么建议?
我也试过这个:
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, scale);
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)
我在这个问题中找到了:ios Sprite Kit screengrab?
但它似乎没有用,因为它不能识别第二行中的比例或界限.
我正在制作一个Sprite-Kit游戏,我有一个显示所有级别的菜单.我创建了一个锁定的图像,我希望在锁定的级别上显示,下面是代码:
SKSpriteNode *locked = [SKSpriteNode spriteNodeWithImageNamed:@"Locked.png"];
locked.position = CGPointMake(0, 0);
locked.zPosition = 2.0;
locked.size = CGSizeMake(20, 20);
Run Code Online (Sandbox Code Playgroud)
然后我想在所有级别上显示它,直到它们被解锁.这是代码:
SKSpriteNode *level2 = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(40, 40)];
level2.position = CGPointMake(CGRectGetMidX(self.frame)-75, CGRectGetMidY(self.frame)+100);
[level2 addChild:locked];
[_levels addObject:level2];
[self addChild:level2];
Run Code Online (Sandbox Code Playgroud)
但是当我试图在第三级显示它时:
SKSpriteNode *level3 = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(40, 40)];
level3.position = CGPointMake(CGRectGetMidX(self.frame)-30, CGRectGetMidY(self.frame)+100);
[level3 addChild:locked];
[_levels addObject:level3];
[self addChild:level3];
Run Code Online (Sandbox Code Playgroud)
我遇到了一个错误,因为已经锁定了父母.
孩子可以有多个父母吗? 如果是这样我哪里错了?