내가 GLKit으로 만드는 응용 프로그램에서 사용자가 빈 타일에 인접한 타일을 탭하고 타일이 새 위치로 슬라이드하는 슬라이더 퍼즐이 있습니다. 단일 태스크를 수행해야하는 메소드의 수를 줄이기 위해 전체 슬라이딩 애니메이션을 하나의 단일 루프로 처리하기로 결정했습니다.메인 루프 외부에서 OpenGL ES 객체를 렌더링하는 방법은 무엇입니까?
- (void)slideSelectedTile
{
while (!self.selectedTile.hasFinishedMoving)
{
[self.selectedTile moveByVector:self.tileDisplacement];
[self render];
[NSThread sleepForTimeInterval:.1];
}
}
문제는 렌더링 호출이이 루프 내에서 작동하지 않는다는 것입니다. 타일은 전체 루프가 끝나고 게임이 다음 glkViewDrawInRect
호출에 도달하면 렌더링됩니다. 여기서 render
을 호출합니다. 물론 각 타일 렌더링 코드가 포함되어 있습니다.
루프에있을 때 현재 스레드가 주 스레드이고 루프를 사용하지 않고 수동으로 렌더링을 호출 할 수 있다는 것을 확인했습니다. 여기서 내가 뭘 잘못하고 있니?
놀랍게도 잘 작동했습니다. 고마워요! 나는 특별히 선형 보간이라고 말했어. 선형 보간 이외에 다른 것이 있습니까? – michaelsnowden
예, 꽤 많은 수입니다. 당신은 안락함과 같은 것을하거나 쉽게 할 수 있습니다.pow (currentTime/animationTime), .75)를 사용하는 동안 천천히 시작하고 빠르게 끝내는 pow ((currentTime/animationTime), .1.5에서와 같이)이 두 가지는 가장 쉽게 power (currentTime/animationTime) 천천히 끝내라. 안락함과 안락함을 모두하기 위해서는 좀 더 많은 작업이 필요합니다. 일반적으로 F (X)는 F (0) = 0이고 F (1) = 1이고, X는 (currentTime/animationTime)이고 간격은 [0,1]입니다. –
나는 메인 루프에서 타일에 대한 업데이트를 호출 할 필요가 없도록 애니메이션 메서드 내에서 별도의 스레드를 만드는 아이디어를 좋아합니다. 이 작업을 수행하는 방법에 대해 올바른 방향으로 알려줄 수 있습니까? 마지막 질문으로 약속드립니다. – michaelsnowden