Swift-Init方法和随机化不起作用
当我运行这段代码时,我没有收到任何错误,但唯一的问题是我尝试了一个“init”方法来随机化对象纹理。我使用了init方法,因为之前我遇到了实例变量randomizer变量的问题,无法在“GameSecene”类型上使用。但是现在,随机化器不再随机化了Swift-Init方法和随机化不起作用,swift,sprite-kit,Swift,Sprite Kit,当我运行这段代码时,我没有收到任何错误,但唯一的问题是我尝试了一个“init”方法来随机化对象纹理。我使用了init方法,因为之前我遇到了实例变量randomizer变量的问题,无法在“GameSecene”类型上使用。但是现在,随机化器不再随机化了 class GameScene: SKScene, SKPhysicsContactDelegate { struct randomize { var randomizer: Int init() { ra
class GameScene: SKScene, SKPhysicsContactDelegate {
struct randomize {
var randomizer: Int
init() {
randomizer = Int(arc4random_uniform(3))
}
}
var r = randomize()
var object = SKSpriteNode()
override func update(currentTime: CFTimeInterval) {
if object.position.y < 25 {
object.texture = SKTexture(imageNamed: "object\(r.randomizer)")
}
类游戏场景:SKScene,skphysiccontactdelegate{
结构随机化{
变量随机化器:Int
init(){
随机发生器=Int(arc4random_均匀(3))
}
}
var r=随机化()
var object=SKSpriteNode()
覆盖函数更新(currentTime:CFTimeInterval){
如果object.position.y<25{
object.texture=SKTexture(图像名为:“object\(r.randomizer)”)
}
初始化此结构时会生成“randomizer”变量,但在尝试访问它时不会再次随机。为了在每次访问它时都有不同的值,需要为“randomizer”创建一个getter并在那里生成一个值
struct randomize {
var randomizer: Int {
return Int(arc4random_uniform(3))
}
init() {
}
}
正如@knight0fdragon所评论的,您真的不应该使用结构,而应该使用函数。 您的结构:
struct randomize {
var randomizer: Int
init() {
randomizer = Int(arc4random_uniform(3))
}
}
应该只是功能:
func randomizer() -> Int{
return Int(arc4random_uniform(3))
}
您只需拨打以下电话:
randomizer() // new value
如果要使用该结构,它应该是:
struct randomize {
var randomizer: Int!
init() {
randomizeR()
}
mutating func randomizeR(){
randomizer = Int(arc4random_uniform(3))
}
}
struct randomize {
var randomizer: Int {
return Int(arc4random_uniform(3))
}
}
在您这样使用它的地方:
var r = randomize()
print(r.randomizer) // initial value
print(r.randomizer) // initial value
r.randomizeR()
print(r.randomizer) // new value
var r = randomize()
print(r.randomizer) // initial value
print(r.randomizer) // new value
print(r.randomizer) // new value
或者更简单地说:
struct randomize {
var randomizer: Int!
init() {
randomizeR()
}
mutating func randomizeR(){
randomizer = Int(arc4random_uniform(3))
}
}
struct randomize {
var randomizer: Int {
return Int(arc4random_uniform(3))
}
}
在您这样使用它的地方:
var r = randomize()
print(r.randomizer) // initial value
print(r.randomizer) // initial value
r.randomizeR()
print(r.randomizer) // new value
var r = randomize()
print(r.randomizer) // initial value
print(r.randomizer) // new value
print(r.randomizer) // new value
如果我用上面的代码替换结构,那么我会得到一个错误,说“实例成员'randomizer'不能用于类型'Gamescene'。我在var object=spriteNode(imageNamed:'object(randomizer)“@eluss上得到这个错误。您可以添加“randomizer”“将var粘贴到您的结构中。您能在不使用getter的情况下使用简单var的地方粘贴准确的代码吗?@Jeffrey您需要执行
“object\(r.randomizer)”
,您错过了r.
这是一项大量工作,只需执行func randomizer()->Int{return Int(arc4random\u uniform(3))}
此外,您不想这样做,如果位置<25,您将在每一帧生成一个纹理。这太糟糕了。非常感谢@WMios@Jeffrey,如果这对您有效,请选中我的答案旁边的复选标记。