【问题标题】:Swift/SpriteKit: Numerical variable always returning 0Swift/SpriteKit:数值变量总是返回 0
【发布时间】:2015-05-01 12:28:35
【问题描述】:

我是 Swift 新手,正在使用 XCode 6.1.1 我正在制作的游戏是一个数学游戏——所以我使用整数来生成方程值和答案值。答案值将由绵羊字符持有,绵羊是SKNodes。

First- delcare 用于羊值的全局变量。将羊和答案分开的 var 的原因是因为我稍后会检查随机生成的羊 int 是否等于答案。

   var sheepValue = 0
var equation = 0
var answer = 0

然后,在生成羊方法中,我还为每只羊生成一个唯一的 int 值 - 并让羊在自身上打印出该值。

 let sheepValue = generateNumber3()
    let myString = String(sheepValue)
    let sheepLabel = SKLabelNode(fontNamed: "MERKIN")
    sheepLabel.name = "sheepmathproblem"
    sheepLabel.fontColor = SKColor.darkGrayColor()
    sheepLabel.fontSize = 30
    sheepLabel.text = myString
    sheep.addChild(sheepLabel)

下面是随机数生成方法:

   func generateNumber3() -> UInt32 {

    //generate random number from 1-10
    return arc4random_uniform(20) + 1

}

这是我在控制台中打印sheepValue 的地方。出于某种原因,sheepValue 和 equation 值从我将它们声明为全局变量时从未改变。我认为使用“letsheepValue = generateNumber3()”会改变全局变量的值,但我显然遗漏了一些东西。

if CGRectIntersectsRect(sheep.frame, self.sandman.frame) {
    if self.sheepValue == self.equation {
        println("sheepValue: \(self.sheepValue)")
        println("equation: \(self.equation)")
        hitSheep.append(sheep)

        }

    }

感谢您的帮助!抱歉,如果这看起来很基本,我不确定为什么这不起作用..我确实尝试在方法中声明变量,但我需要在 spawnSheep 方法旁边的其他方法中检查羊值,所以我认为全局变量是足够好,所以我可以用其他方法访问它……或者以某种方式使 int 成为绵羊的属性——我不知道该怎么做,或者这是否是个好主意。感谢您的宝贵时间!

【问题讨论】:

    标签: swift sprite-kit


    【解决方案1】:
    let sheepValue = generateNumber3()
    

    在您的 spawn 方法的本地范围内。这和类中定义的sheepValue变量不一样

    var sheepValue = 0
    

    如果你想要它一样,这样做:

    self.sheepValue = generateNumber3()
    

    【讨论】:

    • 好的,所以我将 letsheepValue = generateNumber3( ) 更改为 self.sheepValue = generateNumber3( ) 并且我收到一条错误消息,提示“UInt32”不可转换为“Int” - 此更改是仅在 spawnSheep 方法中进行。但我猜是因为我在类之外声明了 varsheepValue,'self' 指向 gameScene 中的那个 var?
    • 这是因为您隐式定义了 varsheepValue,这使其成为 Int。您需要显式或类型转换。显式为var sheepValue:UInt32(匹配generateNumber3)或self.sheepValue = Int(generateNumber3())
    • 谢谢!我明白了,稍微修改了一下,然后意识到另一个问题。将sheepValue 作为一个全局变量意味着当新的绵羊出现时该值总是会改变,这意味着屏幕上现有的绵羊将不再具有值。我试图让每只羊在产卵时都拥有自己独特的价值,并在它们出现在屏幕上时保持它。我试图在 spawnSheep 方法中声明sheepValue。但是在我的 checkCollision 方法中比较私有sheepValue 时遇到问题(如果sheep.sheepValue == self.equation)sheep.sheepValue=Int(arc4random_uniform(UInt32(12))+1)
    • 谢谢!我明白了,稍微修改了一下,然后意识到另一个问题。将sheepValue 作为一个全局变量意味着当新的绵羊出现时该值总是会改变,这意味着屏幕上现有的绵羊将不再具有值。我试图让每只羊在产卵时都拥有自己独特的价值,并在它们出现在屏幕上时保持它。我试图在 spawnSheep 方法中声明sheepValue。但是在我的 checkCollision 方法中比较私有sheepValue 时遇到问题(如果sheep.sheepValue == self.equation)
    • 澄清一下,我有:sheep.sheepValue=Int(arc4random_uniform(UInt32(12))+1) 并收到错误消息。我试图让sheepValue成为sheep的成员,所以我可以在其他方法中将它称为sheep.sheepValue。很抱歉这个冗长的评论,但你一直在帮助我指出正确的方向! :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2017-08-10
    • 2020-08-15
    • 2020-04-22
    相关资源
    最近更新 更多