守門員出場
守門員出場,每個守門員是從屏幕的右側中間的位置隨機方向向左側移動
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標誌位爲true
ballSprite->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++;//發出球的總數加1
ballSprite->runAction(at);//執行出球動作
發球的聲音
if(MUSIC)
{
//播放出球音樂
CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect
(
"sound/fire.mp3"
);
}