我是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
,这会使一切变小,但结果基本相同。我是否必须制作不同尺寸的背景的多个副本?如果是这样,哪种尺寸,以及如何选择显示哪一种尺寸?我更喜欢动态解决方案,但我只想让它起作用。
所以基本上我只需要我的整个背景图像来适应屏幕。只要它适合垂直,那么通过保持纵横比,它是不够宽的(只要场景的大小保持不变)是可以的,因为它是滚动的背景,所以我可以添加另一个下一个它是水平的。
可能有资源在那里解释这个,但我真的搜索了几天,但没有找到解决方案。请提供尽可能多的信息和详细信息。非常感谢你提前!
答案 0 :(得分:0)
很简单,给出场景的节点大小。
Hello World!
Hello Locals!
您可以在CGSizeMake中更改节点大小。
background.size = CGSizeMake(self.frame.size.width, self.frame.size.height)
编辑:
将背景节点设置为中间
ground = CGSizeMake(self.frame.size.width, self.frame.size.height / 10)