티스토리 뷰

CS/iOS

[iOS] Sprite Kit기초 내부 속성들

Napster 2019. 2. 11. 15:46



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를 추가해줘야한다.






Comments