簡體   English   中英

如何在 Swift 中修改 SpriteKit 節點的大小?

[英]How can I modify the size of SpriteKit nodes in Swift?

在我的應用程序中,對於一個屏幕,我正在設置 SpriteKit 節點的大小並將背景居中。 例如,我將背景子視圖的大小設置如下:

backgroundNode.size = self.frame.size  

雖然這適用於iPhone 6 Plus ,但iPhone 5較小的屏幕/較低的分辨率意味着其他節點的默認尺寸太大而無法適應它們的場景。

如何強制其他節點符合后台節點的大小? 我想將每個子視圖的大小除以背景子視圖的大小,但是不能直接在 size 屬性上進行數學運算。

SpriteKi t場景 ( SKScene ) 包含節點、節點 ( SKNode ),它們具有sizeposition屬性(分別為CGSizeCGPoint類型)。

UIKit UIView framebounds屬性是一個CGRect結構,由相同的CGSizeCGPoint類型的結構組成。

因此,了解如何使用CGRectCGSizeCGPoint確實很有幫助。

請注意,在 Swift 中,作為結構的CGRectCGSizeCGPoint總是按值傳遞給函數,而不是像類那樣通過引用傳遞,因此您不能修改傳遞給函數的結構內的字段,並將它們傳播回調用者的結構副本,無需采取額外步驟。

因為 size 和 position 屬性是復合類型,所以在數學和邏輯運算中不能像標量一樣使用它們; 因為它們包含多個屬性。

例如:

  • CGSize包含widthheight屬性,
  • CGPointxy屬性組成。

如果要划分大小,您必須單獨訪問CGSize結構的寬度和高度屬性。

您可以在一個操作中分配大小(即單個構造函數):

node.size = CGSize(
   width:  node.size.width  / backgroundNode.size.width,
   height: node.size.height / backgroundNode.size.height)

或者你可以分開做:

node.size.width  = node.size.width  / backgroundNode.size.width
node.size.height = node.size.height / backgroundNode.size.height

在處理CGRect字段時,有時將其作為單個實體處理很有用。 例如,

 view.frame = CGRect(x: 0, y: 0, width: 10, height: 10)

其他人有時單獨設置sizeorigin屬性更實用:

 view.frame.origin = CGPoint (x: 0, y: 0)
 view.frame.size   = CGSize  (width: 10, height: 10)

甚至:

 view.frame.origin.x     = 0
 view.frame.origin.y     = 0
 view.frame.size.width   = 10
 view.frame.size.height  = 10

還值得了解每個結構的“零”靜態屬性,作為方便的簡寫等價物:

 CGRect .zero   ...    CGRect  (x: 0, y: 0, width: 0, height: 0)
 CGPoint.zero   ...    CGPoint (x: 0, y: 0)
 CGSize .zero   ...    CGSize  (width: 0, height: 0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM