哇!板球 源码分析三
来源:互联网 发布:端口23连接失败 解决 编辑:程序博客网 时间:2024/05/16 07:25
守门员出场
守门员出场,每个守门员是从屏幕的右侧中间的位置随机方向向左侧移动
FielderSprite* fielderSprite1 = FielderSprite::create("pic/fielder.png");//守门员精灵初始位置为右侧中间位置fielderSprite1->setPosition(ccp(GOALKEEPER_X, GOALKEEPER_Y));fielderSprite1->setAnchorPoint(ccp(0.5, 0.5));//默认锚点为0.5,0.5//将fielder精灵添加到布景中this->addChild(fielderSprite1, GAME_LEVEL_WYF);
动作序列中的6个动作,终点都在最左侧
CCActionInterval* at1=CCMoveBy::create(3.5,CCPointMake(-800,-170));CCActionInterval* at2=CCMoveBy::create(4,CCPointMake(-800,-100));CCActionInterval* at3=CCMoveBy::create(2.5,CCPointMake(-800,-30));CCActionInterval* at4=CCMoveBy::create(4.5,CCPointMake(-800,40));CCActionInterval* at5=CCMoveBy::create(5,CCPointMake(-800,110));CCActionInterval* at6=CCMoveBy::create(3,CCPointMake(-800,180));
随机移动的6条线路
int r = rand()%6;switch(r){case 0:fielderSprite1->runAction(at1);fielderSprite1->ccat=at1;fielderSprite1->mark=1;break;case 1:fielderSprite1->runAction(at2);fielderSprite1->ccat=at2;fielderSprite1->mark=2;break;case 2:fielderSprite1->runAction(at3);fielderSprite1->ccat=at3;fielderSprite1->mark=3;break;case 3:fielderSprite1->runAction(at4);fielderSprite1->ccat=at4;fielderSprite1->mark=4;break;case 4:fielderSprite1->runAction(at5);fielderSprite1->ccat=at5;fielderSprite1->mark=5;break;case 5:fielderSprite1->runAction(at6);fielderSprite1->ccat=at6;fielderSprite1->mark=6;break;}
将定时器在一次被调用的时间内创建的守门员都添加到pArr中,用于后面检测是否与球碰撞了
array->addObject(fielderSprite1);
道具出场
道具5秒随机出现一次
if(outPropFlag)//5'置一次ture{outPropFlag = false;outProp();//出道具}
进入outProp(), 创建道具从左上角往下落,若发射的球击中道具,会增额外的技能
Prop * propSprite1 = NULL;//道具对象//3种道具随机出int w = rand()%3;switch(w){case 0:propSprite1 = Prop::create("pic/red.png");propSprite1->mark=0;break;case 1:propSprite1 = Prop::create("pic/black.png");propSprite1->mark=1;break;case 2:propSprite1 = Prop::create("pic/blue.png");propSprite1->mark=2;break;}//设置道具精灵的初始位置propSprite1->setPosition(ccp(0,480 ));propSprite1->setAnchorPoint(ccp(0.5, 0.5));this->addChild(propSprite1, GAME_LEVEL_WYF);
道具的3种运动线路, 都是贝塞尔曲线动作
ccBezierConfig bezier_7;//贝塞尔曲线bezier_7.controlPoint_1 = ccp(100, 460);bezier_7.controlPoint_2 = ccp(150, 400);bezier_7.endPosition = ccp(200,30);CCActionInterval* cat_7 = CCBezierTo::create(2.5, bezier_7);ccBezierConfig bezier_8;//贝塞尔曲线bezier_8.controlPoint_1 = ccp(50, 480);bezier_8.controlPoint_2 = ccp(200, 400);bezier_8.endPosition = ccp(250,30);CCActionInterval* cat_8 = CCBezierTo::create(2, bezier_8);ccBezierConfig bezier_9;//贝塞尔曲线bezier_9.controlPoint_1 = ccp(100, 480);bezier_9.controlPoint_2 = ccp(250, 400);bezier_9.endPosition = ccp(300,30);CCActionInterval* cat_9 = CCBezierTo::create(3, bezier_9);CCSequence* cc_7 = CCSequence::create(cat_7,CCCallFuncND::create(this, callfuncND_selector(BanQiuLayer::removeProp), NULL),NULL);CCSequence* cc_8 = CCSequence::create(cat_8,CCCallFuncND::create(this, callfuncND_selector(BanQiuLayer::removeProp), NULL),NULL);CCSequence* cc_9 = CCSequence::create(cat_9,CCCallFuncND::create(this, callfuncND_selector(BanQiuLayer::removeProp), NULL),NULL);
每次随机走1条路线
int r = rand()%3;switch(r){case 0:propSprite1->runAction(cc_7);break;case 1:propSprite1->runAction(cc_8);break;case 2:propSprite1->runAction(cc_9);break;}
将定时器在一次被调用的时间内创建的道具都添加到pArr中,用于后面检测是否与球碰撞了
pArr->addObject(propSprite1);
发球:
在屏幕上点哪球就往哪方向发
点屏屏幕时获取其位置
void BanQiuLayer::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent){long ct = getCurrentTime();//发球的时间间隔大于0.3秒if((ct-currTime)>SPACE_TIME){outBallFlag = true;//发球标志位currTime = ct;//把这次发球时间给currTime}//获取第一个触点位置,保存CCSetIterator it = pTouches->begin();CCTouch* touch = (CCTouch*)(*it);location = touch->getLocation();}
创建小球
BallTest* ballSprite = BallTest::create("pic/ball.png");ballSprite->setXY(location.x,location.y);//设置小球的方向//设置小球的起点位置ballSprite->setPosition(ccp(OUTBALL_X,OUTBALL_Y));//设置hitFlag标志位为trueballSprite->setHitFlag(true);ballSprite->setAnchorPoint(ccp(0.5, 0.5));//默认锚点为0.5,0.5
将定时器在一次被调用的时间内创建的小球都添加到arr中,用于后面检测是否与球碰撞了
arr->addObject(ballSprite);//将精灵添加到布景中this->addChild(ballSprite, BACKGROUND_LEVEL_WYF);出球动作
float vx = ballSprite->x;float vy = ballSprite->y;//出球动作CCActionInterval* at=CCMoveBy::create(OUTBALL_T,CCPointMake(BALL_V*vx,BALL_V*vy));seq = CCSequence::create(at,CCCallFuncND::create(this, callfuncND_selector(BanQiuLayer::removeBall), NULL),NULL);if(ballCount%10==0)//每5个小球里出来一个带火的小球{ballSprite->setMark(1);//给1代表带火的球, 粒子效果}ballCount++;//发出球的总数加1ballSprite->runAction(at);//执行出球动作发球的声音
if(MUSIC){//播放出球音乐CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sound/fire.mp3");}
0 0
- 哇!板球 源码分析三
- 哇!板球 源码分析一
- 哇!板球 源码分析二
- 哇!板球 源码分析四
- Mangos源码分析(三)
- appfuse源码分析三
- Notepad++源码分析(三)
- gSOAP 源码分析(三)
- mongodb源码分析(三)
- gSOAP 源码分析(三)
- TreeMap源码分析三
- ffmpeg源码分析三
- Jeecms源码分析(三)
- epoll源码分析(三)
- rnnlm源码分析(三)
- epoll源码分析(三)
- 三、HashMap源码分析
- gSOAP 源码分析(三)
- UDP connect
- 伤情毕业歌
- Socket的地址查询函数
- bzoj1066[SCOI2007]蜥蜴
- db2 锁
- 哇!板球 源码分析三
- state-of-the-art implementations related to visual recognition and search
- 现场故障 案例:控制文件损坏
- Direct2D将当前呈现器目标内容保存为位图
- UDP中的Connect
- DNS 3 components
- Multi-threaded Client/Server Socket Class
- Full Multi-thread Client/Server Socket Class with ThreadPool
- (Java)JComboBox的itemStateChanged事件被选中点击执行两次的解决方法