首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能在inout函数中使用SKShapeNode

不能在inout函数中使用SKShapeNode
EN

Stack Overflow用户
提问于 2018-04-30 17:51:29
回答 2查看 33关注 0票数 0

所以,和我的SKSpriteNode一样,我试图创建一个函数,使我成为一个默认的物理体。

下面是我创建的DefaultBody.swift

代码语言:javascript
复制
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,因此应该是可变的:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-30 18:07:19

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

代码语言:javascript
复制
createPhyscisBodyShape(for: &topBar, type: .rectangle)

你是用&ball做的。我不知道你为什么第二次忘记了&

无论如何,您一开始就不需要inoutSKSpriteNodeSKShapeNode是类。这意味着,只要不使用赋值语句将body设置为其他东西,对body所做的更改就会反映在传递的参数中。

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

票数 1
EN

Stack Overflow用户

发布于 2019-12-17 02:57:48

将值传递给inout参数的函数,应使用&

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50105732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档