意外的物理体现在SpriteKit场景中

scr*_*ibu 6 ios sprite-kit

我正在用SpriteKit实现一个质量弹簧系统(许多小物理机构与SKPhysicsJointSpring实例连接在一起).一些粒子在穿过场景中心时会被钩住.

在场景中间似乎有一个小而静止的身体,我不知道它为什么会存在.

这是一个简单的方法来看看我在说什么:

  1. 在XCode 8中,使用"Game"模板创建一个全新的项目.
  2. 在GameViewController.viewDidLoad(),添加view.showsPhysics = true

如果你运行项目,你应该在中间看到一个小点,这是错误的主体:

在此输入图像描述

谁知道如何摆脱它?

编辑:我试图手动创建场景对象:

在GameViewController.viewDidLoad(),我取代了这个:

// Load the SKScene from 'GameScene.sks'
if let scene = SKScene(fileNamed: "GameScene") {
    view.presentScene(scene)
}
Run Code Online (Sandbox Code Playgroud)

有了这个:

let scene = GameScene(size: view.frame.size)
scene.anchorPoint = CGPoint(x: 0.5, y: 0.5)
view.presentScene(scene)
Run Code Online (Sandbox Code Playgroud)

但这并没有解决它.

Ale*_*ano 2

关于“ hello world ”的xCode游戏模板,似乎physicsBody和节点有点关联GameScene。通过一些代码我发现了这一点:

class GameScene: SKScene {

    private var label : SKLabelNode?
    private var spinnyNode : SKShapeNode?

    override func didMove(to view: SKView) {
        ... 
        // End part of this function:
        if let b = physicsWorld.body(in: (label?.frame)!) {
            if let node = b.node {
                print("Type of this node: \(type(of:node))")
                print("Frame of this node: \(node.frame))")
            }
            print("Area covered by this node physicsBody: \(b.area)")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

通过最后一个大括号的断点,您可以看到两个主体(可能是一个主体数组),其中一个是physicsBody左侧的debugArea (索引为1 的数组),其十六进制地址与我的代码中的主体相同b:0x79794f90,面积为 4.444 的小矩形体

Printing description of ((PKPhysicsBody *)0x79794f90):
<SKPhysicsBody> type:<Rectangle> representedObject:[<SKScene> name:'(null)' frame:{{-375, -667}, {750, 1334}} anchor:{0.5, 0.5}]
(lldb) 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • @scribu我怀疑这个小物理体的存在是为了使物理系统保持在“清醒”状态。SpriteKit 中的音频/声音管理、AVFoundation 中的语音合成器需要这些技巧来保持它们清醒并保留在内存中。可能是因为 Apple 在 iOS 上进行了积极的内存和/或资源管理。 (3认同)