我该如何实施射击的敌人?

时间:2014-10-20 20:10:35

标签: objective-c methods sprite-kit nstimer game-physics

我用SpriteKit做了一个游戏。我通过编写GameScene(SKScene)和一个单独的敌人类来构建我的游戏。 我希望产卵的敌人射击一颗粒,例如每2秒(只是沿y轴移动一个SKEmitterNode)我试着用计时器来做,但它并没有真正起作用。

我使用以下代码从游戏场景中调用我的敌人类:

GameScene.m

 -(void)enemiesLevel1{
    EnemyClass* wave1 = [[EnemyClass alloc] init];
    [wave1 enemiesLevel1:self];
 }

我基本上是从 EnemyClass.m

调用此方法
-(void)enemiesLevel1:(SKScene *)scene
{
    enemy = [SKSpriteNode spriteNodeWithImageNamed:Enemy];
    //Enemy Path
    (...)

    SKAction *followPath2 = [SKAction followPath:pathRef2
                                        asOffset:NO
                                    orientToPath:YES
                                        duration: pathSpeed];




    SKAction *forever = [SKAction repeatActionForever:followPath2];



    //PhysicsBody Eigenshaften
    enemy.physicsBody =[SKPhysicsBody bodyWithCircleOfRadius:enemy.size.width];
    enemy.physicsBody.dynamic = YES;
    enemy.physicsBody.categoryBitMask = enemyCategory;

    [enemy runAction:forever];
    [scene addChild:enemy];

    NSTimer *timer;
    timer = [NSTimer scheduledTimerWithTimeInterval:0.5
                                         target:self
                                       selector:@selector(weaponParticle)
                                       userInfo:nil
                                        repeats:YES];
    }




-(void)weaponParticle{


    screenHeight = self.frame.size.height;
    screenWidth = self.frame.size.width;

    //Schuss-Particles

    enemyParticlePath = [[NSBundle mainBundle] pathForResource:@"ShootFire" ofType:@"sks"];
    enemyParticle = [NSKeyedUnarchiver unarchiveObjectWithFile:enemyParticlePath];

    enemyParticle.physicsBody =[SKPhysicsBody bodyWithCircleOfRadius:0.2];
    enemyParticle.physicsBody.categoryBitMask = shootCategory;
    enemyParticle.physicsBody.contactTestBitMask = playerCategory;

    //Schuss-Action
    moveDown = [SKAction moveByX:0.0 y:-screenHeight duration:1.0];
    remove = [SKAction removeFromParent];
    weaponShot = [SKAction sequence:@[moveDown, remove]];

    enemyParticle.position = CGPointMake(enemy.position.x, enemy.position.y+10);



    [self addChild:enemyParticle];
    [enemyParticle runAction: weaponShot];

}

敌人正按照我想要的方式逐渐产生,但他们无法射击。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

而不是安排NSTimer尝试这样的事情:

SKAction *shoot = [SKAction runBlock:^{
      // add code that shoots here
}];

SKAction *wait = [SKAction waitForDuration:0.5];
[enemy runAction:[SKAction repeatActionForever:[SKAction sequence:@[shoot, wait]]]];