1

a が終了した後にメソッドを呼び出す方法CCActionを考えていました(最初に呼び出された後、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 に答える