SpriteKit / Swift:无条件地重置变量

时间:2014-07-05 22:53:46

标签: xcode ios7 swift sprite-kit

我在SpriteKit中创建了一个场景,其中一个名为"世界"在其中。我想设置世界节点的y位置。为了做到这一点,我创建了一个函数,但它似乎没有用。因此我对此问题已经孤立:我创建了一个名为worldYPosition的新变量。在didMoveToView中将其设置为随机的第一个值(用于测试)。触摸按钮时,将调用worldScrollTo函数并给出参数" 5000.0"。这个函数应该将worldYPosition设置为给定的Argument,显然它就是这样。但是,当通过更新功能打印worldYPosition时,突然将其设置为0.0,并且不能再进行更改。没有其他功能或其他任何东西正在访问该值。

class UnderwaterWorld: SKScene {
    // Vars        
    var worldYPosition : CGFloat?

    override func didMoveToView(view: SKView) {
        /* Setup your scene here */

        // Create the world
        self.addChild(world)

        worldYPosition = 1234823
    }

    override func update(currentTime: CFTimeInterval) {
        println("WorldYPosition within update: \(worldYPosition!)")
    }

    func worldScrollTo(pos : CGFloat) {
        println("Position to set to: \(pos)")
        worldYPosition = pos
        println("New WorldYPosition: \(worldYPosition!)")
    }
}

返回:

"WorldYPosition within update: 1234823.0"
"Button calls worldScrollTo with pos 5000.0"
"Position to set to: 5000.0"
"New WorldYPosition: 5000.0"
"WorldYPosition within update: 0.0"

我找到了其他有问题的人来设置SKNode的位置。这些问题似乎与物理学有关,但这可能不是问题所在。我完全不知道为什么我的代码行为如此奇怪。非常感谢帮助!

最好的问候, ç

编辑(附加信息+简化代码)

这是一些更少的代码:

UnderwaterWorld.swift:

import SpriteKit

class UnderwaterWorld: SKScene {
    // Vars
    var world = SKNode()
    var ceratiasCarunculatus1 : CeratiasCarunculatus?
    var ceratiasBispinosus1 : CeratiasBispinosus?
    var halosaurusMachroir1 : HalosaurusMachroir?

    var worldYPosition : CGFloat?

    override func didMoveToView(view: SKView) {
        /* Setup your scene here */

        // Create the world
        self.addChild(world)

        ceratiasCarunculatus1 = CeratiasCarunculatus(idIs: 0, sizeIs: 0.9, speedIs: 0.7, turnLeftIs: 1400, turnRightIs: 0, animationTimeIs: 7.22);
        ceratiasCarunculatus1!.position = CGPointMake(800,-300)
        world.addChild(ceratiasCarunculatus1)

        ceratiasBispinosus1 = CeratiasBispinosus(idIs: 1, sizeIs: 0.9, speedIs: 1, turnLeftIs: 1400, turnRightIs: 0, animationTimeIs: 6.84);
        ceratiasBispinosus1!.position = CGPointMake(0,-600)
        world.addChild(ceratiasBispinosus1)

        halosaurusMachroir1 = HalosaurusMachroir(idIs: 1, sizeIs: 2, speedIs: 1, turnLeftIs: 1400, turnRightIs: 0, animationTimeIs: 10);
        halosaurusMachroir1!.position = CGPointMake(1400,-0)
        world.addChild(halosaurusMachroir1)

        //var timer = NSTimer.scheduledTimerWithTimeInterval(0.05, target: self, selector: Selector("scrollWorld"), userInfo: nil, repeats: true)
        //worldScrollTo(-900)

        worldYPosition = 1234823
    }

    override func update(currentTime: CFTimeInterval) {
        ceratiasCarunculatus1!.update()
        ceratiasBispinosus1!.update()

        halosaurusMachroir1!.update()

        println(worldYPosition!)
        self.world.position.y = worldYPosition
    }

    override func didSimulatePhysics()  {
    }

    func worldScrollTo(pos : CGFloat) {
        println("pos: \(pos)")
        worldYPosition = pos
        println("unten: \(worldYPosition!)")
    }
}

MainViewController(变量deepness(Int)的值由一个可拖动的按钮声明。该部分工作,正如println向我展示的那样。在MVC的更新函数中,上面提到的函数被调用):

var underWaterWorld = UnderwaterWorld()
underWaterWorld.worldScrollTo(CGFloat(deepness))

0 个答案:

没有答案