飞机大战开发05按角度发射的子弹和拖尾子弹的实现
2015-04-10 18:37
495 查看
多角度的子弹:
这个的实现可以仍然用MoveBy动作来完成,设定一个子弹偏移的角度,计算出到出屏幕,子弹在x轴和y轴上移动的距离,移动就OK了。
上代码:
追尾子弹特效:
类似流星,子弹飞出去有一条长长的尾巴。好像在暴龙战机上见过这种特效,很绚丽,模仿实现了个,传入终点,就OK。起始点是飞机的位置。没有精确的控制弧度。
上代码:
这个的实现可以仍然用MoveBy动作来完成,设定一个子弹偏移的角度,计算出到出屏幕,子弹在x轴和y轴上移动的距离,移动就OK了。
上代码:
void GameLayer::createBulletByAngle(float angle) { Size screenSize = Director::getInstance()->getWinSize() ; Vec2 crePos = m_pPlayerPlane->getPosition() ;//子弹的初始位置 float flyTime = 1.0f ; Sprite * pBullet = Sprite::create("bullet3.png") ; pBullet->setPosition(crePos) ; addChild(pBullet,ZORDER_BULLET_PLAYER) ; pBullet->setRotation(angle) ; float varX = Director::getInstance()->getWinSize().width - crePos.x ; if (angle < 0) { varX = crePos.x ; } float varY = varX * atan(angle) ; float moveDis = sqrt(varX * varX + varY * varY) ; flyTime = moveDis / Director::getInstance()->getWinSize().height ;//以屏幕高为标准 if (angle < 0) { varY = -varY ; varX = -varX ; } pBullet->runAction( Sequence::create( MoveBy::create(flyTime,Vec2(varX,varY)), CallFuncN::create(CC_CALLBACK_1(GameLayer::playerBulletMoveEndCallback,this)), RemoveSelf::create(true),nullptr) ) ; m_pPlayerBullet.pushBack(pBullet) ; }
追尾子弹特效:
类似流星,子弹飞出去有一条长长的尾巴。好像在暴龙战机上见过这种特效,很绚丽,模仿实现了个,传入终点,就OK。起始点是飞机的位置。没有精确的控制弧度。
上代码:
void GameLayer::createBulletByBezier(Vec2 endPos) { //两个控制点应该在起始点和重点连线的同一侧,这样会形成只有一个弧的路径 Size screenSize = Director::getInstance()->getWinSize() ; Vec2 crePos = m_pPlayerPlane->getPosition() ;//子弹的初始位置 Vec2 cp_1 = crePos ;//接近出发点的控制点 Vec2 cp_2 = endPos ;//接近结束点的控制点 float var_x = 100.0f ; float a = 0 ; float b = 0 ; if (crePos.x <= endPos.x)//1,4象限 { cp_1.x += var_x ; cp_2.x += var_x ; } else//2,3象限 { cp_1.x -= var_x ; cp_2.x -= var_x ; } a = -(crePos.x - endPos.x) / (crePos.y - endPos.y) ; b = crePos.y - crePos.x * a ; cp_1.y = a * cp_1.x + b ; b = endPos.y - endPos.x * a ; cp_2.y = a * cp_2.x + b ; ccBezierConfig bezier; bezier.controlPoint_1 = cp_1; bezier.controlPoint_2 = cp_2; bezier.endPosition = endPos; float flyTime = 0.2f ; auto bezierForward = BezierTo::create(flyTime, bezier); MotionStreak * pBullet = MotionStreak::create(0.5f, 1.0f, 10.0f, Color3B(255, 255, 0), "bullet1.png") ; addChild(pBullet,ZORDER_BULLET_PLAYER) ; pBullet->setPosition(crePos) ; pBullet->runAction( Sequence::create( bezierForward, DelayTime::create(0.5f), RemoveSelf::create(true),nullptr) ) ; }
相关文章推荐
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 06.游戏界面 主角飞机产生子弹
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 05.游戏界面 主角飞机的移动
- 飞机大战-子弹的实现
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 08.游戏界面 碰撞检测
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 03.游戏界面 背景层实现滚动
- 项目飞机大战01:主要实现背景的移动,飞机的动画和触控,子弹的生成和发射
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 01整体的游戏组成
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 07.游戏界面 敌机的产生与移动
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 10.游戏界面 特效
- 实现子弹, 可以指定发射位置, 发发射角度, 有方向, 可以反弹
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 09.游戏界面 道具
- 边做游戏边学android—5(飞机大战④子弹发射和碰撞检测)
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 04.游戏界面 主角飞机的添加
- cocos2d-x-3.2塔防游戏开发2:建塔、角度的旋转、发射箭
- Unity3D学习之飞机发射子弹。
- 飞机大战03之飞机发射子弹,添加敌人
- 飞机大战-MyPlane自己飞机的实现
- cocos2d-x笔记(十一)Lua开发飞机大战-5-让飞机动起来
- Android基于box2d开发弹弓类游戏[五]-------------发射子弹
- cocos2d-x笔记(十)Lua开发飞机大战-4-创建主角