(NO.00002)iOS游戏精灵战争雏形(九)
来源:互联网 发布:大恒视觉软件 编辑:程序博客网 时间:2024/05/22 17:14
打开MainScene.m,添加shoot方法:
//子弹速度现在和目标距离相关,越近速度越慢,反之越快.应该修改为恒定速度.-(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,这个方法用来使发出的子弹旋转,增加视觉效果.
0 0
- (NO.00002)iOS游戏精灵战争雏形(九)
- (NO.00002)iOS游戏精灵战争雏形(一)
- (NO.00002)iOS游戏精灵战争雏形(二)
- (NO.00002)iOS游戏精灵战争雏形(三)
- (NO.00002)iOS游戏精灵战争雏形(四)
- (NO.00002)iOS游戏精灵战争雏形(五)
- (NO.00002)iOS游戏精灵战争雏形(六)
- (NO.00002)iOS游戏精灵战争雏形(七)
- (NO.00002)iOS游戏精灵战争雏形(八)
- (NO.00002)iOS游戏精灵战争雏形(十)
- (NO.00002)iOS游戏精灵战争雏形(十一)
- (NO.00002)iOS游戏精灵战争雏形(十二)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(九)
- (NO.00005)iOS实现炸弹人游戏(十一):怪物之火精灵
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(九)
- (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
- (NO.00005)iOS实现炸弹人游戏(九):游戏主角(二)
- 喵星战争(九):游戏主菜单的实现
- Android触摸屏事件派发机制详解与源码分析三(Activity篇)
- poj 1159 Palindrome
- 导入数据时报错: MySQL server has gone away
- 将字符串中符合规则的子串取出
- 初识git
- (NO.00002)iOS游戏精灵战争雏形(九)
- 七天使的通讯
- oracle基础
- Linux文件系统分析之一(工具与方法)
- Ubuntu下Openfire的安装
- 原型模式
- 【啊哈!算法】最快最简单的排序——桶排序
- Linux文件系统分析之二(超级块,i节点位图和逻辑块位图)
- Coding的几个相当不错的搜索引擎