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 に答える