我正在創建我的第一個Swift + SpriteKit遊戲,我正在處理這個頭痛的問題,因爲我不得不根據iDevice來調整所有的東西。如何根據iDevice準確測量Swift節點的大小和位置
我有一個基於設備運行的類,返回它的名字。 有了這個名字,我創建了一個基於設備字符串名稱的字典,返回給定設備的分辨率。
然後,我創建了2個功能 - > getSizeBasedOnDevice()和getPositionBasedOnDevice()
因爲我編寫我的遊戲爲iPhone 6S。我認爲這會像進行簡單的數學計算來獲得所有這些大小和位置一樣簡單,但它看起來不是這樣。
這些都是我的功能:
func getSizeBasedOnDevice(width: CGFloat, height: CGFloat) -> CGSize {
// iPhone 6s w: 375, h: 667
let deviceName = UIDevice.currentDevice().modelName
let iphoneNative = ScreenSize(width: 375, height: 667)
let resolution = Resolutions[deviceName]
let newWidth = (CGFloat(resolution!.getWidth()) * width)/iphoneNative.getWidth()
let newHeight = (CGFloat(resolution!.getHeight()) * height)/iphoneNative.getHeight()
return CGSize(width: newWidth, height: newHeight)
}
func getPositionBasedOnDevice(x: CGFloat, y: CGFloat) -> CGPoint {
let deviceName = UIDevice.currentDevice().modelName
let iphoneNative = ScreenSize(width: 375, height: 667)
let resolution = Resolutions[deviceName]
let newX = (CGFloat(resolution!.getWidth()) * x)/iphoneNative.getWidth()
let newY = (CGFloat(resolution!.getHeight()) * y)/iphoneNative.getHeight()
return CGPoint(x: newX, y: newY)
}
我iPhoneNative高度和寬度將是我的iPhone 6S」。所以計算對我來說有點簡單,但事實並非如此。
所以具有這些示例值:
Asset's width = 100 pts
Current Device (iPhone 4S) width = 320 pts
Originally designed Device (iPhone 6S) width = 375 pts
數學將是:
(320 * 100)/ 375 = 85.33
使有100資產我的iPhone 6S上的點寬度在iPhone 4S上的寬度爲85.33。
首先,我認爲這似乎很好,但看着結果,我看到我做錯了。
任何人都可以給我一個提示嗎?
在此先感謝。
感謝回答:)我試過..設置不同scaleModes ......我現在有.AspectFill,但對它們進行測試的幾乎所有...我不斷看到同樣的結果..你知道爲什麼會發生? – msqar
@msqar:'.AspectFill'可以剪切場景的某些部分,但會填滿屏幕。這就像看寬屏電影到舊的3/4電視上,側邊欄被裁剪(或者在啓用縮放功能的現代寬屏上觀看3/4年的「星際迷航」電視劇集:頂部和底部的條塊被裁剪掉)。你在找什麼樣的代表?你試圖解決什麼問題? –
要開始,主菜單例如,我有幾個按鈕與某些動畫,3個按鈕的競爭,實踐和選擇,然後迷你按鈕,不同的東西,包括Facebook和Twitter帳戶。對於你想知道即時消息的內容......我可以看到,所有東西都和我的iPhone 6S一樣大小,但是分辨率爲4S ..你可以想象如何搞亂一切,我什至不能看到選項下面的小按鈕由於我的廣告橫幅在底部。 – msqar