ios - SKSpriteNode 仅在 iOS 9 或更高版本上可见,无论是在模拟器还是在真实手机中?

标签 ios swift swift3 skspritenode

当我在手机上试用我的应用程序时,我注意到了这个奇怪的错误。在我的游戏中,我创建了一个 SKSpriteNode,然后在几秒钟后将其删除。在所有 iOS 9 设备上,这都能完美运行。但是在 iOS 8 上,整个节点永远不会出现。

  1. 我试过它是否是图像,但它仍然发生在一个红色的 SpriteNode 上。
  2. 这不是传统的“红色 X”错误,只是没有显示任何内容
  3. 我使用最新版本的 Xcode:版本 8.1 (8B62) 和 Swift 3。
  4. 只要是 iOS 9
  5. ,模拟器和真实手机都会发生这种情况
  6. 它发生在 32 位(iPhone 5s)和 64 位(iPhone 6)上

这是与节点相关的所有代码:

var forceShield: SKSpriteNode! //outside of the function to make it globally accessable

forceShield = SKSpriteNode(imageNamed: "forceShield") //SKSpriteNode(color: UIColor.red, size: CGSize(width: 50, height: 50)) gave the exact same error
forceShield.position = ship.position
forceShield.xScale = 0.4 * scaleFactor
forceShield.yScale = 0.4 * scaleFactor
forceShield.zPosition = 3

let distanceConstraint = SKConstraint.distance(SKRange(lowerLimit: 0.0, upperLimit: 0.0), to: ship)
let orientConstraint = SKConstraint.orient(to: ship, offset: SKRange(lowerLimit: 0.0))
forceShield.constraints = [orientConstraint, distanceConstraint]

addChild(forceShield)

并在另一个函数中删除它

forceShield.removeFromParent()

Scalefactor 是一个始终大于或等于 1 的数字,用于针对不同设备缩放节点。 Ship 是另一个节点,后面跟着力盾(这就是约束的作用)。

如何让这个节点出现在每台设备上?

最佳答案

这个错误是由 distanceConstraint 引起的,它显然在 iOS 8 中没有被正确处理。我通过将 forceShield 添加为 ship 的 subview 来解决此问题,这会自动使其正确地遵循 ship。这个解决方案当然并不总是很有用,但它对我有用。

关于ios - SKSpriteNode 仅在 iOS 9 或更高版本上可见,无论是在模拟器还是在真实手机中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40978686/

相关文章:

swift3 - 如何在 swift 3 中重写layerClass?

ios - 使用 Swift 以不同名称保存文件

ios - Swift 2.0 UIImagePickerController 在关闭时关闭父 View

ios - 在 swift 3 中使用 UISearchBar/UISearchController 进行即时搜索

swift - 离线时删除、添加和更新 Firestore 文档

ios - 视频不会内联加载

c# - 如何格式化单元格文本标签的某些单词

ios - UIImage 上的 UILabel 并将该图像保存在 Swift 3 中的图库中以用于照片编辑应用程序

ios - 如何添加 UIActionSheet 按钮复选标记?

ios - 我的 collectionView 中的页 footer 分出现问题