我在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))