2016-07-27 50 views
2

我正在創建我的第一個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。

首先,我認爲這似乎很好,但看着結果,我看到我做錯了。

任何人都可以給我一個提示嗎?

在此先感謝。

回答

1

讓我阻止你:)

我理解你的困難,這是不以建立不同的屏幕尺寸遊戲的正確途徑。

你應該建立你的遊戲只考慮Scene

然後打開GameViewController.swift和尋找這一行

scene.scaleMode = .AspectFill 

此行確實允許您定義的場景應該如何代表到屏幕(這對不同屏幕尺寸的處理尤爲重要)。

你有4個選項

  • .Fill:縮放SKScene填滿整個SKView
  • .AspectFill:縮放SKScene以填充SKView,同時保留場景的高寬比。如果視圖具有不同的縱橫比,則可能會發生一些裁剪。
  • .AspectFit:縮放SKScene以適應SKView內,同時保留場景的縱橫比。如果 視圖具有不同的縱橫比,則可能會發生一些信箱操作。
  • .ResizeFill:修改SKScene的實際尺寸完全匹配SKView
+0

感謝回答:)我試過..設置不同scaleModes ......我現在有.AspectFill,但對它們進行測試的幾乎所有...我不斷看到同樣的結果..你知道爲什麼會發生? – msqar

+0

@msqar:'.AspectFill'可以剪切場景的某些部分,但會填滿屏幕。這就像看寬屏電影到舊的3/4電視上,側邊欄被裁剪(或者在啓用縮放功能的現代寬屏上觀看3/4年的「星際迷航」電視劇集:頂部和底部的條塊被裁剪掉)。你在找什麼樣的代表?你試圖解決什麼問題? –

+0

要開始,主菜單例如,我有幾個按鈕與某些動畫,3個按鈕的競爭,實踐和選擇,然後迷你按鈕,不同的東西,包括Facebook和Twitter帳戶。對於你想知道即時消息的內容......我可以看到,所有東西都和我的iPhone 6S一樣大小,但是分辨率爲4S ..你可以想象如何搞亂一切,我什至不能看到選項下面的小按鈕由於我的廣告橫幅在底部。 – msqar