所以,像我的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
}
在这里我可以很容易地称之为精灵版本:
但是,尽管我可以用
SKSpriteNode
来完成,但是我的SKShapeNode
函数不起作用,因为我得到了这个错误:这不起作用,所以如果我去掉函数中的
inout
并将其作为返回添加,它现在就起作用了(使用上图中注释掉的调用)这有什么原因吗?我如何使用
inout
而不是返回SKShapeNode
?注意:a
PhysicsBody
可以设置为aSKShapeNode
两者都是
var
而不是let
如图所示,因此应该是可变的:最佳答案
首先,要传递inout参数,必须添加&
:
createPhyscisBodyShape(for: &topBar, type: .rectangle)
你用
&ball
完成了这个。我想知道你为什么第二次忘了&
。无论如何,你一开始不需要
inout
。SKSpriteNode
和SKShapeNode
是类。这意味着只要不使用赋值语句将body
设置为其他值,对body
所做的更改将反映在传递的参数中。移除inout,它应该可以正常工作。
关于ios - 无法在inout函数中使用SKShapeNode,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50105732/