Cocos2d改变精灵目的地

时间:2011-11-02 00:35:32

标签: ios cocos2d-iphone ccsprite

好的,我们走了。我有一个cocos2d应用程序,并且有一些目标向玩家移动。当玩家移动时,我希望他们能够再次向玩家慢慢改变目的地,这样他们就不会只是进入空旷的空间。是否可以更改sprite mid-runAction的目的地?

修改

这是 - (void)changeTargetDest

中的代码
- (void)changeTargetDest {
    NSMutableArray* deleteArray = [[NSMutableArray alloc] init];
    for(CCSprite* s in _targets) {
        float offX = s.position.x - player.position.x;
        float offY = s.position.y - player.position.y;
        float adjustX;
        float adjustY;
        float offDistance = sqrt(powf(offX, 2.0f) + powf(offY, 2.0f));

        if(offDistance < 15) {
            [deleteArray addObject:s];

            deaths++;
            [deathLabel setString:[NSString stringWithFormat:@"Deaths: %ld", deaths]];
            if(deaths == 0)
            [kdLabel setString:[NSString stringWithFormat:@"K/D ratio: %ld.00", score]];
            else
                [kdLabel setString:[NSString stringWithFormat:@"K/D ratio: %.2f", ((float)score / (float)deaths)]];
        }

        else {
            adjustX = offX * .99;
            adjustY = offY * .99;

            CGPoint point = CGPointMake(player.position.x + adjustX, player.position.y + adjustY);

            [s setPosition:point];
        }//else

    }//for

    for (CCSprite *target in deleteArray) {

        [_targets removeObject:target];
        [self removeChild:target cleanup:YES];                                  
    }
}

除了一个问题外,这很有效。因为新位置是通过仅取前一偏移的.99来计算的,所以目标越接近玩家,其移动的速度就越慢。如何使其速度保持恒定?

1 个答案:

答案 0 :(得分:1)

您可以停止操作并在计划方法中每隔几帧运行一个新操作。 但更好的方法是根据玩家位置计算目标的位置,并使用setPosition在更新方法的每一帧中手动更改其位置。