细节技巧

1, xxx *a = [xxx new]等于xxx *a = [[xxx alloc]init],但是如果构造需要带参数构造的话,就没法使用new了。

2, instancetype 只能做返回值类型,个人感觉某些情况下比id更好用。

3, 关于飞机子弹发射的原理:这里采用的是Sprite-Kit引擎,不过方法和cocos2d-x十分相似

  •    先定义以下全局变量:
        XBPlayerShip * _playerShip;     // 创建飞船实体
        XBBullet * _bullet;     //创建子弹实体
        float _bulletInterval;   //  子弹发射时间间隔,这个主要用来调整发射子弹速度,很好的办法
        CFTimeInterval _lastUpdateTime;   //   上一帧更新的时间
        NSTimeInterval _dt;   //    当前帧与上一帧的时间间隔



  • 在SpriteKit里,更新方法是-(void)update:(CFTimeInterval)currentTime, 在COCOS2D或者COCOS2D-X里是schedule的那个方法,用法大同小异,以下实现都在此方法中
     ,此方法大概是1/60秒回调一次。
    if (_lastUpdateTime) {
            _dt = currentTime - _lastUpdateTime;    // 这个强烈建议养成习惯,这个时间间隔变量能用在很多地方
        }else{
            _dt = 0;
        }

    首先先计算出每帧的具体时间间隔。

  •     _lastUpdateTime = currentTime;    // 把当前时间赋值给上一次更新时间,以备下次帧回调时使用
        _bulletInterval = _bulletInterval + _dt;  // 子弹发射时间间隔,每桢的时候会自动累加
    
    
    
  •     if (_bulletInterval > 0.5) {    // 这个if很重要,意思是如果子弹发射的累计时间间隔到0.5秒后,开始发射下一次子弹,
                                        // 这样可以通过0.5这个参数来调整发射子弹的时间间隔。 比如设置成0.5秒就比较慢,0.15就回很连贯
            _bulletInterval = 0;        // 当子弹发射后,将其设置为0,重新开始计算子弹发射时间间隔,当再次到0.5秒时,发射下一发子弹。
        
            _bullet = [[XBBullet alloc] initWithPosition:_playerShip.position];   //之后没什么好说了,创建子弹,初始化位置
            [self addChild:_bullet];   // 添加子弹到场景中
            
               // 创建动画序列,向上发射子弹,出屏幕后移除,cocos2d-x方法类似
               // 这还有点小瑕疵,子弹发射用  moveBy会更好,这样能保证发射速度是一致的,moveTo的话会随着子弹发射瞬间的位置变化而产生变化,比较失真
            SKAction * moveUpAction = [SKAction moveTo:CGPointMake(_bullet.position.x, self.size.height + _bullet.frame.size.height / 2) duration:2.0f];
            SKAction * removeAction = [SKAction removeFromParent];
            SKAction * seqAction = [SKAction sequence:@[moveUpAction, removeAction]];    
            [_bullet runAction:seqAction];
        }

4,  在Sprite Kit中,当粒子开始逐渐产生效果,但是需要一定时间来完成效果,可以用以下方法来让粒子先进行一段时间。

比如:  我们想做雪花从天而降,但是当游戏开始时,雪花才开始一片一片从天而降,所以一开始的时候屏幕大部分区域都是没有雪花的,要等到雪花逐渐落地后,才有了满屏幕雪花飘落的感觉。但是我们可以用下边这个方法,让雪花在游戏开始时候就已经降落了一段时间,时间长度是lifetime,也就是一个雪花从天而降到落地的时间,这样当我们打开游戏的时候,已经有满屏幕雪花在飘落了。

    [emitterNode advanceSimulationTime:lifetime];
       

5,  emitterNode.particleSpeedRange=16.0;  可以设置粒子效果的速度范围,为<speed - 8, spped + 8>之间

6,   在RETINA屏幕,1 point = 2 pixels   , 以前的是  1 point = 1 pixel

       spaceship.png " Non-Retina

       • spaceship@2x.png " Retina

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值