2017-06-23 81 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 


} 
相關問題