class RainFall: SKScene {}
-
모든 active SpriteKit content 를 구성하는 object 로, SKScene 객체는 SpriteKit 의 content scene을 나타낸다.
-
뷰는 장면들을 전환하여 보여줄 수 있는데, 여기서 SKScene이 각 장면에 해당하는 클래스이다.
-
씬은 화면에 등장하는 컨텐츠 구성요소인 Node들을 관리하게 되는데, 씬은 SpriteKit 노드(
SKNode
)들의 트리에 있는 루트 노드이다. -
이러한 노드들은 씬(scene)이 애니메이션을 만들고 표시하기 위해 렌더링하는 콘텐츠를 제공한다.
-
scene 을 표시하려면
SKView
,SKRenderer
, 또는WKInterfaceSKScene
에서 scene 을 표시한다. -
SKScene
은SKEffectNode
의 하위 클래스로, 특정 효과를 전체 씬에 적용할 수 있다. -
SKScene
을 로드하는 가장 일반적인 방법은 Xcode scene editor 에 정의된.sks
파일을 통해서이ㄷ
출처
- https://developer.apple.com/documentation/spritekit/skscene
- http://iconer.iptime.org/~john/wp/index.php/2019/03/23/p-043-skspritenode/
- https://sonej.tistory.com/16
- https://developer.apple.com/documentation/spritekit/skscene/creating_a_scene_from_a_file
-
SKScene 에서
sceneDidLoad
를 override 해서 scene 이 presented 된 시점을 캐치할 수 있다class RainFall: SKScene { override func sceneDidLoad() { } }
출처
-
씬(scene)의 크기는 씬(scene)이 표시되는 뷰의 크기와 다를 수 있기 때문에
scaleMode
로 씬(scene)의 보이는 부분이 뷰에 매핑되는 방법을 결정할 수 있다. -
기본값은
SKsceneScaleMode.fill
이고aspectFill
,aspectFit
,resizeFill
등이 있다 -
.aspectFit 을 선택하면 아래와 같이 보임
aspectFit - 각 디멘션의 scaling factor가 계산되고 둘 중 더 작은 것이 선택됨. 씬(scene)의 각 축은 동일한 scaling factor에 의해 scaling 됨. 이렇게 하면 전체 씬(scene)을 볼 수 있지만 뷰에서 letterboxing가 필요할 수 있음.)
class RainFall: SKScene {
override func sceneDidLoad() {
size = CGSize(width: UIScreen.main.bounds.size.width - 100,
height: UIScreen.main.bounds.size.height)
scaleMode = .aspectFit
}
}
class RainFall: SKScene {
override func sceneDidLoad() {
size = CGSize(width: UIScreen.main.bounds.size.width - 100,
height: UIScreen.main.bounds.size.height - 400)
scaleMode = .aspectFit
}
}
-
resizeFill 을 선택하면 아래와 같이 보임
resizeFill - 씬(scene)의 크기가 뷰에 맞게 조정되지 않음. 대신 씬(scene)의 dimension이 항상 뷰의 dimension과 일치하도록 씬(scene)의 크기가 자동으로 조정됨
size = CGSize(width: UIScreen.main.bounds.size.width - 100,
height: UIScreen.main.bounds.size.height - 400)
scaleMode = .resizeFill
출처
class RainFall: SKScene {
override func sceneDidLoad() {
size = UIScreen.main.bounds.size
anchorPoint = CGPoint(x: 0.5, y: 1)
}
}
-
씬(scene)의 origin에 해당하는 뷰 프레임의 point
-
씬(scene)이 표시되고 카메라 노드 (
var camera: SKCameraNode?
)가 지정되지 않은 경우에는size
와anchorPoint
프로퍼티에 따라 씬(scene) 좌표 공간 (coordinate space) 의 어느 부분이 뷰에 표시되는지 결정됨 -
씬(scene)이 항상 노드 트리의 루트 노드이기 때문에 씬(scene)의
position
는 Scene Kit 에서 무시됨. 기본값은zero
이며 변경할 수 없음그러나
anchorPoint
속성을 설정하여 씬(scene)의 origin을 이동할 수 있음. -
unit coordinate space을 사용하여 값을 지정. 씬의 visible coordinate space 은
(0,0)
부터(width,height)
까지 -
기본값은 뷰의 프레임 직사각형의 왼쪽 하단 모서리에 해당하는 (0,0)
-
만약 0.5, 0.5 로 세팅하면 node 를 screen 의 center 로 놓을 수 있음
class RainFall: SKScene {
override func sceneDidLoad() {
size = UIScreen.main.bounds.size
scaleMode = .resizeFill
// anchor point..
anchorPoint = CGPoint(x: 0.5, y: 0.5)
// bg color...
backgroundColor = .clear
// creating node and adding to scene..
let node = SKEmitterNode(fileNamed: "RainFall.sks")!
addChild(node)
}
}
출처
- https://developer.apple.com/documentation/spritekit/skscene/1519864-anchorpoint
- https://developer.apple.com/documentation/spritekit/skscene/positioning_a_scene_s_origin_within_its_view
- scene 의 백그라운드 컬러
- 기본 컬러는 회색인 RGBA
0.15, 0.15, 0.15, 1.0
출처
-
receiver 의 하위 노드 목록 마지막에 노드를 추가
-
파라미터로
SKNode
타입의 인스턴스 추가 가능func addChild(_ node: SKNode)
-
추가할 노드는 parent 에 이미 존재하면 안됨
출처