2014-10-08 1 views
0

나는 떠있는 공을 만들고 싶다.SceneKit의 중역에 영향을 줍니까?

내가 할 일 physicsbody.affectedbygravity = NO;

하지만 무엇을해야합니까? scenekit?

나는 질량을 0으로 설정하려고 시도했지만, 동적 인 몸체는 정적으로 변했다 : 중력이나 충돌로 움직이지 않는다. 볼은 천천히 폭포 - 내 코드

// add ball 
SCNNode *ball = [SCNNode node]; 
ball.geometry = [SCNSphere sphereWithRadius:5]; 
ball.geometry.firstMaterial.locksAmbientWithDiffuse = YES; 
ball.geometry.firstMaterial.diffuse.contents = @"ball.jpg"; 
ball.geometry.firstMaterial.diffuse.contentsTransform = SCNMatrix4MakeScale(2, 1, 1); 
ball.geometry.firstMaterial.diffuse.wrapS = SCNWrapModeMirror; 
ball.physicsBody = [SCNPhysicsBody dynamicBody]; 
ball.physicsBody.restitution = 0.9; 
//ball.physicsBody.mass=0; //here makes a ball statical and not moving 
ball.physicsBody.allowsResting = YES; 
[[scene rootNode] addChildNode:ball]; 

UPD이 너무 도움이됩니다.

- (void)renderer:(id<SCNSceneRenderer>)aRenderer didSimulatePhysicsAtTime:(NSTimeInterval)time{ 

[ball.physicsBody applyForce:SCNVector3Make(0, 9.8, 0) atPosition:SCNVector3Make(0,0,0) impulse:NO]; //this 
ball.physicsBody.velocity=SCNVector3Make(0,0,0); //or this 
} 

답변

0

부분적인 해결책과 재미있는 버그가 있습니다. 접촉하면 그

// .... the same code above in creation 
ball.physicsBody.mass=1; 
[[scene rootNode] addChildNode:ball]; 
ball.physicsBody.mass=0; //important right after creating!!! or it become bodyless after changing mass to 1 

후 충돌 및 "부동"과 그것을 놓을 때까지 이것은 볼의 체류를 이동할 수없는 수 있습니다. 중력과 동등한 힘을 적용하면 천천히 떨어지게됩니다. 원인으로 떨어지는 속도가 줄어들 수 있습니다.

// physics contact delegate 
- (void)physicsWorld:(SCNPhysicsWorld *)world didBeginContact:(SCNPhysicsContact *)contact{ 
if (contact.nodeA.physicsBody.type == SCNPhysicsBodyTypeDynamic && contact.nodeA.physicsBody.mass==0) 
    contact.nodeA.physicsBody.mass=1; 
else 
    if (contact.nodeB.physicsBody.type == SCNPhysicsBodyTypeDynamic && contact.nodeB.physicsBody.mass==0) 
     contact.nodeB.physicsBody.mass=1; 
} 
1

scene.physicsWorld.gravity를 0으로 설정하여 중력을 끌 수 있습니다. 그러나 일부 개체가 영향을 받고 일부 개체는 [SCNPhysicsField linearGravityField]를 추가하고 categoryBitMask를 구성하여 원하는 노드에 영향을 주도록 할 수 있습니다.

+0

Apple의 매뉴얼에 비트 마스크에 관한 내용이 없습니다. https://developer.apple.com/library/prerelease/iOS/documentation/SceneKit/Reference/SCNPhysicsField_Class/index.html#//apple_ref/occ/를 참조하십시오. clm/SCNPhysicsField/linearGravityField ----- 그래서, 같은 비트 마스크를 "gravitated"모델과 필드의 노드로 설정해야한다는 것을 의미합니까? – djdance

+0

그래서 Scenekit 필드 맨은 다음 위치에 있습니다. https://developer.apple.com/library/ios/documentation/SceneKit/Reference/SCNPhysicsField_Class/index.html#//apple_ref/occ/instp/SCNPhysicsField/categoryBitMask – djdance