【发布时间】:2015-05-05 19:10:26
【问题描述】:
我是 iOS 和 SpriteKit 开发的新手,我想制作一个仅在横向模式下具有滚动背景的小游戏。到目前为止,我已经让我的背景滚动,但我的问题是我不知道让背景图像正确适合视图/场景。
我有一个 2040x768 背景图像,但我可以将其更改为任意大小;我只是不知道要搭配哪个尺码才能让它合身。它在Images.xcassets 中为 1x。我已将其添加到我的视图中,如下所示。
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
let backgroundTexture = SKTexture(imageNamed: "Background")
let background = SKSpriteNode(texture: backgroundTexture)
background.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))
self.addChild(background)
}
}
结果是背景图像填满了屏幕,但图像的底部和顶部被截断 - 或者更确切地说是在屏幕“外部”。背景图像底部有草,但这不可见。场景的scaleMode 设置为AspectFill。如果我将其设置为AspectFit,则图像的整个高度都是可见的,但是场景的宽度会减小(如果我在这里使用了错误的术语,则左侧和右侧都可以看到黑色空间背景图像)。
另外,在我的代码中,我添加了一个 1px 高的矩形,没有任何精灵作为地面。我添加了一个物理对象,它应该掉到地上。问题是地面矩形被添加到屏幕“下方”。物体撞到地面时会很好地停下来;这只是不可见。我用多个坠落的物体进行了测试,它们相互堆叠,添加一对后,它们变得可见,这意味着地面确实在那里;它只是不在屏幕上。所以地面位于背景图像的底部,不在屏幕上。我认为这些信息可能有助于解释这种情况。这是我添加地面节点的方法。
var ground = SKNode()
ground.position = CGPointMake(0, 0)
ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.size.width, 1))
ground.physicsBody!.dynamic = false
self.addChild(ground)
如何使整个背景图像可见并使其适应设备的屏幕尺寸?我尝试添加background.size = self.frame.size,这会使所有内容变小,但结果基本相同。我是否必须制作多个不同尺寸的背景副本?如果是这样,哪些尺寸,以及如何选择显示哪一个?我更喜欢动态解决方案,但我只想让它工作。
所以基本上我只需要我的整个背景图片来适应屏幕。只要垂直适合,那么如果不够宽(只要场景大小保持不变)通过保持纵横比就可以了,因为它是滚动背景,所以我可以在下一个添加一个水平到它。
可能有资源可以解释这一点,但我真的搜索了好几天并没有找到解决方案。请提供尽可能多的信息和细节。非常感谢您!
【问题讨论】:
标签: ios sprite-kit