touchBegan отметка времени - PullRequest
       7

touchBegan отметка времени

0 голосов
/ 27 апреля 2011

В моей игре мне нужно рассчитать продолжительность касания.Я сделал это следующим образом:

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {  

self.endTime = [NSDate date];  //NSDate *endTime in .h
NSLog(@"%@",self.endTime); 

}  

-(void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event  
{  
    tStart = [[NSDate date] timeIntervalSinceDate:self.endTime];  
    NSLog(@"duration %f",tStart);  

Я использую этот интервал времени как фактор для расчета высоты прыжка, который делает игрок.Меньше tStart, низкий - это прыжок, и больше tStart, высокий - это прыжок.Я делаю это следующим образом:

if(tStart/1000<=9.430)  
        {  
            [player jump:5.0f];  
        }  
        else if(tStart>9.430 && tStart<=9.470)  
        {  
            [player jump:7.0f];  
        }  
        else if(tStart/1000>9.470)  
        {  
            [player jump:8.0f];  
        }  

Однако я хочу выполнить это действие на tochBegan, чтобы игрок мог прыгать, как только коснулся экрана.Для этого нужно значение tStart в touchBegan.Как мне это сделать?

Спасибо

1 Ответ

1 голос
/ 27 апреля 2011

Для данного касания экземпляр UITouch одинаков, поэтому в ccTouchBegan сохраните касания с самой старой отметкой времени, а затем дождитесь ccTouchEnded. Когда вы получаете UITouch, который вы ранее сохранили, это означает, что игрок поднял палец.

обновление

Вы можете

  • Перейти, как только пользователь коснется экрана.
  • Прыгайте и ускоряйте прыжок, пока касание продолжается до х миллисекунд (совет от грейпфрута).
  • Прыжок, когда пользователь отпускает прикосновение или истекло максимальное время x миллисекунд.
  • Прыгайте и ускоряйте прыжок до тех пор, пока касание не закончится.

Вариант 4 нецелесообразен, поскольку пользователь может продолжать нажимать так долго, как ему хочется. Итак, учитывая, что вы хотите сделать скачок переменной, вот код для варианта 3:

UITouch *jump = nil;

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event { 
    // no jump ongoing, start one
    if (jump==nil){
        jump = touch;
        // jump on a separate thread
        [NSThread performSelectorInBackground:(SEL)jump withObject:touch];
    }
}

-(void) jump:(UITouch*) touch {
    NSInterval time = [touch timestamp]; // I *think* this is the time since system uptime :P
    int jumpSpeed = 1;
    // increase the jump speed for every 100ms up to 'maxTimeYouAreAllowedToJump' ms
    while ( ([NSProcessInfo systemUptime]-time < maxTimeYouAreAllowedToJump) && (jump!=nil) ){
        jumpSpeed += 1;
        [NSThread sleepForTimeInterval:.1]; // sleep for 100ms
    }
    [self doTheJumpingWithSpeed:jumpSpeed]; // do the actual jump!
}

-(void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {
    // user released the touch that initiated the jump
    if ((touch!=nil) && (touch==jump)) {
        jump =nil;
    }
}
...