2016-07-07 2 views
2

나는 내 장면에서 수정 된 업데이트가있는 시나리오를 가지고 있습니다.스프라이트 키트 물리학 : 고정 된 업데이트를 사용할 수 있습니까?

업데이트 할 때마다 스프라이트 이전 위치를 사용하여 그림자를 만들고 싶습니다. 어떤 내가 스프라이트에 충격을 적용 할 때

func update(currentTime: NSTimeInterval) 
{ 
    shadow.position = sprite.position 
} 

지금, 나는 스프라이트에 관계없이 실제로 다음 업데이트 프레임에 도착하는 데 얼마나 많은 시간 단계의 같은 수를 증가합니다.

그러나 내 시뮬레이터의 그림자와 내 장치의 그림자를 비교할 때 두 장치 사이의 거리가 매우 다른 경우와는 다릅니다.

E.G. 스프라이트를 60 스텝 이동시키기 위해 1 초가 걸렸습니다. 스프라이트를 60 초 움직이기 위해 2 초가 걸립니다.

고정 된 업데이트 세계에서. 모두 달성하기 위해 60 프레임을 잡았고 시뮬레이터가 막 지연되었습니다. (120)는

나는 나 업데이트를 고칠 것입니다 희망의 SKViewasynchronous을 해제 시도

단계에서

실제 결과는 그러나 시뮬레이터를 넣어 것입니다,하지만 그건 아무데도 날 잡았어, 그래서 누군가가 알고 있다면 내가 부탁하고 고정 된 업데이트 프레임 워크에서 작동하도록 SKPhysics를 얻는 방법.

+0

이미 왜 그림자를 제한하지 않는 – Kametrixom

+1

에 의해 움직임을 규모의'currentTime' 인수를 업데이트 사이의 시간 차이를 계산 스프라이트에요? – Knight0fDragon

+1

을 지체, 당신은 기계의 노력을 배가하는 좋은 방법 아닙니다 차이 –

답변

1

당신을 위해 도움이 될 수 있다면 난 당신이 매개 변수를 알고 확신, 잘 모르겠지만, 어쩌면 당신은 발견하지 않았습니다 :

if let scene = GameScene(fileNamed:"GameScene") { 
      // Configure the view. 
      let skView = self.view as! SKView 
      skView.showsFPS = true 
      skView.showsPhysics = true 
      skView.showsNodeCount = true 

      skView.frameInterval = 1 // real devices 
      #if (arch(i386) || arch(x86_64)) && os(iOS) 
       skView.frameInterval = 2 // <- this one 
      #endif 

      /* Sprite Kit applies additional optimizations to improve rendering performance */ 
      skView.ignoresSiblingOrder = true 
      /* Set the scale mode to scale to fit the window */ 
      scene.scaleMode = .ResizeFill 
      skView.presentScene(scene) 
     } 

원천 :

/* Number of hardware vsyncs between callbacks, same behaviour as CADisplayLink. Defaults to 1 (render every vsync) */ 
     public var frameInterval: Int 

워드 프로세서 :이 공식 애플 document SA

입니다 y :

기본값은 1이며 게임 결과에 디스플레이의 새로 고침 빈도 이 표시됩니다. 값이 1보다 큰 값으로 설정된 경우 디스플레이 링크는 기본 재생 빈도의 일부로 게임에 알립니다. 예를 들어, 간격을 2로 설정하면 장면이 다른 모든 프레임에서 호출되어 프레임 속도의 절반을 제공합니다.

이 값을 1 미만으로 설정하면 정의되지 않은 동작이 발생하고 프로그래머 오류가 발생합니다.

+0

불행히도, 아무것도 변경하지 않으면 업데이트 호출간에 더 많은 시간을 할애 할 수 있습니다.필자는 델타 시간을 기준으로 다시 계산할 필요없이 고정 된 업데이트를 원합니다 (이 시점에서 노력을 두 배로하여 귀중한 사이클을 낭비하기 때문에). 기본적으로 델타 시간은 항상 16.6666666 ms라고 생각해야합니다. 델타 시간은 매 업데이트마다 약간의 차이가 날 수 있습니다. – Knight0fDragon

+0

내가 생각하고있는 유일한 다른 점은 Cocos2D 소스 (자세한 내용은 CCScheduler.m)에서 세부 정보를 찾을 수있는 곳입니다. cocos2d 업데이트 방법에 대한 모든 수정 사항은 여기에 적용됩니다. https://github.com/Maxim-Filimonov/conways_gol_ios/blob/master/ConwaysGOL.spritebuilder/Source/libs/cocos2d-iphone/cocos2d/CCScheduler.m –

+0

Cocoas2d는 스프라이트 키트가 아닙니다. 저는 코코아 2d를 사용하지 않습니다. 문제는 코코아 2d에 관한 것이 아닙니다. 목표는 SKPhysics를 고정 된 업데이트 방식으로 작동시키는 것입니다. (기술적으로, 스프라이트 키트 업데이트가 진정한 일관된 방식으로 작동하도록 할 수 있다면, dTime은 16.6666이고, 그때는 황금일 것이다) – Knight0fDragon

관련 문제