Итак, как и мои 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
?
Примечание: a PhysicsBody
можно установить на SKShapeNode
Оба var
, а не let
, как показано здесь, и поэтому должен быть изменяемым: