当我运行我的程序时。我在“覆盖func sceneDidLoad()”中输入的代码运行了两次。
注意:我不知道为什么这张图片没有上传,但它显示“spawn”发生了两次。
此代码只应在调用“sceneDidLoad()”时运行一次。
以下是“sceneDidLoad”函数的代码,以及“testSpawn()”函数的代码(这是给出重复打印输出的特定函数)。
class GameScene: SKScene {
var mapTerrain: SKTileMapNode!
override func sceneDidLoad() {
cam = SKCameraNode()
cam.xScale = 1
cam.yScale = 1
//do zoom by change in scale in pinch. (E.g. if they start out 5 units apart and end up 15 units apart, zoom by a factor of 3
self.camera = cam
self.addChild(cam)
cam.position = CGPoint(x: 100, y: 100)
setupLayers()
loadSceneNodes()
setUpUI()
testSpawn()
//print("\(self.frame.width), \(self.frame.height)")
}
func testSpawn(){
let RedLegion = legion(texture: textureRedLegion, moveTo: nil, tag: 1, health: 2)
RedLegion.position = mapTerrain.centerOfTile(atColumn: 0, row: 0)
RedLegion.team = "Red"
unitsLayer.addChild(RedLegion)
legionList.append(RedLegion)
print("spawn")
}
}
注意:并非所有代码都在这里(如“setUpLayers()”),如果需要我可以提供它,我只是觉得它不是必需的。
答案 0 :(得分:0)
在整个文档中搜索“print(”spawn“)”只是为了确保这是您调用该函数的唯一时间。还要检查“testSpawn()”以确保它只被调用一次。此外,不是依靠此打印来计算sceneDidLoad运行的次数,而是直接在sceneDidLoad中放置打印件。最后,检查以确保您没有两次创建场景。
答案 1 :(得分:0)
我也看到了这个,并提交了一份错误报告,但苹果回复说这是预期的行为。 Apple表示它会创建一个虚拟场景,然后创建实际场景。在它第二次运行之前,它会在第一次完成任何操作之后,所以你不应该从中获得任何错误。这个错误很难重现,我的一个朋友在同一个存储库工作,但我没有遇到这个错误。
答案 2 :(得分:0)
如果您正在寻找解决方案,我将sceneDidLoad更改为didMoveToView:(SKView *)视图。确保xcode是最新的。