コード例 #1
0
void AnalogStick::onTouchMoved(Touch *pTouch, Event *pEvent)
{
    if (!isCanMove) {
        return;
    }

    auto pos = pTouch->getLocation();
    auto stick = (Sprite*)this->getChildByTag((int)TagForStickPart::tag_stick);
    float angle = getRad(stickOuterPosition, pos);
    if (sqrt(pow(stickOuterPosition.x-pos.x, 2)) + pow(stickOuterPosition.y-pos.y, 2) >=
            stickOuterRadius) {
        stick->setPosition(Vec2(stickOuterPosition.x, stickOuterPosition.y) + getAnglePosition(stickOuterRadius, angle));
    } else {
        stick->setPosition(pos);
    }

    if(angle>=-PI/4&&angle<PI/4)
    {
        stickDirection=(int)TagForDirection::right;
    }
    else if(angle>=PI/4&&angle<3*PI/4)
    {
        stickDirection=(int)TagForDirection::up;
    }
    else if((angle>=3*PI/4&&angle<=PI)||(angle>=-PI&&angle<-3*PI/4))
    {
        stickDirection=(int)TagForDirection::left;
    }
    else if(angle>=-3*PI/4&&angle<-PI/4)
    {
        stickDirection=(int)TagForDirection::down;
    }
}
コード例 #2
0
ファイル: HRocker.cpp プロジェクト: xiezhen11111/rpgDemo
void HRocker::onTouchMoved( Touch * touch ,Event * unused_event )
{
	if (!isCanMove)
	{
		return;
	}

	Vec2 point =touch->getLocation();
	auto rocker=(Sprite *)this->getChildByTag(tag_rocker);

	//计算摇杆与触摸点形成的角度
	float angle=getRad(rockerBGPosition,point);

	if (sqrt(pow(rockerBGPosition.x-point.x,2)+pow(rockerBGPosition.y-point.y,2))>=rockerBGR)
	{
		//手指移出了背景之外
		rocker->setPosition(ccpAdd(getAnglePosition(rockerBGR,angle),rockerBGPosition));

	}else
	{
		//在摇杆背景内
		rocker->setPosition(point);
	}


	//设置摇杆方向
	if (angle>=-PI/4 && angle <PI/4)
	{
		rockerDirection=rocker_right;
		rockerRun=false;

	}else if (angle>=PI/4 && angle <3*PI/4)
	{
		rockerDirection=rocker_up;

	}else if ((angle>=3*PI/4 && angle<=PI) || (angle <-3*PI/4  && angle>=-PI))
	{
		rockerDirection=rocker_left;
		rockerRun=true;

	}else if (angle>=-3*PI/4 && angle <-PI/4)
	{
		rockerDirection=rocker_down;
	}
	

	
}
コード例 #3
0
ファイル: UIr_Layer.cpp プロジェクト: jj918160/dame-01
bool UIr_Layer::init(){
    if (!Layer::init()) {
        return false;
    }
   
    bag_open=false;
    rokerPosition=Vec2(150,150);
    workespaceopen=true;
    CCSprite *spRockerBG=CCSprite::create("CG-1086.png");
    spRockerBG->setPosition(rokerPosition);
    spRockerBG->setOpacity(50);
    addChild(spRockerBG,1);
    rockerBGR=spRockerBG->getContentSize().width*0.5;
    
    auto spRockerF = Sprite::create("CG-7005.png");
    spRockerF->setPosition(rokerPosition);
    addChild(spRockerF, 2,1);
    
    auto work = Sprite::create("work.png");
    work->setPosition(160,470);
    addChild(work,2,8);
    
    auto labelttf=Label::createWithSystemFont("任务:", "Arial", 16);
    labelttf->setAnchorPoint(Vec2(0,1));
    labelttf->setPosition(40,200);
    labelttf->setColor(ccc3(255, 0, 0));
    labelttf->setString("任务:从左下角离开去找刘备");
    work->addChild(labelttf,2,8);
    
    
    
 
    auto tol=MenuItemToggle::createWithCallback(CC_CALLBACK_1(UIr_Layer::callback1,this),
                                                MenuItemImage::create("close1.png", "close1.png"),
                                                MenuItemImage::create("open1.png", "open1.png"),
                                               
                                                NULL);
    tol->setPosition(24,613);
    //this->addChild(tol,2);
    
    auto item=MenuItemImage::create("CG-6997.png", "CG-6998.png", CC_CALLBACK_1(UIr_Layer::callback2,this));
    item->setPosition(500,600);
    
    //test_began
    auto item2=MenuItemImage::create("CG-1487.png", "CG-1486.png", CC_CALLBACK_1(UIr_Layer::callback3,this));
    item2->setPosition(600,600);
    
    //test_end
    auto menu=Menu::create(tol,item,item2,NULL);
    menu->setPosition(0,0);
    this->addChild(menu);
    
    
    auto attlistener=EventListenerTouchOneByOne::create();
    attlistener->onTouchBegan=[=](Touch*touch,Event*event){
        auto target=static_cast<Sprite*>(event->getCurrentTarget());
        Vec2 locationInNode=target->convertToNodeSpace(touch->getLocation());
        Size s=target->getContentSize();//点到判断碰撞
        Rect rect=Rect(0,0,s.width,s.height);
        if (rect.containsPoint(locationInNode)) {
            return  true;
        }
        return false;

           };
    
    attlistener->onTouchMoved=[&](Touch*touch,Event*event){
        Vec2 point=touch->getLocation();
        
        auto target=static_cast<Sprite*>(event->getCurrentTarget());
        if (sqrt(pow((rokerPosition.x-point.x),2)+pow((rokerPosition.y-point.y),2))>=rockerBGR){
           
            float angle=getRad(point);
            target->setPosition(ccpAdd(getAnglePosition(rockerBGR, angle),rokerPosition));
        }else{
            target->setPosition(target->getPosition()+touch->getDelta());
        }
       
        
         float angle=getRad(point);
        //CCLOG("hudu:%f",angle);
        if (angle<=PI/8&&angle>-PI/8) {
            type=1;
        }
        else if (angle>PI/8&&angle<=PI*3/8) {
            type=2;
        }
        else if (angle>PI*3/8&&angle<=PI*5/8) {
            type=3;
        }
        else if (angle>PI*5/8&&angle<=PI*7/8) {
            type=4;
        }
        else if (angle>PI*7/8||angle<=-PI*7/8) {
            type=5;
        }
        else if (angle>-PI*7/8&&angle<=-PI*5/8) {
            type=6;
        }
        else if (angle>-PI*5/8&&angle<=-PI*3/8) {
            type=7;
        }
        else if (angle>-PI*3/8&&angle<=-PI*1/8) {
            type=8;
        }
       // CCLOG("type:%d",type);
        

    };

    
    attlistener->onTouchEnded=[&](Touch*touch,Event*event){
        Sprite *spRockerF=(Sprite*)this->getChildByTag(1);
        spRockerF->runAction(CCMoveTo::create(0.05, rokerPosition));
            type=0;
    };
    Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(attlistener,spRockerF);
    
    
    
    return true;
}