所以,像我的SKSpriteNodes一样,我试图创建一个函数,使我成为默认的物理体。
以下是我创建的DefaultBody.swift

import Foundation
import SpriteKit

enum Type {
    case rectangle
    case circle
}

// Create new default physics body
func createPhysicsBodySprite(for body: inout SKSpriteNode, type: Type) {

    // Create new physics body
    switch type {
    case .rectangle:
        body.physicsBody = SKPhysicsBody(edgeLoopFrom: body.frame)
    case .circle:
        body.physicsBody = SKPhysicsBody(circleOfRadius: body.frame.width / 2)
    }
    body.physicsBody?.isDynamic = false
    body.physicsBody?.allowsRotation = false
    body.physicsBody?.pinned = false
    body.physicsBody?.affectedByGravity = false
    body.physicsBody?.friction = 0
    body.physicsBody?.restitution = 0
    body.physicsBody?.linearDamping = 0
    body.physicsBody?.angularDamping = 0

}

func createPhysicsBodyShape(for body: inout SKShapeNode, type: Type) {

    // Create new physics body
    switch type {
    case .rectangle:
        body.physicsBody = SKPhysicsBody(edgeLoopFrom: body.frame)
    case .circle:
        body.physicsBody = SKPhysicsBody(circleOfRadius: body.frame.width / 2)
    }
    body.physicsBody?.isDynamic = false
    body.physicsBody?.allowsRotation = false
    body.physicsBody?.pinned = false
    body.physicsBody?.affectedByGravity = false
    body.physicsBody?.friction = 0
    body.physicsBody?.restitution = 0
    body.physicsBody?.linearDamping = 0
    body.physicsBody?.angularDamping = 0

}

在这里我可以很容易地称之为精灵版本:
ios - 无法在inout函数中使用SKShapeNode-LMLPHP
但是,尽管我可以用SKSpriteNode来完成,但是我的SKShapeNode函数不起作用,因为我得到了这个错误:
ios - 无法在inout函数中使用SKShapeNode-LMLPHP
这不起作用,所以如果我去掉函数中的inout并将其作为返回添加,它现在就起作用了(使用上图中注释掉的调用)
这有什么原因吗?我如何使用inout而不是返回SKShapeNode
注意:aPhysicsBody可以设置为aSKShapeNode
两者都是var而不是let如图所示,因此应该是可变的:
ios - 无法在inout函数中使用SKShapeNode-LMLPHP

最佳答案

首先,要传递inout参数,必须添加&

createPhyscisBodyShape(for: &topBar, type: .rectangle)

你用&ball完成了这个。我想知道你为什么第二次忘了&
无论如何,你一开始不需要inoutSKSpriteNodeSKShapeNode是类。这意味着只要不使用赋值语句将body设置为其他值,对body所做的更改将反映在传递的参数中。
移除inout,它应该可以正常工作。

关于ios - 无法在inout函数中使用SKShapeNode,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50105732/

10-12 14:35