加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d-x 摇杆(二)

发布时间:2020-12-14 21:33:55 所属栏目:百科 来源:网络整理
导读:根据上一篇内容进行改进 Control.h 增加以下内容 CCSprite* main_tank;void control_update(float dt); Control.cpp void Control::control_update(float dt){float move_x=cen-getPositionX()-origin.x;//摇杆相对移动X轴float move_y=cen-getPositionY()-o


根据上一篇内容进行改进

Control.h

增加以下内容

CCSprite* main_tank;
void control_update(float dt);



Control.cpp

void Control::control_update(float dt)
{
	float move_x=cen->getPositionX()-origin.x;//摇杆相对移动X轴
	float move_y=cen->getPositionY()-origin.y;//摇杆相对移动y轴
	if(isOnControl&&move_y!=0&&move_x!=0)//摇杆有移动时
	{
		float ata=atan2(move_x,move_y);//换取遥感相对移动角度
		ata=ata/M_PI;//角度数值化
		//判断,确定方向
		if(ata>-0.25&&ata<0.25)
		{
			main_tank->setRotation(0);
			main_tank->setPositionY(main_tank->getPositionY()+1);
		//	CCLOG("top");
		}

		if(ata>0.25&&ata<0.75)
		{

			main_tank->setRotation(90);
			main_tank->setPositionX(main_tank->getPositionX()+1);
		//	CCLOG("right");
		}

		if(ata>-0.75&&ata<-0.25)
		{
			main_tank->setRotation(270);
			main_tank->setPositionX(main_tank->getPositionX()-1);
			//CCLOG("left");
		}

		if(ata>0.75||ata<-0.75)
		{
			main_tank->setRotation(180);
			main_tank->setPositionY(main_tank->getPositionY()-1);
			//CCLOG("down");
		}
	//	setTagPosition(main_tank->getPositionX(),main_tank->getPositionY());
	}
}


void Control::initData()
{
	origin = ccp(150,150);  //摇杆原点	
	control_bg = CCSprite::create("dpadUp.png");
	control_bg->setPosition(origin);
	control_bg->setScale(2);
	this->addChild(control_bg);
	cen = CCSprite::create("joystickUp.png");
	cen->setPosition(origin);
	this->addChild(cen);
	CCRect r = control_bg->boundingBox();
	r_control = (r.getMaxX()-r.getMinX())/2; //摇杆半径
        //----------------------
	main_tank = CCSprite::create("an1_anim1.png");
	main_tank->setPosition(ccp(50,50));
	main_tank->setScale(0.5);
	this->addChild(main_tank);

}



bool Control::ccTouchBegan(CCTouch* touch,CCEvent* event)
{
	if (cen->boundingBox().containsPoint(touch->getLocation()))
	{
		isOnControl = true;
		cen->setScale(1.1);
	}
        //----------
	schedule(schedule_selector(Control::control_update));
	return true;
}




void Control::ccTouchEnded(CCTouch* touch,CCEvent* event)
{
	isOnControl = false;
	cen->setPosition(origin);
	cen->setScale(1);

        //---------
	unscheduleAllSelectors();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读