这个带有 SpriteKit 代码的 Swift 没有达到预期的效果
Posted
技术标签:
【中文标题】这个带有 SpriteKit 代码的 Swift 没有达到预期的效果【英文标题】:This Swift w/ SpriteKit code does not do what is intended 【发布时间】:2016-01-12 12:11:54 【问题描述】:我对 Swift 和 ios 开发非常陌生。我正在观看有关使用 Swift 和 SpriteKit 进行 iOS 开发的教程。按照教程我打开了 Xcode,新项目,游戏,通用;我改变的只是 GameScene.swift。这是新代码:
导入 SpriteKit 类游戏场景:SKScene 覆盖函数 didMoveToView(视图:SKView) /* 在这里设置你的场景 */ var node1 = SKNode() node1.position = CGPoint(x: 100, y: 100) self.addChild(node1) var spr1 = SKSpriteNode(imageNamed: "宇宙飞船") spr1.position = CGPointZero spr1.zPosition = 1 node1.addChild(spr1) 覆盖 func touchesBegan(touches: NSSet, withEvent 事件: UIEvent) /* 触摸开始时调用 */ 覆盖函数更新(当前时间:CFTimeInterval) /* 在每帧渲染之前调用 */注意:飞船图片是默认提供的。
所以在教程中,这段代码在场景中添加了一艘宇宙飞船。但是,当我运行模拟器时,场景仍然是空白的。可能是什么问题?如果需要更多信息,请说出来,我会提供。
【问题讨论】:
GameScene
被呈现了吗?
显示您的GameViewController.swift
代码。
GameScene 出现,代码正在运行。我通过调试确认了它。
我没有更改 GameViewController.swift。它是默认情况下的任何内容。
有什么错误吗?对我来说很好。 (宇宙飞船已装载 - 挂在屏幕左下方)
【参考方案1】:
它可能运行正常,但您只是在屏幕上看不到它。根据您正在模拟的设备,您可能会在屏幕外显示宇宙飞船。尝试使用其他较小的设备进行模拟,并检查您是否可以看到它。
【讨论】:
@Fattie 这不是真的。 SpriteKit 场景确实在模拟器中工作。创建一个新的示例项目并亲自尝试。 (尽管与实际设备相比,它们确实以非常低的帧速率运行。) @Fattie 这不是我的经验。我已经在模拟器中运行了几十个复杂的 SpriteKit 游戏(虽然并不顺利)。说“SpriteKit 场景根本不适用于模拟器”意味着所有场景都无法运行,这是不正确的。我同意实际上在真实设备上运行游戏是准确测试其行为和性能的唯一方法。 嘿@nathan 如果 OP 的 SpriteKit 场景没有在模拟器中运行,那是因为 SpriteKit 场景通常不在模拟器中运行。 “那不是我的经验”这很有趣,但 SK 场景不在模拟器中运行是一个非常普遍的观察结果。干杯! @Fattie 不,可能有与模拟器无关的不同原因。 SpriteKit 场景在模拟器中不工作是不常见的观察结果,因为它们确实在模拟器中工作。不是试图引起争论,只是试图为可能感到困惑的未来读者提供澄清。【参考方案2】:尝试进入您的GameViewController.swift
并确保您看到类似以下内容的内容:
class GameViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
if let scene = GameScene(fileNamed:"GameScene")
let skView = self.view as! SKView
skView.showsFPS = true
skView.showsNodeCount = true
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
scene.size = skView.bounds.size
skView.presentScene(scene)
【讨论】:
以上是关于这个带有 SpriteKit 代码的 Swift 没有达到预期的效果的主要内容,如果未能解决你的问题,请参考以下文章
将 AcceptMouseMovedEvents 用于带有 Storyboard 和 Swift 的 SpriteKit 鼠标操作
如何使用 swift 使用带有 spriteKit 的情节提要