post list

2014년 8월 31일 일요일

SKNode글 추가 SKPhysicsBody 에 대해서


노드는 옵션으로 물리 몸체(physics body)가질 수 있습니다.

일단  skphysicsbody reference 입니다. 참고 하시고

Tasks


Creating Volume-based Physics Bodies


Creating Edge-based Physics Bodies


Defining How Forces Affect a Physics Body


Defining a Body’s Physical Properties


Working with Collisions and Contacts


Applying Forces and Impulses to a Physics Body


Inspecting the Physics Body’s Position and Velocity


Reading the Physics Body’s Node

  •    node  property

Determining Which Joints Are Connected to a Physics Body


기본적으로 물리몸체는 body를 할당하는 걸로 시작합니다. 

노드 객체가 생성된 상태에서 

클래스 메소드인  


요따위 것들로  바디를 할당합니다.  

여기서 다른건 사용하기 쉬운데 제일 복잡하면서 효율적인 path를 사용하는 
법을 좀 알보겠습니다. 

CGFloat offsetX = self.crocodile.frame.size.width * self.crocodile.anchorPoint.x;
CGFloat offsetY = self.crocodile.frame.size.height * self.crocodile.anchorPoint.y;
 
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 47 - offsetX, 77 - offsetY);
CGPathAddLineToPoint(path, NULL, 5 - offsetX, 51 - offsetY);
CGPathAddLineToPoint(path, NULL, 7 - offsetX, 2 - offsetY);
CGPathAddLineToPoint(path, NULL, 78 - offsetX, 2 - offsetY);
CGPathAddLineToPoint(path, NULL, 102 - offsetX, 21 - offsetY);
 
CGPathCloseSubpath(path);
 
self.crocodile.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];

[self.crocodile skt_attachDebugFrameFromPath:path color:[SKColor redColor]];
CGPathRelease(path);
출처 :http://www.raywenderlich.com/

tc_cut_the-rope_debug
출처 :http://www.raywenderlich.com/

이렇게 빨간 색으로 그려진 것 처럼 path를 이용해서 물리몸체를 할당 할수 있습니다. 
원래 빨간 색선은 나타나지 않으나  
위에 처럼 빨간선을 보기 위해선 
[self.crocodile skt_attachDebugFrameFromPath:path color:[SKColor redColor]]; 
이게 필요합니다. 
먼저 라이브러리를 추가 해야 하구요 

이건 사용법과 설명

Note: You may have noticed a call to skt_attachDebugFrameFromPath: for most of the physics bodies. This is a method from SKNode+SKTDebugDraw, which is part of a group of Sprite Kit utilities developed by Razeware. This particular method helps with debugging physics bodies. To turn it on, openSKNode+SKTDebugDraw.m and change the line BOOL SKTDebugDrawEnabled = NO; to BOOL SKTDebugDrawEnabled = YES;. This will draw a shape that represents your physics body. Don’t forget to turn it off when you’re done!

라이브러리 파일

body를 할당하면 자동으로 중력의 영향을 받기 시작합니다. 

중력 크기 바꾸기 
scene.physicsworld.gravity = CGVectorMake( 0.0 , -9.8);

중력 영향 안 받기 
프로퍼티 affectedByGravity 를 바꿉니다.
node.physicsworld.affectedByGravity = NO;
이렇게 

물리 시뮬레이션 끄기 
프로퍼티 dynamic 값을 no로 설정 

무게 설정
프로퍼티 mass 값 설정 (단위 ,kg)


스프라이트 킷 렌더링 루프 


따라서,
지속적으로 확인 해야 하고  변화를 주어야 하는  코드는 
위의 세개의 메소드에 적어주면 됩니다. 

저 세개의 메소드는  계속 반복하며 돌아 갑니다. 


physicsbody의 핵심은 아마도 충돌과 접촉 이겠죠 
할 이야기가 많아서 다음글에......






스프라이트 킷(spriteKit)의 클래스들 2. 노드 넣기(SKNode)


스프라잍트 킷에 표시되는  물체. 배경  등등이 바로 노드 라는 것입니다.

다음은  SKNode class reference 입니다. 참고하시고

Tasks


Creating a New Node


Inspecting the Node’s Position


Setting a Node’s Scaling and Rotation


Inspecting a Node’s Visibility


Determining Whether a Node Supports User Interaction


Working with Node Trees


Naming Nodes


Running Actions


Adding Physics to a Node


Converting To and From the Node’s Coordinate System


Determining If a Point Lies in a Node


Performing Node Intersections


Storing Custom Node Data




노드는 각각 physicsBody를 가질 수 있으며  이것 들은  physicsWorld에 의해 컨트롤 됩니다.

노드에는 여러 가지가 있습니다.

1. SKSpriteNode :  텍스쳐로 표현 되는 노드입니다.  직접 포토샾 같은 걸로 그림을 그려서  만들수 있는 노드 입니다.

2. SKLabelNode : 글자를 표시 하는 노드 입니다.  글자색도 지정할수 있고 글자체도 가능

3.   SKVideoNode: 비디오를 재생해주는 노드 입니다.

4. SKShapeNode : 직접 코어 그래픽스를 이용해서 도형 을 그릴수 있습니다.

5. SKEmitterNode; 파티클 이미터를 추가할수 있습니다.  쉽게 말해 특수효과 입니다.

6. SKCropNode :  마스크를 이용해서 노드를 잘라 낼수 있습니다.

마스크란?   포토샾이나 그래픽 공부하면 자세히 배우는데
                예를 들어 제대로 된 그림이 있습니다.  거기에 마스크를 씌웁니다.
               그럼 그림이 투명해 집니다. 마스크에 흰색을 칠하면 칠한 부분만  그림이
               보입니다.   요딴 개념을 사용해서 노드를 잘라냅니다.

7.  SKEffectNode : 코어 이미지 필터를 자식노드에 적용 합니다.
                           우리가  스마트폰 카메라 어플 쓸때 사용하는 필터랑 비슷한 겁니다.


SKNode reference 문서가 양이 너무 많아 다 설명하진 못하고 중요하다 생각하는것만 몇개 설명합니다.


노드를 투명 하게 만들고 싶을때
alpha 값을 변화 시키면 됩니다.   0: 투명

노드 이미지를 뒤집고 싶을때

xScale 을 사용합니다. 기본값 1.0
 여기에 -1.0을 넣으면 이미지가 뒤집힙니다.

sknode.xScale = fabs(sknode.xScale) * -1; 이렇게

당연히 yScale도 마찬가지

노드 숨기기
hidden 에  yes대입합니다.


이름 지정하기
sknode.name = @" 이름 ";
이름은 왠만 하면 지정합니다. 그냥  안써도.

노드들이 겹치네 ???

zPosition 에 값을 다르게 주면 됩니다.   값이 높으면 위로 올라옴


그리고 SKSpriteNode 에 관한거  
가장 많이 쓰는 노드니까 요거에 관한거 몇개 더

초기화 하기

Initializing a New Sprite



+는 클래스메소드  - 는 인스턴스 메소드 입니다.
 차이는   간단하게  인스턴스 메소드는 객체를 생성하고 사용하는 메소드
클래스 메소드는  객체 생성 없이 사용하는 메소드입니다.

사이즈 지정하기 

sknode.size = cgsizemake( 100, 100);   // 요딴식으로

중간에 노드의 이미지를 변경하고 싶다.

sknode.texture  요기에 변경하고 싶은 이미지 넣기

위치를 잡을때 기준이 되는 포인트 바꾸기

sknode.anchorPoint 값을 변경해 주면됨  기본값은 (0.5,0.5)  <- 노드중심


physicsBody이는 지금 적으려고 했는데 양이 너무 많아서 다음글에서 ....