我有3张图片:
topBg.png
midBg.png
botBg.png
我想在顶部场景设置topBg.png
,在高度= 200
middleBg.png
应为无限比例或垂直重复
botBg.png
- 应该在底部,身高= 200
我有下一个代码:
override func didMove(to view: SKView) {
self.bgTopSpriteNode = self.childNode(withName: "//bgTopNode") as? SKSpriteNode
self.bgMiddleSpriteNode = self.childNode(withName: "//bgMiddleNode") as? SKSpriteNode
self.bgBottomSpriteNode = self.childNode(withName: "//bgBottomNode") as? SKSpriteNode
if let bgTopSpriteNode = self.bgTopSpriteNode,
let bgMiddleSpriteNode = self.bgMiddleSpriteNode,
let bgBottomSpriteNode = self.bgBottomSpriteNode {
bgTopSpriteNode.size.width = self.frame.width
bgTopSpriteNode.size.height = 200
bgTopSpriteNode.position.x = 0
bgMiddleSpriteNode.size.width = self.frame.width
bgMiddleSpriteNode.size.height = self.frame.height-400
bgMiddleSpriteNode.position.x = 0
bgBottomSpriteNode.size.width = self.frame.width
bgBottomSpriteNode.size.height = 200
bgBottomSpriteNode.position.x = 0
}
}
但是如何设置Y
图像的位置。因为坐标从屏幕中心开始,而不是从左上方开始,我不知道如何转换它们。
答案 0 :(得分:1)
有几种不同的方法可以实现您的目标。
首先,如果你的场景的anchorPoint位于(0.5,0.5),你可以使用size.height / 2来计算屏幕顶部和底部的y位置。 (不要使用框架 - 使用大小。这样,你会考虑场景的scaleMode。)
听起来你很沮丧的是场景的起源位于中心。如果您想将其移动到角落,可以通过将场景的anchorPoint属性(例如,设置为左下角的(0.0,0.0))轻松实现。然后,您的y值为0和size.height。如果您使用的是.sks编辑器,则会在界面中显示 - 您可以在那里进行设置。否则,您可以通过编程方式进行设置。
最后,您可以将场景的scaleMode设置为.aspectFill,直接设置场景的大小(例如,iPad的1024x768),然后将图像放在任何需要的地方。如果使用.sks文件,这种方法特别适用;加载场景时,可以根据视图的纵横比设置场景的大小,以适应不同的宽高比。例如,您可以为iPhone场景采用320x480“参考尺寸”。每当您加载场景时,您可以将场景的大小设置为320点宽,然而很多点高,以匹配设备的宽高比。然后,您的所有图形将以320pt宽度生成,您可以在场景的大小上按比例向上或向下滑动它们以进行布局。这有点复杂,但比尝试处理多个设备的单独布局考虑要容易得多。
我还应该指出一些事情。
您可以使用精灵的anchorPoint属性来指示精灵坐标的测量位置。这对于您希望图像冲洗某些内容的情况非常方便。例如,如果您想要在屏幕左侧刷新图像,请将其位置设置为屏幕的左侧,然后将其anchorPoint.x设置为0.0;这会将精灵的左边缘放在屏幕的左边缘。这也适用于您遇到的场景 - 移动场景的anchorPoint会移动场景中相对于其大小的所有内容。
您所描述的内容不需要三张图片。您可以使用单个精灵,只需设置其centerRect属性,告诉它使用图像的顶部和底部,并垂直拉伸中心部分。你必须做一些小数学设置正确的xScale和yScale(不宽度和高度,IIRC),但是你可以用一个精灵而不是三个精灵来绘制所有这些。这在你的情况下会非常方便,因为你可以将精灵留在(0,0),将其比例设置为与整个场景的大小相匹配,并设置centerRect属性 - 你不必进行任何定位数学。