Перемещение «падающего» CCSprite по ускорению - PullRequest
0 голосов
/ 12 августа 2011

Я использую этот код для перемещения «падающего» спрайта в соответствии с ускорением UIDevice. Он работает хорошо, но очень медленно, что означает, что между позициями спрайта есть скачки.

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
    if(paused)
        return;
    directionPoint.x += acceleration.x * 100;
}
- (void)update:(ccTime)dt {
    if(paused)
        return;
    directionPoint.y = -500*dt;
    CGPoint playerDestinationPoint = player.position;
    playerDestinationPoint.x += directionPoint.x;
    playerDestinationPoint.y += directionPoint.y;
    if(playerDestinationPoint.x < player.contentSize.width/2) {
        playerDestinationPoint.x = player.contentSize.width/2;
    }
    else if(playerDestinationPoint.x > ([[CCDirector sharedDirector] winSize].width - play    er.contentSize.width/2)) {    
        playerDestinationPoint.x = [[CCDirector sharedDirector] winSize].width - player.contentSize.width/2;
    }
    [player setPosition:playerDestinationPoint];

    directionPoint = CGPointMake(0.0, 0.0);
}

Я пытался использовать CCMoveTo таким образом:

- (void)update:(ccTime)dt {
    if(paused)
    return;
    [player stopAllActions];
    directionPoint.y = -500*dt;
    CGPoint playerDestinationPoint = player.position;
    playerDestinationPoint.x += directionPoint.x;
    playerDestinationPoint.y += directionPoint.y;
    if(playerDestinationPoint.x < player.contentSize.width/2) {
        playerDestinationPoint.x = player.contentSize.width/2;
    }
    else if(playerDestinationPoint.x > ([[CCDirector sharedDirector] winSize].width - player.contentSize.width/2)) {
        playerDestinationPoint.x = [[CCDirector sharedDirector] winSize].width - player.contentSize.width/2;
    }
    id actionMoveTo = [CCMoveTo actionWithDuration:dt position:playerDestinationPoint];
    [player runAction:actionMoveTo];

    directionPoint = CGPointMake(0.0, 0.0);
}

но спрайт не будет двигаться вообще. Есть намеки?

MfG

Sideswipe

1 Ответ

0 голосов
/ 27 декабря 2012

В вашем первом методе обновления попробуйте:

    playerDestinationPoint.x += directionPoint.x*dt;

Поскольку интервал DT может меняться в зависимости от производительности.

...