2014-09-11 3 views
1

현재 SceneKit 앱에서 작동 중이고 최근 iPhone 5에서 테스트하는 동안 문제가 발생했습니다.SceneKit backgrounding으로 인해 SCNAction 글리치가 발생합니다

블록을 왼쪽과 오른쪽으로 반복하여 이동하려면 아래 코드를 작성하십시오. 모든 것이 잘 작동합니다.

SCNAction *mn1 = [SCNAction moveByX:-2.2 y:0 z:0 duration:1]; 
    SCNAction *mn2 = [SCNAction moveByX:2.2 y:0 z:0 duration:1]; 
    SCNAction *mn3 = [SCNAction waitForDuration:0.5]; 
    SCNAction *mns = [SCNAction repeatActionForever:[SCNAction sequence:@[mn3,mn1,mn3,mn2]]]; 
    [self.blueNode1 runAction:mns]; 

과의

AppDelegate.m I 홈 버튼을 통해 "배경/비활성 모드"를 입력하고 내 애플 리케이션에 돌아 가면 모든 것이 여전히 부드러운 실행

- (void)applicationWillResignActive:(UIApplication *)application { 
// Sent when the application is about to move from active to inactive state. This can occur for   
certain types of temporary interruptions (such as an incoming phone call or SMS message) or when 
the user quits the application and it begins the transition to the background state. 
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame 
rates. Games should use this method to pause the game. 

SCNView *view = (SCNView *)self.window.rootViewController.view; 
view.scene.paused = YES; 

} 

- (void)applicationDidBecomeActive:(UIApplication *)application { 
// Restart any tasks that were paused (or not yet started) while the application was inactive.    
If the application was previously in the background, optionally refresh the user interface. 

SCNView *view = (SCNView *)self.window.rootViewController.view; 
view.scene.paused = NO; 

} 

.

전원 버튼을 통해 "배경"을 입력하고 잠시 기다렸다가 내 응용 프로그램으로 돌아갈 때. blueNode1은 일정 기간 동안 매우 빠른 속도로 동작을 반복적으로 실행합니다. 앱에서 보내는 시간이 길수록 앱으로 돌아갈 때 블록이 너무 오래 움직입니다. 왜 이런 일이 일어나지는 모르겠지만 잠재적으로 게임을 부러 뜨리는 버그 일 수 있습니다.

나는 내 문제를 분명히하기를 바랍니다. 어떤 도움을 주셔서 감사합니다.

편집 : 새 프로젝트에서 버그를 다시 만들 수 있었는지 확인하기 위해 새로운 테스트 응용 프로그램을 만들었습니다. 그러나 내 iPhone이 내 Mac을 통해 앱을 실행하는 동안 발생하지 않는 것처럼 보였습니다. 그러나 iPhone을 연결 해제하고 테스트 앱을 실행하자마자 새 프로젝트에서 다시 만들 수있었습니다.

+1

내 테스트에서이 문제가 보이지 않지만, 관계없이 (http://bugreport.apple.com) [제출할 좋은 버그]입니다. 가능한 해결 방법 : 장면을 일시 중지하는 대신 비활성 상태가되었을 때 노드에서 조치를 제거하고 돌아올 때 다시 추가하십시오. ('moveBy' 액션에 대해서는 잘 작동하지 않을 것입니다. 왜냐하면 당신이 어디에서 제거되었는지를 알 수 없기 때문에,'moveTo' 액션으로 같은 효과를 얻을 수 있습니다.) – rickster

+0

테스트 할 때마다 그것을 봅니다. 그것. 나는 MoveBy를 대신 수행하려고 생각했지만, "waitforduration"과 "run block"을 포함하는 반복 시퀀스를 발견했으며, 같은 문제가 발생했다. (실행 블록 코드를 반복적으로 실행하여 앱으로 돌아온다.) 그러나이 버그는 회전 SCNAction이 연결된 노드에는 영향을 미치지 않습니다. 버그를보고 할 것이고, 다른 누군가가 그것을 보았고 나에게 약간의 통찰력을 줄 수 있기를 바랄뿐입니다. – nick

+0

액션을 제거하고 다시 돌아올 때 액션을 다시 추가하는 것에 대한 의미를 알 수 있습니다.하지만 내 앱에는 15 개의 레벨이 있으며 동작을 반복하는 많은 노드가 있습니다. 나는 그것이 할 수 있다고 가정하지만,이 방법으로 사용하는 모든 노드를 관리해야한다는 것은 매우 비현실적입니다. – nick

답변

0

https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNScene_Class/index.html#//apple_ref/occ/instp/SCNScene/paused

실제로 일시 정지()/플레이 달리 SCNActions() SCNView에 방법에 영향을 미칠 것으로 보인다 SCNScene

에 일시 중지 속성을 사용하십시오.

사용할 수없는 경우 모든 SCNActions에서 속도 속성을 변경하려고 시도하지만이 방법을 시도하지 않은 것이 좋습니다.

관련 문제