打飞机03-子弹和敌机

子弹与敌机.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]];
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,267评论 4 61
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,107评论 19 139
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,156评论 5 13
  • 经济学原理需要反复思考反复用,最后才会逐渐成为你理解这个世界的思维方式。 边际就是新增的新增 平均值和总量不是我们...
    爷有蔓草阅读 882评论 0 0
  • 第八组学委陈辰 第二天闭环总结 今天成交我出乎我的意外,运用了老师的主动出击,促成交。人有时候真需要一些动力才会在...
    陈辰艾艾贴阅读 138评论 0 0