0

所以,就像我SKSpriteNode的 s 一样,我正在尝试创建一个函数来让我成为一个默认的物理体。

这是我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

}

在这里我可以轻松调用 Sprite 版本:

在此处输入图像描述

但是,尽管我可以使用 来执行此操作,但SKSpriteNode我的SKShapeNode函数不起作用,因为我收到此错误:

在此处输入图像描述

这不起作用,所以如果我去掉inout函数中的 并将其添加为返回,它现在可以工作(使用上图中注释掉的调用)

有什么理由吗,我该如何使用inout而不是返回SKShapeNode

注意: aPhysicsBody可以设置为SKShapeNode

两者都在这里显示,var也没有let显示,因此应该是可变的:

在此处输入图像描述

4

2 回答 2

1

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

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

你用&ball. &我想知道你为什么第二次忘记了。

无论如何,你一开始就不需要inoutSKSpriteNode并且SKShapeNode是类。这意味着只要您不body使用赋值语句设置其他内容,您所做的更改body就会反映在您传递的参数中。

删除输入输出,它应该可以正常工作。

于 2018-04-30T18:07:19.380 回答
0

将值传递给inout参数函数,我们应该使用&

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

检查此链接https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID545

于 2019-12-17T02:57:48.600 回答