티스토리 뷰
SKNode & SKScene
Node는 구조체에서 Tree처럼 구현되어있다.
SKScene밑으로 Child가 Node들로 이어져있는 것이다. 모든 Node는 이렇게 구현되어있다.
Node의 Properties(직감적으로 어떤것들이 사용되는지 알 수 있다.)
- Position: 말그대로 좌표상에서 Node의 위치를 나타내는데 사용된다.
- xScale & yScale: 해당 노드의 Scaling 사이즈를 조절하는데 사용된다.
- zRotate: Node의 방향을 조절하는 속성이다.
만약에 하나의 속성을 변경하게 되면 자동적으로 그 노드의 Children Node에게도 동일하게 영향을 준다.
(예를 들면 노드에 노드가 있는경우 상단 노드가 Rotate되면 동일하게 같이 Rotate되는 구조인듯하다.)
-Frame: Node를 Rectangle 로 감싸고있다. 예를들면 해당 노드에 Label이 있다면 텍스트의 크기나 폰트의 크기에따라 Frame의 크기도 바뀐다.
-Accumulated Frame가 존재하고, getAccumulatedFrame()은 Node에 대한 감싸고있는 Rectangle를 가져오는데, 모든 Children 노드의 Rectangle를 감싸는 최상단의 frame만 가져온다. 왜냐하면 내부의 프레임은 필요가 없기 때문이다.
-Alpha
-isHidden
노드는 모든걸 그릴 수 있고, element들을 표현할 수 있다. Grouping Objects는 노드들간의 관계를 쉽게 접근 할 수 있게 도와준다. 예를 들면 하나의 Scene에서 여러개의 Layers 를 두게될 때 말이다.
SKSpriteNode
-Texture/Image, ColorSprite가 될 수 있다. Sprite는 건물의 벽돌이라고 생각 할 수 있다.
대부분의 경우는 SKSpriteNode의 Texture를 사용하게된다. 이건 모든게 될 수 있는데, Backgrounds, GUI Elements, 캐릭터 등등이다. 여기서 GUI Element가 된다는건 놀랍다.
SKActions
-runAction
-runActionWithKey
-runActionWithCompletion
액션이 실행되는 방식은 두가지가있다. Direct execution과 Indirect Execution인데, Direct는 실행 후 다음프레임에 완료되어있다. Indirect는 몇몇의 time interval 동안 완료가 된다. 우리가 지정해 줄 수 있다. 액션은 3가지 방법으로 실행 시킬 수 있는데 Sequence(Child 액션 다음에 바로 다음액션이 실행되는 것), Group(동시에 액션이 함께 실행되는 것), Repeat(루프, 무제한)으로 액션을 동작시키는 방법이 있다.
-hasActions(): 노드가 액션 실행되는을 가지고있는지 확인하는 메소드
-removeAllActions(): 노드로 부터 모든 액션을 제거하는 메소드
PhysicsWorld
중력은 CGVector로 표현되는데 디폴트 값은 우리가 잘아는 중력값인 x:0.0, y: -9.8로 되어있다. 단위가 그러면..?
SKPhysicsBody
노드들은 PhysicsBody를 가질 수 있다. 물리적인 시뮬레이션은 모든 PhysicsBodies들에게 물리적인 행동들을 계산하여 준다.
-Volume Based: 다이나믹 Bodies이며, 질량과 부피를 가지고 있다.
-Edge Based: 다이나믹 하지 않다는건 스테틱이며, 질량과 부피를 가지고 있지 않다.
Dynamic Volume이라는 것은 힘에 의해 영향을 받고 다른 PhysicsBodies에 의해 영향을 받는다. 그리고 움직일 수 있으며 다른 Physical elements과 상호작용할 수 있다.
Edge는 중력과 다른 Physicsbodies에게 영향을 받지 않는다. 말그대로 static한 것.
physicsbody가 복잡하면 복잡할 수록 더많은 computing파워가 요구된다.(당연한 것 아닌가.) 최대한 할 수 있으면 간단하게 작업한다.
physicsbody들도 많은 properties가 있는데 생략한다.
-Mass
-Friction: 다른 body와 터치가 되었을때의 정의한다.
-Damping: 환경과 함께 friction을 정의한다. 다른 환경들 공기나 물일때의 상황일때 다르게 Friction을 줄 수 있다는 것!
-Restitution: body들이 충돌했을때 유지되는 에너지를 정의한다. 그리고 충돌 후 얼마나 많은 에너지를 방출하는가 정의(탄성계수 같은것?)
Sprite Kit을 쓰면서
스프라이트 킷을 쓰면서 느낀점은 Xcode에 최적화가 정말 잘 안되어 있다는 것이다. 한가지 예로 이미지 리소스를 추가할때, 혹은 TileMap에 새로운 이미지를 넣을때마다 Rendering Error와 함께 Xcode가 주구장창 강제종료가된다. 그리고 UIkit과는 다른 화면 좌표형식, 다른듯 비슷한 화면 추가방식 때문에 좀더 addChild를 할때 좀더 신경 써줘야한다.
게임의 경우 상태값들이 존재하게되는데(점프, 걷는중, 등등) 이 값들을 View하나에서 모두 관리하는게 좋은 것 같아 보이진 않았다. SKScene의 LifeCycle에 화면에 맞게 게임의 상태와 화면을 불러주는게 중요하다. Update 메소드가 가장먼저 불리는데, 내가 Node를 추가할때에도 언제 어디서 불리는지에따라 화면의 동작이 다르게 한다. 적절한 곳에 node를 추가해줘야한다.
'CS > iOS' 카테고리의 다른 글
[iOS] iOS에서 이미지 Render할때 느릴때 해결방법 (0) | 2018.08.24 |
---|---|
[iOS] Universal Framework 만들기 (4) | 2018.05.15 |
[iOS]나만의 Framework만들기!! (0) | 2018.05.09 |
[iOS]FireBase Custom Token, KakaoTalk로그인하기. (2) | 2018.04.18 |
[iOS]# iOS 앱을 구성하는 핵심 객체들과 iOS 메인 런루프 동작 이해 (0) | 2017.12.29 |
- quadcopter
- QUAD
- skscene
- custom Camera
- Swift
- string
- swift sprite kit
- image render
- 태그를 입력해 주세요.
- ios sprite kit
- des
- C++
- draw 이미지
- ios custom camera capture
- slow image
- swift custom camera
- sprite kit
- ios
- 스위프트
- Mobile Robot Kinematics
- 영화
- 스택
- 객체
- TDD
- 코드스쿼드
- SKPhysicsbody
- 자료구조
- UIGraphicsImageRendererFormat
- 만들기
- swift camera 이미지 느림
- Total
- Today
- Yesterday