2016-08-17 4 views
1

내 게임에서는 중력에 의해 영향을받는 공을 만들고 있습니다. 게임이 시작될 때 그들은 화면 밖으로 떨어지고 바닥에 그들의 장소를 얻습니다. 다른 힘은 그들에게 적용되지 않습니다.매회 다른 결과를주는 SpriteKit 물리학

문제는 이전의 것과 같은 정확한 물리 특성을 가진 정확한 좌표로 볼을 만드는 것이지만 결과는 동일하지 않습니다. 유사하지만 동일하지는 않습니다. 그러나 매번 값이 같기 때문에 정확하게 같아야한다고 생각합니다.

아래 그림 3에서 내가 말한 것을 이해할 수 있습니다. enter image description hereenter image description hereenter image description here

이유가 궁금하십니까? 어떻게 해결할 수 있습니까?

BallSpriteNode *sprite = [BallSpriteNode spriteNodeWithTexture:ballTexture]; 
sprite.xScale = scale; 
sprite.yScale = scale; 
sprite.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:sprite.size.width/2]; 
sprite.physicsBody.density = 1.0f; 
sprite.physicsBody.restitution = 0; 
sprite.physicsBody.dynamic = YES; 
sprite.physicsBody.categoryBitMask = ballHitCategory; 
sprite.physicsBody.contactTestBitMask = ballHitCategory; 
sprite.physicsBody.collisionBitMask = ballHitCategory; 

CGPoint startPosition = CGPointMake(xPosition, yPosition); 
sprite.position = startPosition; 

[bounceScene addChild:sprite]; 
+0

매번 정확한 결과를 얻으려면 물리 엔진이 어떤 일이 일어나는지 판단하지 않아야합니다. 당신 자신의 손에서 통제하십시오. 초기 위치에 물체를 놓을 때까지 물리 엔진을 비활성화하십시오. 그런 다음 SKActions를 사용하여 필요한 경우 개체를 이동합니다. 그 후에, 당신은 그 물체에 물리학자를 다시 가능하게 할 수 있습니다, 그리고 당신은 잘 가야합니다. – Whirlwind

+0

그것은 나를위한 옵션이 아닙니다. 나는 여러 레벨을 가지고 있으며 각 레벨마다 볼 순서가 다릅니다. 나는 모든 다른 상황을 위해 그것을 할 수 없다. 물리학은 일관되게 행동해야합니다. – mkeremkeskin

+0

그래서 문제가 어디 있습니까? 각 객체의 시작 위치 배열을 만들거나 시작 위치를 나타내는 공당 CGPoint를 정의합니다. 원하는 방식으로 물리 엔진에 의존 할 수 없습니다. – Whirlwind

답변

2

은 물리 엔진 덜 임의 제작에 관여하는 요인이 많이있다 : 나는 스프라이트 노드를 생성하는 방법을

이입니다.

FPS는 임의성에 큰 영향을줍니다. SKSpriteKit Physics에서는 SKScene에 Update 메서드가 있습니다.이 메서드는 매 프레임마다 한 번 호출되며 이전 프레임과의 시간차를 전달합니다. 일반적으로 무작위성을 없애려면 메서드를 재정의해야합니다.

또는 다른 Physics 엔진을 사용하여 사용자 정의 할 수 있습니다 (Bullet Physics). StepSimulation 함수 호출 만 조정하면 동일한 결과를 얻는 것이 매우 쉽습니다.

관련 문제