美文网首页
打飞机03-子弹和敌机

打飞机03-子弹和敌机

作者: H小凡 | 来源:发表于2017-06-10 15:43 被阅读47次
    子弹与敌机.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]];
        
    }
    

    相关文章

      网友评论

          本文标题:打飞机03-子弹和敌机

          本文链接:https://www.haomeiwen.com/subject/zrzqqxtx.html