(NO.00002)iOS游戏精灵战争雏形(九)
2015-11-01 15:12
369 查看
打开MainScene.m,添加shoot方法:
我们详细说说这个方法.首先该参数传入2个参数,分别对应发射点和目标点.计算可知子弹力矩为velocity.因为默认力矩太小,力太微弱,我们需要适当放大该力矩.具体应该放大多少应该根据实际App运行效果来定,我这里觉得50倍比较合适.
在实际子弹发射过程中,可能会出现由于力矩的某条边角度过小或过大导致子弹速度过快或过慢得现象.我们需要根据实际角度调整力矩的值.我承认这只是权宜之计,如果时间允许这段判断代码需要进一步修改.
然后是上膛子弹到bullet中,这里做了断言以防没有子弹,正常情况下这应该是不可能发生的.
注意loadBullet方法已经将返回的子弹设置为可见了.接下来我们设置子弹的初始位置,取得子弹的物理对象,然后应用指定的力矩.
而应用力矩方法上面还调用了另一个方法applyAngularImpulse,这个方法用来使发出的子弹旋转,增加视觉效果.
//子弹速度现在和目标距离相关,越近速度越慢,反之越快.应该修改为恒定速度. -(void)shoot:(CCNode*)player target:(CGPoint)point{ CGPoint velocity = ccpSub(point, player.position); velocity = ccpMult(velocity, 50); if (ABS(velocity.x) < 20 || ABS(velocity.y) < 20) { velocity = ccpMult(velocity, 5); } if (ABS(velocity.x) > 200 || ABS(velocity.y) > 200){ velocity = ccpMult(velocity, 0.5); } CCNode *bullet = [self loadBullet]; NSAssert(bullet, @"bullet must not nil"); bullet.position = player.position; CCPhysicsBody *physicsBody = bullet.physicsBody; [physicsBody applyAngularImpulse:10]; [physicsBody applyImpulse:velocity]; }
我们详细说说这个方法.首先该参数传入2个参数,分别对应发射点和目标点.计算可知子弹力矩为velocity.因为默认力矩太小,力太微弱,我们需要适当放大该力矩.具体应该放大多少应该根据实际App运行效果来定,我这里觉得50倍比较合适.
在实际子弹发射过程中,可能会出现由于力矩的某条边角度过小或过大导致子弹速度过快或过慢得现象.我们需要根据实际角度调整力矩的值.我承认这只是权宜之计,如果时间允许这段判断代码需要进一步修改.
然后是上膛子弹到bullet中,这里做了断言以防没有子弹,正常情况下这应该是不可能发生的.
注意loadBullet方法已经将返回的子弹设置为可见了.接下来我们设置子弹的初始位置,取得子弹的物理对象,然后应用指定的力矩.
而应用力矩方法上面还调用了另一个方法applyAngularImpulse,这个方法用来使发出的子弹旋转,增加视觉效果.
相关文章推荐
- iOS 灰度发布的具体操作
- IOS轨迹文本的实现
- (NO.00002)iOS游戏精灵战争雏形(八)
- (NO.00002)iOS游戏精灵战争雏形(八)
- (NO.00002)iOS游戏精灵战争雏形(八)
- iOS: 从ipa提取图片资源文件及从iOS设备提取ipa文件的方法
- ios学习之苹果官方文档的学习(按钮点击事件方面)
- (NO.00002)iOS游戏精灵战争雏形(七)
- (NO.00002)iOS游戏精灵战争雏形(七)
- (NO.00002)iOS游戏精灵战争雏形(七)
- iOS图片选择的优化与封装
- ios学习之苹果官方文档的学习(键盘方面)
- (NO.00002)iOS游戏精灵战争雏形(六)
- (NO.00002)iOS游戏精灵战争雏形(六)
- (NO.00002)iOS游戏精灵战争雏形(六)
- IOS开发之C基础-循环结构
- iOS自定义转场动画(4)——自定义模态跳转之dismiss与手势驱动
- IOS 通知机制
- ios图片拉伸技巧
- (NO.00002)iOS游戏精灵战争雏形(五)