【问题标题】:CCMoveTo doesn't get the updated player postition.....(iphone,cocos2d)CCMoveTo 没有得到更新的播放器位置.....(iphone,cocos2d)
【发布时间】:2011-08-02 13:17:55
【问题描述】:

我正在添加这样的敌人:

-(void)addEnemy {
    if ([spawnedEnemies count] < 25) {
        CCSprite* sprite = [CCSprite spriteWithFile:@"white.png"];
        float randomX = arc4random() % 480;
        float randomY = arc4random() % 320;

        sprite.position = ccp(randomX,randomY);
        [spawnedEnemies addObject:sprite];
        [self addChild:sprite];  

        [sprite runAction:[CCMoveTo actionWithDuration:5 position:player.position]];
    } }

但是如果我的玩家移动精灵仍然会移动到最后一个玩家位置... 因为我在我的tick中试过这个:

-(void)tick:(ccTime)delta {

for (CCSprite *sp in spawnedEnemies) {
    [sp stopAllActions];
    [sp runAction:[CCMoveTo actionWithDuration:5

位置:玩家.位置]]; } }

但是只有当我停止移动时敌人才会移动(只是移动真的很慢,因为每次我移动它都会调用 [sp stopAllActions]

我现在该怎么办?

编辑:*编辑:*编辑:*编辑:*编辑:*编辑:*编辑:*编辑:*编辑: 现在我正在这样做,即使玩家正在移动,敌人也会向玩家移动 但是有一个问题:敌人(离玩家)越近他们移动的越慢...... 如何解决?

//function to apply a velocity to a position with delta
static CGPoint applyVelocity(CGPoint velocity, CGPoint position, float delta){
    return CGPointMake(position.x + velocity.x * delta, position.y + velocity.y * delta);
}


-(void)tick:(ccTime)delta {    
    for (CCSprite *sp in spawnedEnemies) {
        CGPoint m = ccpSub(player.position, sp.position);
        sp.position = applyVelocity(m, sp.position, 1.0/60.0f);
    }
}

【问题讨论】:

    标签: iphone cocos2d-iphone position move


    【解决方案1】:

    我有四个想法:

    1. 以较低的频率安排新的更新选择器并以该方法移动敌人:[self schedule:@selector(moveEnemies) interval:0.1];

    2. 仅在 player.position 发生变化时移动敌人,可能在您的ccTouchesMoved-方法中。

    3. 不使用CCActions,直接设置精灵的位置,你需要做一些向量计算。

    4. 使用像 Box2D 的物理引擎(包含在 Cocos2D SDK 中)。然后你可以简单地在每一步中对每个敌人施加一个力到玩家的方向。

    编辑: 为了以恒定的速度移动敌人,将速度向量 m 归一化:

    m = ccpMult(ccpNormalize(m), kSpeed);
    

    kSpeed 是一个用于调整速度的常量浮点值。

    希望对您有所帮助...

    【讨论】:

    • 我更新了我的问题..我正在尝试使用想法 3,它几乎可以工作..你这么好心帮助我吗?我尝试了想法 1,它有同样的问题,想法 2 也不起作用。对于想法 4:我不想使用 box2d,因为我的游戏非常简单,而 box2d 对它来说太过分了......
    • 谢谢它的工作......我只是好奇:box2d 怎么能做到这一点?请给我看看好吗?
    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多