Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode SpriteKit/Swift:无理由重置变量_Xcode_Ios7_Swift_Sprite Kit - Fatal编程技术网

Xcode SpriteKit/Swift:无理由重置变量

Xcode SpriteKit/Swift:无理由重置变量,xcode,ios7,swift,sprite-kit,Xcode,Ios7,Swift,Sprite Kit,我在SpriteKit中创建了一个场景,其中有一个名为“World”的节点。我想设置世界节点的y位置。为了做到这一点,我创建了一个函数,但它似乎不起作用。因此,我将这个问题隔离开来:我创建了一个名为worldYPosition的新变量。在didMoveToView中,将其设置为随机第一个值(用于测试)。当按下按钮时,调用worldScrollTo函数并给出参数“5000.0”。这个函数应该将worldYPosition设置为给定的参数,显然它就是这样做的。但是,当更新函数打印worldYPosi

我在SpriteKit中创建了一个场景,其中有一个名为“World”的节点。我想设置世界节点的y位置。为了做到这一点,我创建了一个函数,但它似乎不起作用。因此,我将这个问题隔离开来:我创建了一个名为worldYPosition的新变量。在didMoveToView中,将其设置为随机第一个值(用于测试)。当按下按钮时,调用worldScrollTo函数并给出参数“5000.0”。这个函数应该将worldYPosition设置为给定的参数,显然它就是这样做的。但是,当更新函数打印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,这些问题似乎与物理体有关,但这不可能是这里的问题。我完全不知道为什么我的代码行为如此奇怪。非常感谢您的帮助

致以最良好的问候, C

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

下面是一些减少的代码:

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(变量深度(Int)的值由一个可拖动的按钮声明。该部分工作,如println所示。在MVC的更新函数中,调用上述函数):


我猜您正在尝试在为某个节点设置物理实体后定位该节点。正如我提到的,该节点没有或不需要physicsBody–我甚至尝试将physicsBody设置为零,但从未创建过它。但是:这并不能解释为什么一个与节点完全无关的变量(我在我的示例中试图创建一个)被重置,是吗?谢谢你的回答!谢谢你的努力!我将尝试让代码易于理解,并在一分钟内发布……我假设您是根据节点位置设置属性的,同时对您所说的物理实体的内容感到困惑。你确定这和你调用worldScrollTo和update的UnderwaterWorld是同一个实例吗?
var underWaterWorld = UnderwaterWorld()
underWaterWorld.worldScrollTo(CGFloat(deepness))