我一直在使用SpriteKit与Xcode 6 GM进行游戏,出于某种原因,我的.SKS粒子文件现在正在崩溃Xcode,这使得它们无法打开.我还注意到,当使用NSKeyedUnarchiver未实现时,崩溃Xcode的文件也会崩溃我的应用程序.所以我假设在崩溃的情况下,我的一些SKS文件已经腐败了.对于我所有损坏的SKS粒子文件,除了重新开始之外,还有什么解决方案吗?我可以通过外部编辑器以某种方式手动修改SKS文件并解决问题吗?还有我可以采取的任何步骤,以确保我的SKS文件不会再次损坏(即Xcode 6中有一些我应该知道导致损坏的SKS文件的错误).
编辑:看来Xcode将这些文件视为场景,而不是导致崩溃的粒子文件.因此,由于某种原因,Xcode 6 GM Sprite Kit Editor无法正确保留文件格式,导致粒子文件被保存为场景文件,从而导致文件损坏.
我正在制作一个相当复杂的精灵套装游戏.我最近添加了对OS X的支持.我总是得到60 fps,无论在调整窗口大小时我的游戏是如何缩放的(即使调整大小到最大屏幕空间).但是,当我让我的应用程序进入"全屏"时,fps下降到30-40 fps并保持这种状态?但是,如果我在启用全屏时使用鼠标光标并显示菜单栏,则fps会恢复到60 fps!
你甚至可以使用默认模板在Xcode中为mac制作一个sprite kit游戏来测试这个bug.这是我拍摄的Mac默认游戏模板的屏幕截图.
我建议您自己尝试一下,如果您使用Apple的OS X默认精灵工具包模板,您甚至不必编写任何代码.
最大窗口(无FPS问题:59-60 FPS)

全屏模式(FPS降至30-40 FPS)

全屏模式鼠标在顶部显示菜单栏(令人惊讶的是,没有FPS问题:59-60 FPS)

任何人都知道可能导致这个问题的原因.如果这意味着用户将失去性能,我不想以全屏模式发布我的应用程序.你会认为全屏模式可以更好地优化绘图,但显然它恰恰相反.我在优胜美地上跑步.
我使用SKNode的xScale属性来水平翻转我的精灵.现在,在将iOS更新到版本7.1之后,水平翻转会导致我的对象沉入地下.(见下面的动画).只有xScale属性才会出现此问题.垂直翻转工作正常.
// Init
{
SKSpriteNode* ground = [SKSpriteNode spriteNodeWithColor:[UIColor blackColor] size:CGSizeMake(winSize.width, 150)];
ground.position = CGPointMake(winSize.width/2, ground.size.height/2);
ground.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:ground.size center:CGPointZero];
ground.physicsBody.dynamic = NO;
ground.physicsBody.categoryBitMask = 0x01;
ground.physicsBody.collisionBitMask = 0x02;
ground.physicsBody.contactTestBitMask = 0x02;
[self.world addChild:ground];
SKSpriteNode* turtle = [SKSpriteNode spriteNodeWithImageNamed:@"turtle.png"];
turtle.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:turtle.size.width/2];
turtle.physicsBody.categoryBitMask = 0x02;
turtle.physicsBody.collisionBitMask = 0x01;
turtle.physicsBody.contactTestBitMask = 0x01;
turtle.position = CGPointMake(winSize.width/2, winSize.height/2);
[self.world addChild:turtle];
self.turtle = turtle;
}
// Somewhere else
{
self.turtle.xScale *= -1;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用enumerateBodiesAlongRayStart,这个方法不断地在我的控制台上打印"Chance"这个词.有没有办法压制这个?这是怎么回事?
self.gameScene.physicsWorld.enumerateBodiesAlongRayStart(self.rayStart, end: self.rayEnd, usingBlock: {
body, point, normal, stop in
})
Run Code Online (Sandbox Code Playgroud) 我刚刚更新到iOS 9,却发现我的应用程序中的多个图像不再显示.由于某种原因,所有SpriteKit文本都是黄色的(以前是白色的).
有问题的图像是2D精灵,用精灵套件渲染,但在哪个显示和哪个不显示之间似乎没有很大的一致性.当然,没有背景显示,有些图像显示为白色框(但不是红色X).
其他精灵是颠倒的,或在Y中翻转,就像坐标系已经颠倒一样.并且似乎不再显示粒子效果.
我应该在不久前尝试过测试版,因为这会破坏我的实时应用程序(我现在已经删除了).但有没有其他人经历过类似的事情?或者可能知道什么是错的?在我看来主要是一个SpriteKit问题,然而,纹理地图集的所有精灵似乎都运行良好.
更新:
我意识到这是我的所有精灵都不在纹理地图集中.我在这里找到了一个论坛帖子:https://forums.developer.apple.com/thread/13358,说iOS9要么代码中的每个资产名称都需要".png"扩展名,要么你可以删除并重新添加所有资产目录中的资产.难以置信的!
这篇文章遇到了类似的问题,显然解决方案是将所有地图集添加到XCAssets,然后将目标设置为最新的iOS.但是你失去了与iOS8的向后兼容性.
我开始在XCAssets文件夹中使用新的Sprite Atlas,而不是在项目文件夹中使用我的地图集.但是我注意到,当我这样做时,我的节点不再被批量渲染,导致大量低效的绘制调用.这完全违背了使用地图册的目的!
要清楚这是我用来获取地图集的代码.
let atlas = SKTextureAtlas(named: "Sprites")
Run Code Online (Sandbox Code Playgroud)
"Sprites"是在XCAssets文件夹中创建的Sprite Atlas.
有没有人有解决方法或我在项目文件夹中制作Sprite Kit Atlases.
我正在使用Xcode 7.2 beta.
我想使用新的Sprite Kit Atlases的原因是因为这个问题.
sprite-kit ×6
ios ×2
macos ×2
swift ×2
frame-rate ×1
ios7.1 ×1
ios8 ×1
ios9 ×1
loops ×1
objective-c ×1
sktexture ×1
upgrade ×1
xcode6 ×1
xcode7 ×1
xscale ×1