Beispiel #1
0
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);// 子弹飞起来



}
Beispiel #2
0
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);
}
Beispiel #3
0
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;
}