0

我正在使用此代码根据 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);
}

但精灵根本不会移动。有什么提示吗?

制造商,

侧滑

4

1 回答 1

0

在您的第一个更新方法中尝试:

    playerDestinationPoint.x += directionPoint.x*dt;

因为 dt 间隔可以根据性能而改变。

于 2012-12-27T00:28:45.787 回答