2011-10-09 2 views
0

내가하고있는 게임에 대한 시간 제한자가 있습니다. 현재 내가하고있는 일은 초기 값을 사용하고 프레임 업데이트 당 하나의 값을 차감하고 있습니다. 여기에 코드입니다 : 지금게임을위한 타이머를 만드는 가장 좋은 방법

- (void) gameTime { 
    fullTime = fullTime - 1; 
    NSLog(@"%i", fullTime); 
    float xScale = 10 * fullTime/4000; 
    //_game.timerGraphic.scaleX = 10; 
    //[_game.timerGraphic setScaleX:10]; 
    [_game.timerGraphic setScaleX:xScale];  
} 

문제 timerGraphicCCSprite이고, 나는 ScaleX를 업데이트 할 때 내가이 부드러운을하고 "타이머의 크기를 조정할 수있는 절대 값이, 어쨌든이 그 않는 일을 나던이다 "더 매끄러운 방법으로?

답변

2

이런 종류의 접근법의 문제점은 앱의 타이머를 프레임 속도에 의존하게 만드는 것입니다. Cocos2D는 이러한 종류의 문제를 처리하기위한 메커니즘을 내장하고 있습니다. 특히, 새 프레임을로드 할 때마다 이전 프레임과 현재 프레임 사이에 이 경과 한 시간을 기준으로 애니메이션 값을 업데이트합니다 (). this Cocos2D tutorial에서 "물건 만들기"섹션을보십시오. 선택 도구를 예약하는 방법 (즉, -nextFrame: 메소드를 실행하는 타이머를 만드는 방법)에 대해 설명합니다. 이 메서드는 부드러운 애니메이션을 만드는 데 사용할 수있는 dt (델타 시간) 인수를 전달받습니다.

+0

안녕하십니까. 답장을 보내 주셔서 감사합니다.하지만 이제는 문제를 발견했습니다. float를 사용하여 크기를 조정하려는 경우, '1.5f'와 같이 끝 부분에 'f'를 사용해야합니다. 내 예제는 그 일이 일어나지 않는, 그 대신에'1.5'을하고 !!! 내가 어떻게 할 수 있는지 말해 줄 수있어? – ahoura

+1

여기가 당신 문제라고 생각하지 않습니다. 십진법 리터럴의 끝에'f'를 두는 것은 그 숫자를 명시 적으로'double' 대신에'float' (소수점 리터럴의 경우 objective-c의 기본값)로 지정하기 만하면됩니다. 사실은 'fullTime/4000'이 부동 소수점 나누기 대신 정수 나누기를 수행하는 곳입니다. '(float) 10.0 * fullTime/4000.0'을 써서 고칠 수 있습니다. 그래도 애니메이션 코드는 가능한 한 매끄럽지 않을 프레임 속도에 의존합니다. – Sean

+0

덕분에, 코드가 실제로 작동하지만, 애니메이션을 사용하지 못한다는 것을 알고 있습니다. 다른 것들은'runAction'을 사용했습니다.하지만 저는 runAction으로 이것을 어떻게 수행 할 것인가에 대해 머리를 알지 못합니다. 현재 코드는 세미 부드러운 애니메이션을가집니다. 그것에. 하나의 마지막 질문 인 ScaleX가 양측이 아닌 스프라이트의 한면에서/setScaleX 크기를 조정할 수 있습니까? (현재 코드는 이미지를 양쪽에서 확장합니다) – ahoura

관련 문제