2014-02-08 4 views
3

그래서 SpriteKit을 사용하여 게임을 개발하고 있습니다. 그리고 게임을 더 재미있게 만들기 위해 UIDynamicAnimator를 사용하여 게임 내 UIKit 요소에 일부 물리를 추가하기로 결정했습니다. 하나의 큰 문제가 있다는 것을 제외하면 모든 것이 훌륭하게 작동합니다. 순간 나는 UIDynamicAnimator를 할당/초기화합니다.이상한 SpriteKit + UIDynamics 버그

animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view]; 

내 게임의 물리 구조가 완전히 상쇄됩니다. 참조 뷰를 지정하지 않더라도 물리는 여전히 오프셋됩니다.

이상한 점은 완전히 별도의 ViewController에서 UIDynamicAnimator를 만들고있어 동일한 참조보기 또는 이와 유사한 것을 공유하지 않는 것입니다.

업데이트 : 단순히 그래서 같은 UIDynamicItemBehavior을 만드는 심지어 행동 :

UIDynamicBehavior* a = [[UIDynamicBehavior alloc] init]; 

놨까지 내 장면의 물리학.

저는 이것이 SpriteKit과 UIDynamics가 공유하는 물리 엔진의 내부 버그라고 가정합니다.

누구든지 의견이 있으십니까?

+0

를 혼합하지 마십시오 [시작하기 UIKit Dynamics] (https : //developer.apple.com/wwdc/videos/?include=206#206) Apple은 하나를 사용할 수있는 경우와 다른 하나를 사용할 수있는 경우에 대해 논의합니다. 분명히 Apple은 대안으로 간주합니다. (뒤에서 동일한 물리 엔진을 사용합니다. [물리 시뮬레이션] (https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Physics/Physics.html)을 참조하십시오.)), 동시에 사용할 두 기술이 아닙니다. – Rob

+0

나는 똑같은 버그를 가지고있다. – michaelsnowden

답변

2

좋아, 나는 꽤 해킹 된 솔루션을 발견했다. SKScene을 제시하기 전에 UIDynamics 프레임 워크를 사용하면됩니다. 예를 들어, 단순히 동시에 같은 시간에 SpriteKit 및 UIDynamics를 사용하여 발생하는 이상한 물리학 버그 제거 장면을 제시하기 전에이 코드 한 줄을 실행 :

UIDynamicBehavior* a = [[UIDynamicBehavior alloc] init]; 

내가 내부적으로 가정하고있어 물리 엔진을 준비 스프라이트 키트 물리학이 정상적으로 작동하는 방식. 불행히도 언젠가는 작동하지 않을 수도 있고 내 게임 전체가 고통을 겪을 수도 있기 때문에이 솔루션을 신뢰하지 않습니다.

그래서 UIDynamics 프레임 워크 대신 UIView Animation을 사용하여 UIDynamics Framework에서 얻은 재미있는 물리 효과를 복제하기로 결정했습니다.

IOS 용 편집에 따르면 doctordoder에 따르면이 버그는 여전히 iOS 8에 존재하며이 해결 방법은 여전히 ​​작동합니다.

+2

하하하 WTF 왜이 일을 하는가? 내 버그도 완전히 고쳤다! – michaelsnowden

+0

@doctordoder 네, 매우 이상한 해결 방법입니다. 나는 iOS 8에서 이것을 시험해보고 버그가 아직 고쳐 졌는지 확인하고 싶다. 기회가 생길 때 대답을 편집 할 것입니다. –

+0

버그는 실제로 iOS 8에서 나에게 발생했지만 수정 사항은 계속 작동합니다. – michaelsnowden

0

iOS 9에서 @Epic Byte의 해결책은 여전히 ​​절반의 해결책을 제공한다는 점에 유의하십시오.

그것은 물리 엔진 이전 시작 (우리 initializeSpriteKit 게임 등 전)하지만 불행히도 을 그것을 혼합합니다.

그리고 allocationinitSpriteKit 경기 도중 UIDynamicAnimatorphysicsWorld의 원인이됩니다과 다르게 gravity 행위와 같은 속성을합니다.

UIDynamicAnimator 초기화 중에 physicsWorld이 잠시 동안 제거 된 것 같습니다 (스위칭 엔진?).

결론 :

  • ALLOC하고 최대한 빨리 UIDynamicAnimator init을 다르게 예를 들어, 당신의 물리 세계를 처리 에서

    [UIDynamicAnimator new]; 전화 대리인의 didFinishLaunchingWithOptions

또는

  • WWDC 2013 비디오에서 UIKit 역학 및 SpriteKit