在SpriteKitScene中定位的对象

时间:2016-08-03 15:04:06

标签: ios swift sprite-kit sprite skspritenode

我正在制作这个基本的太空射击游戏但我无法正确获得敌人的x坐标。有时,它们会离开屏幕 - 或者保持在边缘的一半内侧。无论应用程序在哪个iPhone上运行,我该如何永久修复此问题?

这里是我的定位代码:(注意鸡蛋是我的敌人的名字。它是我每次调用它的功能)

    func egg() {
        var egg = SKSpriteNode(imageNamed: list[Int(arc4random_uniform(6))])
        var min = self.size.width / 8
        var max = self.size.width 
        var point = UInt32(max - min)


        egg.position = CGPoint(x: CGFloat(arc4random_uniform(point)), y: self.size.height)
        let action = SKAction.moveToY(-100, duration: 2)
        let actionDone = SKAction.removeFromParent()

        egg.runAction(SKAction.sequence([action, actionDone]))

  }

1 个答案:

答案 0 :(得分:0)

有几个地方可以横向发展。

•首先,看起来您假设场景的位置位于(0,0)。如果不是(例如,默认的.sks文件现在有一个锚点(0.5,0.5)),这可以解释为什么你的敌人永远不会出现。我要做的第一件事是仔细检查我的场景的anchorPoint。

•如果您将这些鸡蛋添加到场景本身以外的其他节点,那么这些鸡蛋将继承"继承"它们的父节点具有的任何转换,旋转和缩放。换句话说,如果你将(20,20)的一个鸡蛋添加到(30,30)的节点,它将出现在(50,50)。确保"上下文"鸡蛋是你所期望的。

•你的" min"和" max"价值似乎有点奇怪。 " min"看起来它的目的是"缩进"在左侧屏幕尺寸的1/8处,但您不能在右侧缩进。也许这就是你想要的,但如果你打算让他们有对称的行为,那么你会想要回到" max"也是第八个。此外,当您确定位置时,您不会将第八个添加回x值,因此这可能会在x = 0处粘贴一个鸡蛋。这可以解释为什么你的精灵有时会在边缘内侧#34;

•场景的大小不一定是屏幕尺寸。这在很大程度上取决于" scaleMode"你的SKScene查看文档以获取更多相关信息,但简单地说,scaleMode告诉SpriteKit如何渲染与其视图大小或宽高比不匹配的场景。它伸展吗?是作物吗?是信箱吗?如果您在1024x768屏幕设备上运行方形400x400场景,它必须知道您的意思。它是否在屏幕中间绘制了400x400,并且可以看到内容和#34;外部"那个矩形?或者是否将其缩放以填充屏幕,从顶部和底部裁剪?或者它是否可以扩展到适合屏幕,允许在技术上超出场景大小的上方和下方空间?或者它是否会扩大规模并压缩场景以使其完全贴合?如果您的场景与设备的屏幕不完全匹配,这可以解释为什么事情不能很好地保持在可见范围内。