【问题标题】:Nodes position within scene size场景大小内的节点位置
【发布时间】:2016-08-07 12:11:21
【问题描述】:

在我的 SKScene 中,我正在制作一个简单的太空射击游戏。无论在哪个 iPhone 上玩游戏,我如何确保我的敌人始终出现在屏幕尺寸内?

换句话说,我如何计算场景大小的最大和最小 X 坐标,更重要的是,我如何根据运行游戏的 iPhone 知道当前场景大小是多少?

【问题讨论】:

  • 你需要解释你的游戏模型,你打算让更大的场景看到更多的游戏区域,还是你希望图像在更大的设备上变得更大
  • @Knight0fDragon 图像应该在更大的设备上变得更大

标签: swift sprite-kit sprite skspritenode skscene


【解决方案1】:

不要根据 iPhone 型号调整场景大小,让 Sprite-kit 做这种工作:

scene.scaleMode = SKSceneScaleMode.ResizeFill

场景未缩放以匹配视图。取而代之的是场景 自动调整大小,使其尺寸始终与 视图。

关于大小,当一个场景第一次初始化时,它的size属性是由指定的初始化器来配置的。场景大小以点为单位指定场景可见部分的大小。这仅用于指定场景的可见部分。


更新以帮助您定位:

如果你想设置你的位置而不是使用 scaleMode 你可以 将您的 scene.scaleMode 设置为 .AspectFill 以使其适用于所有场景,并且场景大小必须为 2048x15361536x2048。这将使它也适用于 iPad。

class StartScene: SKScene {
    let playableArea: CGRect!
}

override init(size: CGSize) {

    //1. Get the aspect ratio of the device
    let deviceWidth = UIScreen.mainScreen().bounds.width
    let deviceHeight = UIScreen.mainScreen().bounds.height
    let maxAspectRatio: CGFloat = deviceWidth / deviceHeight
    //2. For landscape orientation, use this
    let playableHeight = size.width / maxAspectRatio
    let playableMargin = (size.height - playableHeight) / 2.0
    playableArea = CGRect(x: 0, y: playableMargin, width: size.width, height: playableHeight)

    //3. For portrait orientation, use this
    let playableWidth = size.height / maxAspectRatio
    let playableMargin = (size.width - playableWidth) / 2.0
    playableArea = CGRect(x: playableMargin, y: 0, width: playableWidth, height: size.height)

    super.init(size: size)
}

因此您可以使用以下方式定位您的对象:

ball.position = CGPoint(x: CGRectGetMidX(playableArea), y: CGRectGetMaxY(playableArea) - (ball.size.height * 0.90))

此代码适用于 iPhone 4S、5、5S、6、6 Plus、6S、6S Plus 和 iPad

如果您想查看边框(是否用于调试):

func drawWorkArea() {
    let shape = SKShapeNode()
    let path = CGPathCreateMutable()
    CGPathAddRect(path, nil, workArea)
    shape.path = path
    shape.strokeColor = SKColor.redColor()
    shape.lineWidth = 8
    addChild(shape)
}

【讨论】:

  • 我遇到的问题不在于 iPhone 版本更改时调整视图大小。这是关于我的敌人在我生成它们时的定位。他们有时会走出边缘或保持半进半出。我遇到的问题是计算允许它们生成的 x 坐标范围
  • 例如,如果您在 iPhone 6S 上进行开发并且屏幕看起来很完美,我会将帧大小除以所需的屏幕模式宽度。这将为您提供一个等于屏幕比例的浮点数。因此,如果用户使用较小的设备,浮动将是 0.XX,而较大的设备为 X.XX。 iPhone 6S 将等于 1.00。然后,您可以将图像大小、速度、距离等乘以该比率。
  • 我对你解释计算的部分失去了兴趣。你能告诉我代码吗?我正在做的是设置一个最小 x 值和一个最大 x 值。我的最小值是 = screen.size.width/6 和最大值 = screen.size.width。然后我在这些界限之间选择一个随机值
  • 查看我的更新,希望它可以帮助您更好地理解我的意思。
  • @OsaamaShehzad 如果您正在执行方面填充,那么只需将场景的大小设置为 9:16 的比例,这将允许截断位于顶部和底部,而不是非 9:16 设备的侧面
猜你喜欢
  • 1970-01-01
  • 2017-12-03
  • 2021-05-21
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多