打飞机03-子弹和敌机

2017-06-10  本文已影响47人  H小凡
子弹与敌机.gif

子弹和敌机以及动画

1.创建子弹,位置与飞机位置关联
2.创建敌机,从屏幕上方出现
3.我觉得最好还是使用计时器吧,这个确实是方便了很多,而且很容易就能控制频率,缺点就是不能通过skview的pause属性来暂停计时器,不过这个暂时用不上

-(void)didMoveToView:(SKView *)view {
    
    self.size = self.view.frame.size;
    
    [self backgroundNode];
    [self planeNode];
    
    //创建一个手势与panAction关联
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
    
    //添加手势到view
    [self.view addGestureRecognizer:pan];
    
    //每0.5秒执行一次bullet方法 target添self userinfo为nil 重复为YES
    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(bullet) userInfo:nil repeats:YES];
    
    //与上同理
    [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(enemy) userInfo:nil repeats:YES];
}

一、子弹以及动作

-(void)bullet {
    SKSpriteNode *bullet = [SKSpriteNode spriteNodeWithImageNamed:@"bullet2"];
    bullet.name = @"bullet";
    //同理子弹也是在bg的上层,zPosition = 1
    bullet.zPosition = 1;
    
    //子弹的位置始终和飞机的位置相关联的,所以要获取到飞机的位置
    SKSpriteNode *plane = (SKSpriteNode *)[self childNodeWithName:@"plane"];
    
    //为了方便计算位置设置anchorPoint为底部中间
    bullet.anchorPoint = CGPointMake(0.5, 0);
    
    bullet.position = CGPointMake(plane.position.x, plane.position.y + plane.size.height/2);
    
    [self addChild:bullet];
    
    //子弹的飞行动作,这里要是用moveToY的话 当飞机移动到顶端时终点不变,子弹飞行路程变短,飞行时间不变,速度就会明显变慢,所以使用moveBy,x轴方向不做位移
    SKAction *act = [SKAction moveByX:0 y:self.size.height duration:2];
    
    [bullet runAction:act];
    
}

二、敌机以及动作

-(void)enemy {
    
    SKSpriteNode *enemy = [SKSpriteNode spriteNodeWithImageNamed:@"enemy0"];
    enemy.name = @"enemy";
    enemy.zPosition = 1;
    
    //enemy出现的位置的x轴是不固定的,最好不要把初始位置设置在屏幕内 x轴最好不要超出屏幕
    //最小值enemy.size.width/2 随机数0到self.size.width - enemy.size.width 整个x的范围是enemy.size.width/2到self.size.width - enemy.size.width/2
    CGFloat x = enemy.size.width/2 + arc4random()%(int)(self.size.width - enemy.size.width);
    enemy.position = CGPointMake(x, self.size.height + enemy.size.height);
    
    [self addChild:enemy];
    
    [enemy runAction:[SKAction moveToY:-enemy.size.height duration:4]];
    
}
上一篇下一篇

猜你喜欢

热点阅读