【发布时间】:2018-04-30 17:51:29
【问题描述】:
所以,就像我的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
}
这里我可以轻松调用 Sprite 版本:
但是,虽然我可以使用 SKSpriteNode 来做到这一点,但我的 SKShapeNode 函数不起作用,因为我收到了这个错误:
这不起作用,所以如果我去掉函数中的 inout 并将其添加为返回值,它现在可以工作(使用上图中注释掉的调用)
这有什么原因吗,我该如何使用inout 而不是返回SKShapeNode?
注意:PhysicsBody 可以设置为SKShapeNode
两者都是var 而不是let,如此处所示,因此应该是可变的:
【问题讨论】:
标签: ios swift return skshapenode inout