Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SpriteKit中的FPS下降_Ios_Swift_Sprite Kit - Fatal编程技术网

Ios SpriteKit中的FPS下降

Ios SpriteKit中的FPS下降,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我正在用Swift&SpriteKit开发一个简单的游戏,我注意到FPS从60下降到58-59(甚至更高)。当下降发生时,有一个明显的滞后-看起来像是下降了1或2帧 CPU负载约为20-25%,变化不大,内存使用量永久约为8MB 截图: 屏幕上有6个对象:标签、红色对象(精灵)、2个绿色对象(精灵)、一个方框(精灵)和“地面”(矩形形状节点) 除标签外的所有对象都具有物理实体(以白色边框显示) 动态创建绿色和白色对象,从右向左移动,并在屏幕外销毁: func scheduleAddingLiq

我正在用Swift&SpriteKit开发一个简单的游戏,我注意到FPS从60下降到58-59(甚至更高)。当下降发生时,有一个明显的滞后-看起来像是下降了1或2帧

CPU负载约为20-25%,变化不大,内存使用量永久约为8MB

截图:

屏幕上有6个对象:标签、红色对象(精灵)、2个绿色对象(精灵)、一个方框(精灵)和“地面”(矩形形状节点)

除标签外的所有对象都具有物理实体(以白色边框显示)

动态创建绿色和白色对象,从右向左移动,并在屏幕外销毁:

func scheduleAddingLiquid() {
let wait = SKAction.waitForDuration(NSTimeInterval(getRandomNumber(1, end: 3)))
        let block = SKAction.runBlock({
            [unowned self] in

            let liquidNode = LiquidNode(texture: self.liquidTexture, sceneFrame: self.frame)
            self.addChild(liquidNode)
            liquidNode.move()

            self.scheduleAddingLiquid()
        })

        let sequence = SKAction.sequence([wait, block])
        runAction(sequence)
以及:

屏幕触摸时红色物体“跳跃”:

if touches.count > 0 && isHeroOnGround && heroNode != nil {
            isHeroOnGround = false
            heroNode.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
            heroNode.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 400))
        }
滞后发生在“跳跃”后的随机时间间隔内(跳跃后约0.5到1.5秒)

延迟不是在碰撞发生时发生的,而是在红色物体“在空中”时发生的。并不是每次跳跃都会发生。FPS下降时,CPU负载不会增加

在iOS 9.3、iPad mini 2上测试

Upd 1。在iOS9.3iPhone6上测试,最初几秒钟的FPS大约是50-55,然后一直是60,没有延迟。因此,它只落后于iPadMini2(我只有这两台设备,不能在其他设备上测试)

UPD2。我已经注释掉了所有对象创建代码,除了红色数字。它在“跳跃”时仍然滞后。所以,现在我确定它与applyImpulse方法有关

UPD3。这真是太奇怪了:我已经从touchesbeent方法中删除了所有代码,但它仍然滞后于touchs!该方法是完全空的。我不知道为什么,但FPS下降,如果我点击几次


如何调试这个

只有mini上有问题,这让我觉得您的mini(或mini上的特定软件包)有问题。尝试创建一个新项目,复制文件,然后再次运行。还有,你说的是9.3,但是还有9.3.1、9.3.2等等。这两个设备可能有不同的版本

因此,首先,确保你的iphone和iPad运行相同版本的iOS。。可能是有一个bug,或者他们修补了一个bug(从而导致一个bug工作,而不是另一个)

另外,尝试在不同的模拟器上运行它。。。如果它能在模拟器上完美运行,那么我更怀疑mini(在它当前的配置中)

通过这种方式,你还可以看到问题是否(可能)与方向有关(iphone的宽屏与iPad的4:3或其他任何形式)

有时候,我的项目文件发生了“非常奇怪”的事情(即使没有插件),只是创建了一个新项目,复制了所有的文件并修复了它。如果当你点击一个空的“touchesbreated”按钮时它滞后了。。。让我觉得Xcode/你的mini有问题在手——因为它只发生在一台设备上(到目前为止我们都知道)

<>其他要考虑的事情,

  • 您使用的是哪个版本的Xcode?试试最新的测试版/回到7.3。有什么不同吗

  • 你有没有另一台电脑可以用来做这个项目

  • 如果替换掉
    [无主的自我]
    或保留它没有解决任何问题,那么我的建议是用
    打印
    语句加载代码,看看发生了什么

  • 如果使用“场景编辑器”(Scene Editor)生成精灵节点,请将它们全部删除并重新生成,或者尝试以编程方式生成它们。这修复了我的一些项目中的随机错误(似乎没有任何原因)


  • 我们需要更多的代码/信息,但上述内容有望解决您的问题。

    我想时间有点晚了,但当我在场景中添加一些
    SKShapeNode
    时,性能有所下降。我对200多个普通
    SKSpriteNode
    没有延迟,当有80个节点,其中只有大约30个
    SKShapeNode
    时,一切都开始冻结。当然,没有附加功能,只有路径、笔划/填充颜色和线宽

    我怀疑您的问题在于如何将skactiona和物理引擎混合在一起。我还没有看你的代码执行中的所有内容,我注意到你正在使用Pulse+和move to。那两个人相处不好。所以,检查这两个是否没有干扰。。。这将是一个开始。更准确地说,如果您已经使用物理引擎移动了对象,则不应使用SKActions来移动这些对象。如果您只对联系人感兴趣,那么可以将操作与物理引擎一起使用。1到2 FPS的下降不会被您的眼睛注意到,因此您所称的延迟可能不是延迟,可能是主线程上的暂停,也可能是由于编程错误而产生的意外影响。关于实际发生的情况的更多信息可能对您的情况有所帮助,或者您可能希望将其带到并让人们看到您的代码哪里出了问题。@Whirlwind我不会对受冲动影响的对象应用任何SKAction。SKActions仅用于非动态对象。您是否有未删除的正在运行的手势?谢谢回复!我只有两台设备,iPadMini2和iPhone6,现在都有相同的版本(9.3.5)。我试着在模拟器上运行这个游戏,在5s/6上还可以,但在6+/6s+上就落后了(我想这是因为屏幕大小)。1.Xcode是最新的稳定版本,我将尝试测试版。2.我只有一个MBP(最新稳定的OSX)。3.已经试过了,什么也没变。4.不,我没用那个。最奇怪的是,它只在触摸上滞后,即使没有处理触摸的代码。@RankoR有趣。它在硬件手机上并不落后,但在虚拟手机上却落后。你的Macbook是CoreI还是core2duo?我肯定会尝试新的项目导入,beta Xcode。如果这不起作用,你应该把项目放在GH上,这样我们可以看一看。我有一个4.5ghz四核hackintosh和r295x2。。xD如果它落后于此,则必须是代码。我还有iPad3、air和普通的iPhone5……而且,我会开始制作不同配置的电子表格
    if touches.count > 0 && isHeroOnGround && heroNode != nil {
                isHeroOnGround = false
                heroNode.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
                heroNode.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 400))
            }