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);// 子弹飞起来 }
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; }