我想知道如何在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的位置时仍然在移动。
答案 0 :(得分:4)
您可以进行一系列操作,在序列结束时,您可以给出一个将在最后执行的回调函数。像这样的东西
[CCSequence actions:
[CCMoveTo actionWithDuration:3 position: ccp(x,y)],
[CCCallFunc actionWithTarget:self selector:@selector(methodToRunAfterAction)],
nil]];
答案 1 :(得分: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];
}