1

我想知道如何在 aCCAction完成后调用一个方法(我还想在它第一次调用后每 2.5 秒调用一次)。我有一个随机位置的精灵,我希望它在移动到随机位置后运行这个方法(射击子弹)。到目前为止,该方法仍在移动时被调用。任何人都可以帮忙吗?

这是敌人的创建方法:

(void)enemy1{
    gjk= arc4random()%6;
    enemy1 = [CCSprite spriteWithFile:@"enemy1.png"];

    int d = arc4random()%480+480;
    int o = arc4random()%320+320;
    x = arc4random()%480;
    if( x <= 480 && x>= 460){
        x=x-100;
    }
    if(x <= 100){
        x = x+50;
    }

    y = arc4random()%320;
    if(y <=320 && y >= 290){
        y = y-100;
    }
    if(y < 100){
        y = y + 100;
    }
    enemy1.position = ccp(o,d);
    [enemy1 runAction:[CCMoveTo actionWithDuration:3 position: ccp(x,y)]];
    CCRotateBy *rotation = [CCRotateBy actionWithDuration:20 angle:1080];
    CCRepeatForever * repeatforever = [CCRepeatForever actionWithAction:rotation];
    [enemy1 runAction:repeatforever];
    [self addChild:enemy1];
    [enemy addObject :enemy1];
}

以及发射弹丸的方法:

(void)projectileShooting:(ccTime)dt {
    projcount++;
    if(enemy1.position.y < 320){
    v = ccp(player.position.x,player.position.y); 
    for(CCSprite *enemies in enemy){ 
        CCSprite * projectilebullet = [CCSprite spriteWithFile:@"Projectile.png"];
        [proj addObject:projectilebullet];
        [self addChild:projectilebullet];
        CGPoint MyVector = ccpSub(enemies.position,player.position );
        MyVector = ccpNormalize(MyVector);
        MyVector = ccpMult(MyVector, enemies.contentSize.width/2);
        MyVector = ccpMult(MyVector,-1);
        projectilebullet.position = ccpAdd(enemies.position, MyVector);
    }
}

拍摄方法是代码在init方法中调用的,所以每2.5秒调用一次。

 [self schedule:@selector(projectileShooting:) interval:2.5];

我知道我试图通过使拍摄发生在y位置 < 320 时拍摄,但是当它通过 320 的位置时它仍在移动。

4

2 回答 2

4

您可以进行一系列操作,并在序列结束时提供一个回调函数,该函数将在最后执行。像这样的东西

[CCSequence actions:
        [CCMoveTo actionWithDuration:3 position: ccp(x,y)],
        [CCCallFunc actionWithTarget:self selector:@selector(methodToRunAfterAction)],
        nil]];
于 2012-11-02T07:26:44.297 回答
2

添加到 Tayyab 的答案中,您可以简单地在移动操作结束时触发的startShooting方法(或任何您想调用的方法)中开始实际安排弹丸射击:

[CCSequence actions:
    [CCMoveTo actionWithDuration:3 position: ccp(x,y)],
    [CCCallFunc actionWithTarget:self selector:@selector(startShooting)],
    nil]];

其中startShooting定义如下:

- (void) startShooting
{
    // start scheduling your projectile to fire every 2.5 seconds
    [self schedule:@selector(projectileShooting:) interval:2.5];
}
于 2012-11-04T16:12:24.267 回答