2017-06-23 44 views
2

因此,我正在开发一个使用Spritekit的游戏,该游戏使用Sprites金字塔(让我们说一个简单实例的圆圈)。用户可以选择游戏中他们想要的精灵的行数。精灵形成一个金字塔,所以如果你有1行,你有1个精灵节点。在你走得越远(你选择的行数越多),它越增加2 - 创建金字塔形状。因此,如果用户挑选3行,游戏板看起来像这样: O O O O O O O O OiOS - 如何根据元素的数量调整屏幕上元素的大小

然而,当它到达5行,它就失去了金字塔的形状,因为屏幕只有这么宽,它必须适合所有元素放到屏幕上(元素更多地向下排成一排)。

我的问题是,要解决这个问题,我需要做些什么才能使金字塔调整大小,并根据选择多少行来更改元素之间的间距?我需要将间隔乘以某个因子吗?我也听说有人在屏幕上添加图层 - 也许是在某种容器中绘制精灵,以便它总是调整金字塔的大小以适应屏幕而不会偏斜金字塔形状?

+0

嘿那里,我的回答是否帮助你?如果没有,让我知道,所以我可以尝试为你更新它。 – Fluidity

+0

@流利我无法让它工作。它和我的代码一样做了同样的事情(使得金字塔形状圆润,因为它到达底部行)。无法弄清楚如何保留金字塔的形状,并在它变得太大以适应屏幕时将其整体调整大小 –

回答

0

你的想法是正确的!制作一个SKNode容器,然后更新它的.size属性,或者做.setScale

(而不是在Xcode的现在,请原谅,如果不是100%)

// Say that our scene's size is 400x400: 
let bkg = SKShapeNode(rectangleOfSize: self.size) 
bkg.addChild(firstSprite) 
bkg.addChild(secondSprite) // And so on... 

// Find the farthest point in bkg: 
var farthestX = CGFloat(0) 
for node in bkg.children { 
    if node.position.x + node.frame.size.width/2 > farthestX { 
    farthestX = node.position.x + node.frame.size.width/2 
    } 
} 

// Do math to resize the bkg: 
if self.size.width < farthestX { 
    let scaler = self.size.width/farthestX 
    bkg.setScale(scaler) 
} 

这应该工作,或至少总体思路应该工作...你会要检查Y值和高度好。

0

您可以轻松计算与行数成比例的对称大小,并相应地调整您的精灵大小。这是我的想法在伪代码:

let computedSize = deviceWidth/(2*(rows-1) + 1) 

for sprite in sprites { 

    sprite.size.width = computedSize 
    sprite.size.height = computedSize 


} 
相关问题