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