子弹和敌机以及动画
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]];
}