void Bullet::flyTo(CCPoint targetInWorldSpace) { //子弹开始起飞点 CCPoint startInNodeSpace = CCPointZero; //把节点坐标转换到屏幕坐标中 CCPoint startInWorldSpace = this->getParent()->convertToWorldSpace(startInNodeSpace); CCPoint targetInNodeSpace = this->getParent()->convertToNodeSpace(targetInWorldSpace); //coordinate n. 坐标; radian,n. [数] 弧度;rotation ,n. 旋转. float angle = ccpAngleSigned(ccpSub(targetInWorldSpace,startInWorldSpace),CCPointMake(0,1)); this->setRotation(CC_RADIANS_TO_DEGREES(angle)); //设置旋转角度 this->setPosition(startInNodeSpace);//确定子弹初始位置 this->setVisible(true);//让子弹可见 float speed = ccpDistance(startInNodeSpace,targetInNodeSpace)/300.0f; CCMoveTo* moveTo = CCMoveTo::create(speed,targetInNodeSpace); //以speed速度沿着任务路径飞行 //callfunc_selector创建一个回调函数【**回调函数只需要有一个函数名即可,不需要括号】 CCCallFunc* callFunc = CCCallFunc::create(this,callfunc_selector(Bullet::end)); CCFiniteTimeAction* seq = CCSequence::create(moveTo, callFunc, NULL); //子弹飞行持续一个有限的时间 seq->setTag(k_Bullet_Action); //设置子弹状态 this->runAction(seq);// 子弹飞起来 }
//------------------------------------------------------------------ // // SchedulerTest // //------------------------------------------------------------------ void SchedulerTest::onEnter() { EaseSpriteDemo::onEnter(); // rotate and jump CCActionInterval* jump1 = CCJumpBy::actionWithDuration(4, CCPointMake(-400,0), 100, 4); CCActionInterval* jump2 = jump1->reverse(); CCActionInterval* rot1 = CCRotateBy::actionWithDuration(4, 360*2); CCActionInterval* rot2 = rot1->reverse(); CCFiniteTimeAction* seq3_1 = CCSequence::actions(jump2, jump1, NULL); CCFiniteTimeAction* seq3_2 = CCSequence::actions( rot1, rot2, NULL); CCFiniteTimeAction* spawn = CCSpawn::actions(seq3_1, seq3_2, NULL); CCFiniteTimeAction* action = CCRepeatForever::actionWithAction((CCActionInterval*)spawn); CCRepeatForever* action2 = (CCRepeatForever*)(action->copy()->autorelease()); CCRepeatForever* action3 = (CCRepeatForever*)(action->copy()->autorelease()); m_grossini->runAction( CCSpeed::actionWithAction((CCActionInterval*)action, 0.5f) ); m_tamara->runAction( CCSpeed::actionWithAction((CCActionInterval*)action2, 1.5f) ); m_kathia->runAction( CCSpeed::actionWithAction((CCActionInterval*)action3, 1.0f) ); CCParticleSystem* emitter = CCParticleFireworks::node(); emitter->setTexture(CCTextureCache::sharedTextureCache()->addImage("Images/fire.png")); addChild(emitter); //sliderCtl = [self sliderCtl]; //[[[[Director sharedDirector] openGLView] window] addSubview: sliderCtl]; }
/* * Added by LEETAEHO 11.07.27 * loadPage를 VVPageFactory 없이 가능하도록 추가한 함수 */ bool VVBookScene::loadPage(VVPageBase* page, VVBookSceneTransitionType type) { if (isActionOngoing) { return false; } else { if (!curPage) { curPage = page; this->pageWillAppear(curPage); addChild(curPage, kTag_PageLayer, kTag_PageLayer); curPage->setBookDelegate(this); // 현재페이지 클래스에서 bookScene에 접근가능하도록 curPage->onPageStart(); } else { isActionOngoing = true; nextPage = page; this->pageWillAppear(nextPage); addChild(nextPage, kTag_PageBelow); if (type == VVBookSceneTransPushToLeft) { CCScaleTo *zoomOut = CCScaleTo::actionWithDuration(0.35, 0.2); CCScaleTo *zoomIn = CCScaleTo::actionWithDuration(0.35,1); CCFiniteTimeAction *action = transActionArray->getObjectAtIndex(type); nextPage->setScale(0.5); nextPage->setPosition(ccp(winSize.width,0)); nextPage->runAction( CCSpawn::actions(zoomIn,action->copy(),NULL) ); curPage->runAction(CCSequence::actions(CCSpawn::actions(zoomOut,action,NULL),CCCallFunc::actionWithTarget(this, callfunc_selector(VVBookScene::pageAniDone)),NULL)); } else if (type == VVBookSceneTransPushToRight ) { CCScaleTo *zoomOut = CCScaleTo::actionWithDuration(0.35, 0.2); CCScaleTo *zoomIn = CCScaleTo::actionWithDuration(0.35,1); CCFiniteTimeAction *action = transActionArray->getObjectAtIndex(type); nextPage->setScale(0.5); nextPage->setPosition(ccp(-winSize.width,0)); nextPage->runAction( CCSpawn::actions(zoomIn,action->copy(),NULL) ); curPage->setAnchorPoint(ccp(1,0)); curPage->runAction( CCSequence::actions(CCSpawn::actions(zoomOut,action,NULL),CCCallFunc::actionWithTarget(this, callfunc_selector(VVBookScene::pageAniDone)),NULL)); } else if (type == VVBookSceneTransFadeInOut) { nextPage->runAction( CCEaseExponentialOut::actionWithAction( CCActionTween::actionWithDuration(0.5,"opacity",0,255) ) ); curPage->runAction( CCSequence::actions(CCEaseExponentialOut::actionWithAction( CCActionTween::actionWithDuration(0.5,"opacity",255,0) ),CCCallFunc::actionWithTarget(this, callfunc_selector(VVBookScene::pageAniDone)),NULL)); } else { curPage->runAction(CCSequence::actions(transActionArray->getObjectAtIndex(type),CCCallFunc::actionWithTarget(this, callfunc_selector(VVBookScene::pageAniDone)),NULL)); } } } return true; }
void AvatarLayer::packAvatar() { m_isShowAll = false; CCFiniteTimeAction* callback = CCCallFunc::create(this, callfunc_selector(AvatarLayer::showSelectAvatar)); CCFiniteTimeAction* scale = CCScaleTo::create(0.2, 1); CCFiniteTimeAction* move = CCMoveTo::create(0.2, m_avatarCenter); m_avatarList[0]->runAction(CCSequence::create(CCSpawn::create(scale, move, NULL), callback, NULL)); for (int i = 1; i < MAX_AVATAR_COUNT; i++) { m_avatarList[i]->runAction(CCSpawn::create((CCFiniteTimeAction*)scale->copy(), move->copy(), NULL)); } }
void Fish::moveTo(CCPoint destination) { CCPoint start = this->getParent()->convertToWorldSpace(this->getPosition()); float speed = ccpDistance(destination, start) / 200; CCMoveTo* moveTo = CCMoveTo::create(speed ,destination); CCCallFunc* callfunc = CCCallFunc::create(this, callfunc_selector(Fish::moveEnd)); CCFiniteTimeAction* seq = CCSequence::create(moveTo, callfunc, NULL); seq->setTag(k_Action_MoveTo); this->runAction(seq); }
void BaseBug::moveToPoint(cocos2d::CCPoint point){ CCSize size = CCDirector::sharedDirector()->getWinSize(); //CCNode* parent = this;//(CCSprite*)this->getParent(); float _xSpace = abs(this->getPositionX()-size.width/2); float _ySpace = abs(this->getPositionY()-size.height/2); float space = sqrt(_xSpace*_xSpace+_ySpace*_ySpace); CCActionInterval* action = CCMoveTo::create(space/m_speed, CCPointMake(size.width/2, size.height/2)); //action->setTag(1); CCFiniteTimeAction* finiteAction = CCSequence::create(action, CCCallFunc::create(this, callfunc_selector(BaseBug::onMoveEnd)), NULL); this->runAction(finiteAction); finiteAction->setTag(m_actionTag); }
CCFiniteTimeAction* Animation::moveFromRightToCenter( float time ) { ccBezierConfig bezier; bezier.controlPoint_1 = ccp( CONTROL_POINT_X4, CONTROL_POINT_Y2 ); bezier.controlPoint_2 = ccp( CONTROL_POINT_X3, CONTROL_POINT_Y2 ); bezier.endPosition = BOX_LOC_CENTER; CCFiniteTimeAction* action = CCBezierTo::create( time, bezier ); action->setTag( TAG_ACTION ); return action; }
//------------------------------------------------------------------ // // ActionReverseSequence // //------------------------------------------------------------------ void ActionReverseSequence::onEnter() { ActionsDemo::onEnter(); alignSpritesLeft(1); CCActionInterval* move1 = CCMoveBy::actionWithDuration(1, CGPointMake(250,0)); CCActionInterval* move2 = CCMoveBy::actionWithDuration(1, CGPointMake(0,50)); CCFiniteTimeAction* seq = CCSequence::actions( move1, move2, move1->reverse(), NULL); CCFiniteTimeAction* action = CCSequence::actions( seq, seq->reverse(), NULL); m_grossini->runAction(action); }
/** * 根据动画创建自身动作 */ CCFiniteTimeAction * CartoonInfo::createAction(CCNode * self,CCNode *parent,const cocos2d::CCPoint &point,CCNode *target) { // 判定是移动还是静止 CCFiniteTimeAction *action = NULL; if (frameType == FOLLOW_FRAMES) { CartoonFollowAction * followAction = CartoonFollowAction::create(*this,target); action = followAction; followAction->isTempTarget = true; cartoonType = OTHER; } else if (!point.equals(CCPointZero) && frameType != TIME_FRAMES) { // 移动动画 CartoonMoveAction * moveAction = CartoonMoveAction::create(*this,point); action = moveAction; if (cartoonType == OTHER) { moveAction->isTempTarget = true; } } else { // 静止动画 CartoonAction* cartoonAction = CartoonAction::create(*this); action = cartoonAction; if (cartoonType == OTHER) { cartoonAction->isTempTarget = true; } } if (!action) return NULL; switch(cartoonType) { case OTHER: { CCSprite * temp = CCSprite::create(); if (temp) { parent->addChild(temp); //temp->setAnchorPoint(ccp(0,0)); temp->setPosition(self->getPosition()); action->setTarget(temp); } }break; } return action; }
//------------------------------------------------------------------ // // ActionReverseSequence2 // //------------------------------------------------------------------ void ActionReverseSequence2::onEnter() { ActionsDemo::onEnter(); alignSpritesLeft(2); // Test: // Sequence should work both with IntervalAction and InstantActions CCActionInterval* move1 = CCMoveBy::actionWithDuration(1, CGPointMake(250,0)); CCActionInterval* move2 = CCMoveBy::actionWithDuration(1, CGPointMake(0,50)); CCToggleVisibility* tog1 = new CCToggleVisibility(); CCToggleVisibility* tog2 = new CCToggleVisibility(); tog1->autorelease(); tog2->autorelease(); CCFiniteTimeAction* seq = CCSequence::actions( move1, tog1, move2, tog2, move1->reverse(), NULL); CCActionInterval* action = CCRepeat::actionWithAction((CCActionInterval*)(CCSequence::actions( seq, seq->reverse(), NULL)), 3); // Test: // Also test that the reverse of Hide is Show, and vice-versa m_kathia->runAction(action); CCActionInterval* move_tamara = CCMoveBy::actionWithDuration(1, CGPointMake(100,0)); CCActionInterval* move_tamara2 = CCMoveBy::actionWithDuration(1, CGPointMake(50,0)); CCActionInstant* hide = new CCHide(); hide->autorelease(); CCFiniteTimeAction* seq_tamara = CCSequence::actions( move_tamara, hide, move_tamara2, NULL); CCFiniteTimeAction* seq_back = seq_tamara->reverse(); m_tamara->runAction( CCSequence::actions( seq_tamara, seq_back, NULL)); }
//------------------------------------------------------------------ // // ActionRotateJerk // //------------------------------------------------------------------ void ActionRotateJerk::onEnter() { ActionsDemo::onEnter(); centerSprites(2); CCFiniteTimeAction* seq = CCSequence::actions( CCRotateTo::actionWithDuration(0.5f, -20), CCRotateTo::actionWithDuration(0.5f, 20), NULL); CCActionInterval* rep1 = CCRepeat::actionWithAction(seq, 10); CCAction* rep2 = CCRepeatForever::actionWithAction( (CCActionInterval*)(seq->copy()->autorelease()) ); m_tamara->runAction(rep1); m_kathia->runAction(rep2); }
//-------------------------------------------------- // // void CPet::AttackBeginCallBack( CCNode *pNode, void *d ) { //CBaseDataPet *pBaseDataPet = g_pClientLoader->GetBaseDataPetFromId(getID()); //¬∫¬∫∆í‚Ä? //CBaseDataSkill *pBaseDataSkill = g_pClientLoader->GetBaseDataSkillFromId(pBaseDataPet->m_arrSkillId[0]); //startAnimation( pBaseDataSkill->m_arrSkillId[0],pBaseDataSkill->m_arrSkillId[1],1,callfunc_selector(CPet::AttackEndCallBack),this,pBaseDataSkill->m_arrSkillId[2],false,false ); SAttackType *pAttackType = ( ( SAttackType* )d); if( CPET_STATE_NONE == pAttackType->Type ) { CBaseDataAnimation *pAnimationData = g_pClientLoader->GetBaseDataAnimationFromId(m_PetData.ResId); PlayAnimation( pAnimationData->m_attack, 1, callfunc_selector(CPet::AttackEndCallBack), this, false, false ); CBaseDataPet* pPetBaseData = g_pClientLoader->GetBaseDataPetFromId(m_PetData.petid); //‚àÜ‚Äô√ï¬ÆœÄ‚Ä¢¬™Àú¬±¬©¬™À? int damage = CExpressions::GetInstance()->GetDamage( CExpressions::GetInstance()->GetAttribute( pPetBaseData->dexaptitude, pPetBaseData->updex, pPetBaseData->initdex, m_PetData.petlevel ) ); int skilldata = CExpressions::GetInstance()->GetAttribute( pPetBaseData->skillaptitude, pPetBaseData->upskill, pPetBaseData->initskill, m_PetData.petlevel ); float pec = CExpressions::GetInstance()->GetSkillFrquency(skilldata, m_PetData.petlevel ); if( CCRANDOM_0_1() <( pec / 2.0f ) ) { m_pLockTarget->ApplyHurt( damage + damage / 2 + rand() % (damage / 2 ), true ); } else if( CCRANDOM_0_1() < 0.9f ) { m_pLockTarget->ApplyHurt( damage ); } else { m_pLockTarget->ApplyHurt( 0 ); } if( CCUserDefault::sharedUserDefault()->getBoolForKey( "sound" ) ) { string path = "data/audio/" + pPetBaseData->attack_sound; CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect(path.c_str(), false); } } else { CCFiniteTimeAction *pTime = new CCFiniteTimeAction(); pTime->setDuration( 1.2f ); pTime->autorelease(); CCFiniteTimeAction* pTimeAction = CCCallFuncN::actionWithTarget( this, callfuncN_selector(CPet::AttackOverCallBack) ); runAction( CCSequence::actions( pTime, pTimeAction, NULL ) ); g_pFightGroundLayer->removeChildByTag( FIRE_BALL_TAG, true ); CBaseDataPet* pDataPet = g_pClientLoader->GetBaseDataPetFromId(m_PetData.petid); CBaseDataSkill* pDataSkill = g_pClientLoader->GetBaseDataSkillFromId(pDataPet->skillfield[m_PetData.skilllevel.skillsLevel[0]-1]); m_pLockTarget->ApplyHurt( pDataSkill->damage ); if( CCUserDefault::sharedUserDefault()->getBoolForKey( "sound" ) ) { CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("data/audio/Hit1.mp3", false); } } }