gpt4 book ai didi

swift - 在初始化时将信息传递给类

转载 作者:行者123 更新时间:2023-11-28 06:37:28 24 4
gpt4 key购买 nike

我正在努力理解类初始化的工作原理。通过查看其他问题的解决方案,我将此作为我应用程序中类的示例。

import Foundation
import SpriteKit

class Ground : SKSpriteNode {

override init(texture: SKTexture!, color: SKColor, size: CGSize) {

super.init(texture: texture, color: color, size: size)

self.zPosition = -20
self.name = "Ground";

}

func configure (size: CGSize, position: CGPoint) {
self.size = size
self.position = position
// Set up the Physics
self.physicsBody = SKPhysicsBody(rectangleOf: size)
self.physicsBody?.contactTestBitMask = PhysicsCategory.Player
self.physicsBody?.categoryBitMask = PhysicsCategory.Ground
self.physicsBody?.collisionBitMask = PhysicsCategory.All
self.physicsBody?.affectedByGravity = false
self.physicsBody?.allowsRotation = false
self.physicsBody?.isDynamic = false
self.physicsBody?.mass = 1.99999
}

convenience init(color: SKColor, isActive: Bool = false) {
let size = CGSize(width: 10, height: 10);
self.init(texture:nil, color: color, size: size)
}

required init?(coder aDecoder: NSCoder) {
// Decoding length here would be nice...
super.init(coder: aDecoder)
}
}

我已将“配置”功能作为一个拼凑修复,让我将场景传递给类(class),这样我就可以根据设备屏幕的大小设置大小。理想情况下,我只想在初始化时提取这些信息,但我尝试的所有操作都会引发我不理解的错误。

我不确定哪种方式是正确的,但我首先想知道,我将如何将参数传递给类以开始......例如......

let myClass = Ground(scene: self) 

或者我能否以某种方式直接从类中提取场景信息?我可以像使用“配置”一样将信息传递到函数/方法中,但我无法让它在初始化时工作,这肯定会更干净。

你们会怎么做呢?

最佳答案

大小

您不应该根据当前设备以编程方式更改 Sprite 的大小,只需使用相同的大小,然后让 SpriteKit 为您调整大小即可。

从 .sks 加载

这个初始化器

init?(coder aDecoder: NSCoder)

在 Sprite 从 .sks 文件加载时使用。但是,在 Xcode 7 中,您无法将 .sks 中的值传递给 Sprite 以设置属性。我不确定您使用的是 .sks 文件,所以现在我只是在此处抛出一个 fatal_error。然而,在 Xcode 8 中,您将能够将值从 .sks 文件传递​​到您自己的类。

required init?(coder aDecoder: NSCoder) {
fatalError("Not implemented")
}

场景

您不需要将当前场景的引用传递给您的类。每个 SKNode 都有 scene 属性,只需使用它来检索节点所在的场景。当然请记住,如果您在 将节点添加到场景之前调用 .scene,它将返回 nil

代码

这是最终代码

class Ground : SKSpriteNode {

init(color: SKColor = .clearColor(), isActive:Bool = false) {
let texture = SKTexture(imageNamed: "ground")
super.init(texture: texture, color: color, size: texture.size())
self.name = "Ground"
self.zPosition = -20

let physicsBody = SKPhysicsBody(texture: texture, size: texture.size())
physicsBody.contactTestBitMask = PhysicsCategory.Player
physicsBody.categoryBitMask = PhysicsCategory.Ground
physicsBody.collisionBitMask = PhysicsCategory.All
physicsBody.affectedByGravity = false
physicsBody.allowsRotation = false
physicsBody.dynamic = false
physicsBody.mass = 1.99999
self.physicsBody = physicsBody
}

required init?(coder aDecoder: NSCoder) {
fatalError("Not implemented")
}
}

关于swift - 在初始化时将信息传递给类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38807267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com