使用3.0实现微信打飞机——8.改变玩家技能
2014-08-21 15:31
337 查看
上篇博客添加了道具,针对于不同的道具玩家飞机应该有不同的表现,如果是UFO就应该改变发射子弹的数量,如果是炸弹玩家应该死掉,而这些逻辑的实现,首先需要进行碰撞检测,玩家飞机和道具的碰撞检测,这个碰撞检测与敌机和子弹的碰撞检测在同一个函数中,以下是相关的代码。
m_ufo是新添加的一个成员变量,道具的出现是每10s出现一次,也就是说在当前的主场景中只可能有一种道具的存在,所以用成员变量保存起来,方便判断,如果道具被玩家捕捉到或者是移出了屏幕这个引用就应该没有了,所以设置为null,关于获取道具名字的函数是新添加上去的,接下来是添加子弹的函数了。
版权声明:本文由(
小塔 )原创,转载请保留文章出处!
本文链接:http://www.zaojiahua.com/change-player-skills.html
1 | /*玩家飞机和UFO的碰撞检测*/ |
2 |
3 | //判断是否添加了UFO,记得UFO要在init函数中初始化 |
4 | if (m_ufo != NULL) |
5 | { |
6 | auto rect = m_player->getBoundingBox(); |
7 | auto point = m_ufo->getPosition(); |
8 | //如何玩家和UFO碰撞到了 |
9 | if (rect.containsPoint(point)) |
10 | { |
11 | //根据碰撞到的不同道具,做不同的处理 |
12 | if (m_ufo->getName() == "ufo1.png" ) |
13 | { |
14 | //设置子弹的名称 |
15 | m_bulletName = "bullet2.png" ; |
16 | } |
17 | else if (m_ufo->getName() == "ufo2.png" ) |
18 | { |
19 | m_bulletName = "bullet1.png" ; |
20 | } |
21 | else |
22 | { |
23 | //碰到炸弹的处理和碰到敌机的处理是相同的,先放一下 |
24 |
25 | } |
26 | //发射三发子弹,持续时间是4s |
27 | this ->schedule(SEL_SCHEDULE(&MainGame::addBulletByUfo),0.1f,40,0); |
28 | //如果碰撞检测到了,则设置这个UFO为不可见,因为移除的工作会在UFO执行完动作以后进行 |
29 | m_ufo->setVisible( false ); |
30 | //最后将成员变量设置为null |
31 | m_ufo = NULL; |
32 | } |
33 | //如果UFO离开了屏幕就设置为null |
34 | if (m_ufo != NULL && point.y < -m_ufo->getContentSize().height/2) |
35 | { |
36 | m_ufo = NULL; |
37 | } |
38 | } |
1 | //当玩家飞机和UFO碰撞以后添加子弹 |
2 | void MainGame::addBulletByUfo( float tm ) |
3 | { |
4 | //创建双发子弹 |
5 | auto bullet1 = Bullet::create(); |
6 | bullet1->initBullet(m_bulletName); |
7 | auto bullet2 = Bullet::create(); |
8 | bullet2->initBullet(m_bulletName); |
9 |
10 | //设置位置 |
11 | auto point1 = Point(m_player->getPositionX()-23, |
12 | m_player->getPositionY()+m_player->getContentSize().height/2); |
13 | bullet1->setPosition(point1); |
14 | auto point2 = Point(m_player->getPositionX()+23, |
15 | m_player->getPositionY()+m_player->getContentSize().height/2); |
16 | bullet2->setPosition(point2); |
17 |
18 | //添加子弹 |
19 | this ->addChild(bullet1); |
20 | this ->addChild(bullet2); |
21 | //将子弹添加到管理器中 |
22 | auto & vector = Manager::getInstance()->getBulletVector(); |
23 | vector.pushBack(bullet1); |
24 | vector.pushBack(bullet2); |
25 | } |
版权声明:本文由(
小塔 )原创,转载请保留文章出处!
本文链接:http://www.zaojiahua.com/change-player-skills.html
相关文章推荐
- 使用3.0实现微信打飞机——3.添加玩家飞机
- 使用3.0实现微信打飞机——4.添加敌机
- 使用3.0实现微信打飞机——10.用户数据的操作
- 使用3.0实现微信打飞机——6.碰撞检测
- 使用3.0实现微信打飞机——7.贝塞尔曲线和添加UFO
- 使用3.0实现微信打飞机——12.游戏结束场景
- 使用3.0实现微信打飞机——2.滚动地图
- 使用3.0实现微信打飞机——9.通过截屏实现暂停功能
- 使用3.0实现微信打飞机——14.终结篇
- 使用3.0实现微信打飞机——11.分数排行榜的实现
- 使用3.0实现微信打飞机——5.添加子弹及管理器
- 使用3.0实现微信打飞机——1.游戏开始场景
- 使用3.0实现微信打飞机——13.添加声音
- 使用VB.NET实现改变显示器的分辨率实例
- 使用CColorListBox 实现文本改变颜色
- 关于VS2010中使用CColorListBox 实现文本改变颜色
- [转载]使用Express3.0实现<Node.js开发指南>中的微博系统
- Cocos2d-x学习(十三):用cocos2d-x实现MoonWarriors(使用触屏改变飞船位置)
- 需要为你的SaaS改变走向市场策略吗?本文介绍了ISV怎样使用Windows Azure实现它
- Android下使用最新FaceBook SDK 3.0(二)使用facebook实现登录注销