成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

3.2簡單搖桿上下左右-創(chuàng)新互聯(lián)

#ifndef _HROCKER_H_
#define _HROCKER_H_
#include "cocos2d.h"

USING_NS_CC;
//用于標(biāo)識搖桿與搖桿的背景
typedef enum tagForHRocker
{
    tag_rocker,
    tag_rockerBG
};

//用于標(biāo)識搖桿方向
typedef enum{
    rocker_stay,
    rocker_right,
    rocker_up,
    rocker_left,
    rocker_down,
}tagDirecton;
class HRocker:public Layer{

public:
    HRocker(void);
    ~HRocker(void);
    virtual bool init();
    //創(chuàng)建搖桿(搖桿的操作題圖片資源名,搖桿背景圖片資源名,起始坐標(biāo))
    static HRocker* createHRocker(const char *rockerImageName,const char *rockerBGImageName,Point position);
    //啟動搖桿(顯示搖桿、監(jiān)聽搖桿觸屏事件)
    void startRocker(bool _isStopOther);
    //停止搖桿(隱藏搖桿,取消搖桿的觸屏監(jiān)聽)
    void stopRocker();
    //判斷控制桿方向,用來判斷精靈上、下、左、右運動
    int rocketDirection;
    //當(dāng)前人物行走方向,用來判斷精靈的朝向,精靈臉朝右還是朝左
    bool rocketRun;
    void update(float dt);
    CREATE_FUNC(HRocker);

    EventListenerTouchOneByOne* listener;
private:
    //自定義初始化函數(shù)
    void rockerInit(const char* rockerImageName,const char* rockerBGImageName,Point position);
    //是否可操作搖桿
    bool isCanMove;
    //獲取當(dāng)前搖桿與用戶觸屏點的角度
    float getRad(Point pos1,Point pos2);
    //搖桿背景的坐標(biāo)
    Point rockerBGPosition;
    //搖桿背景的半徑
    float rockerBGR;
    //觸屏事件
    virtual bool onTouchBegan(Touch *pTouch, Event *pEvent);
    virtual void onTouchMoved(Touch *pTouch, Event *pEvent);
    virtual void onTouchEnded(Touch *pTouch, Event *pEvent);
};
#endif

******************************************************

創(chuàng)新互聯(lián)建站服務(wù)項目包括酉陽土家族苗族網(wǎng)站建設(shè)、酉陽土家族苗族網(wǎng)站制作、酉陽土家族苗族網(wǎng)頁制作以及酉陽土家族苗族網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,酉陽土家族苗族網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到酉陽土家族苗族省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

#include "HRocker.h"
#include "Hero.h"
const double PI=3.1415;
HRocker::HRocker(void)
{
   rocketRun=false;
}

HRocker::~HRocker(void)
{
}

bool HRocker::init()
{
   listener = EventListenerTouchOneByOne::create();
   listener->onTouchBegan = CC_CALLBACK_2(HRocker::onTouchBegan,this);
   listener->onTouchMoved = CC_CALLBACK_2(HRocker::onTouchMoved,this);
   listener->onTouchEnded = CC_CALLBACK_2(HRocker::onTouchEnded,this);
   Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener,this);
   return true;
}
//創(chuàng)建搖桿(搖桿的操作題圖片資源名,搖桿背景圖片資源名,起始坐標(biāo))
HRocker* HRocker::createHRocker(const char *rockerImageName,const char *rockerBGImageName,Point position)
{
   HRocker *layer = HRocker::create();
   if (layer)
   {
      layer->rockerInit(rockerImageName,rockerBGImageName,position);
      return layer;
   }
   CC_SAFE_DELETE(layer);
   return NULL;
}
//自定義初始化函數(shù)
void HRocker::rockerInit(const char* rockerImageName,const char* rockerBGImageName,Point position)
{
   Sprite *spRockerBG = Sprite::create(rockerBGImageName);
   spRockerBG->setPosition(position);
   spRockerBG->setVisible(false);
   addChild(spRockerBG,0,tag_rockerBG);

   Sprite *spRocker = Sprite::create(rockerImageName);
   spRocker->setPosition(position);
   spRocker->setVisible(false);
   addChild(spRocker,1,tag_rocker);

   rockerBGPosition = position;
   rockerBGR = spRockerBG->getContentSize().width*0.5;//
   rocketDirection=-1;//表示搖桿方向不變
}
//啟動搖桿(顯示搖桿、監(jiān)聽搖桿觸屏事件)
void HRocker::startRocker(bool _isStopOther)
{
   Sprite *rocker = (Sprite*)this->getChildByTag(tag_rocker);
   rocker->setVisible(true);

   Sprite *rockerBG = (Sprite *)this->getChildByTag(tag_rockerBG);
   rockerBG->setVisible(true);
   //想在這里監(jiān)聽

}
//停止搖桿(隱藏搖桿,取消搖桿的觸屏監(jiān)聽)
void HRocker::stopRocker()
{
   Sprite *rocker = (Sprite *)this->getChildByTag(tag_rocker);
   rocker->setVisible(false);

   Sprite * rockerBG = (Sprite *)this->getChildByTag(tag_rockerBG);
   rockerBG->setVisible(false);
   //這里取消監(jiān)聽
   _eventDispatcher->removeEventListener(listener);

}
//獲取當(dāng)前搖桿與用戶觸屏點的角度
float HRocker::getRad(Point pos1,Point pos2)
{
   float px1 = pos1.x;
   float py1 = pos1.y;
   float px2 = pos2.x;
   float py2 = pos2.y;

   //得到兩點x的距離
   float x = px2 - px1;
   //得到兩點y的距離
   float y = py1 - py2;
   //算出斜邊長度
   float xie = sqrt(pow(x,2) + pow(y,2));
   //得到這個角度的余弦值(通過三角函數(shù)中的店里:角度余弦值=斜邊/斜邊)
   float cosAngle = x / xie;
   //通過反余弦定理獲取到期角度的弧度
   float rad = acos(cosAngle);
   //注意:當(dāng)觸屏的位置Y坐標(biāo)<搖桿的Y坐標(biāo),我們要去反值-0~-180
   if (py2 < py1)
   {
      rad = -rad;
   }
   return rad;
}

Point getAngelePosition(float r,float angle){
   return ccp(r*cos(angle),r*sin(angle));
}
//抬起事件
bool HRocker::onTouchBegan(Touch *pTouch, Event *pEvent)
{
   Point point = pTouch->getLocation();
   Sprite *rocker = (Sprite *)this->getChildByTag(tag_rocker);
   if (rocker->boundingBox().containsPoint(point))
   {
      isCanMove = true;
      CCLOG("begin");
   }
   return true;
}
//移動事件
void HRocker::onTouchMoved(Touch *pTouch, Event *pEvent)
{
   if (!isCanMove)
   {
      return;
   }
   Point point = pTouch->getLocation();
   Sprite *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)
   {

      //保證內(nèi)部小圓運動的長度限制
      rocker->setPosition(ccpAdd(getAngelePosition(rockerBGR,angle),ccp(rockerBGPosition.x,rockerBGPosition.y)));
      // CCLOG("touch");
   }
   else
   {
      //當(dāng)沒有超過,讓搖桿跟隨用戶觸屏點移動即可
      rocker->setPosition(point);
      //CCLOG("touch");
   }

   //判斷方向
   if(angle>=-PI/4&&angle<PI/4)
   {
      rocketDirection=rocker_right;
      rocketRun=false;
      CCLOG("%d",rocketDirection);
   }
   else if(angle>=PI/4&&angle<3*PI/4)
   {
      rocketDirection=rocker_up;
      CCLOG("%d",rocketDirection);
   }
   else if((angle>=3*PI/4&&angle<=PI)||(angle>=-PI&&angle<-3*PI/4))
   {
      rocketDirection=rocker_left;
      rocketRun=true;
      CCLOG("%d",rocketDirection);
   }
   else if(angle>=-3*PI/4&&angle<-PI/4)
   {
      rocketDirection=rocker_down;
      CCLOG("%d",rocketDirection);
   }
}
//離開事件
void HRocker::onTouchEnded(Touch *pTouch, Event *pEvent)
{
   if (!isCanMove)
   {
      return;
   }
   Sprite *rockerBG = (Sprite*)this->getChildByTag(tag_rockerBG);
   Sprite *rocker = (Sprite*)this->getChildByTag(tag_rocker);
   rocker->stopAllActions();
   rocker->runAction(MoveTo::create(0.08f,rockerBG->getPosition()));
   isCanMove = false;
   rocketDirection=rocker_stay;
   CCLOG("%d",rocketDirection);
   CCLOG("end");
}
void HRocker::update(float dt)
{
   if(isCanMove)
   {

   }
}

***********************HelloWord.h******************************

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"
#include ".\HRocker.h"
//#include ".\Hero.h"
class HelloWorld : public cocos2d::Layer
{
public:

   static cocos2d::Scene* createScene();
   virtual bool init();
   void menuCloseCallback(cocos2d::Ref* pSender);
   CREATE_FUNC(HelloWorld);
   void update(float dt);
private:
   HRocker* rocker;
   //Hero* hero;
};

#endif // __HELLOWORLD_SCENE_H__

*************************HelloWord.cpp***********************

bool HelloWorld::init()
{
   //////////////////////////////
   // 1. super init first
   if ( !Layer::init() )
   {
       return false;
   }

   Size visibleSize = Director::getInstance()->getVisibleSize();
   Vec2 origin = Director::getInstance()->getVisibleOrigin();

  auto Bg = Sprite::create("background_1.jpg");
  Bg->setPosition(visibleSize.width/2,visibleSize.height/2);
  this->addChild(Bg);

 //添加搖桿
 rocker = HRocker::createHRocker("Direction_bt.png","Direction_bc.png",ccp(110,60));//其中第一張圖片為搖桿的按鈕,第二張為背景
 this->addChild(rocker,2);
 rocker->startRocker(true);

 //啟動updata事件
 this->scheduleUpdate();

   return true;
}

//自己創(chuàng)建 一個精靈(英雄)類 吧 然后在這里引用

void HelloWorld::update(float dt)
{
   //判斷是否按下?lián)u桿及其類型
   switch(rocker->rocketDirection)
   {
   case 1:
      hero->SetAnimation("run_animation.plist","run_animation.png","run_",8,rocker->rocketRun);//"run_"為run_animation.png集合圖片中每張圖片的公共名稱部分
      hero->setPosition(ccp(hero->getPosition().x+2,hero->getPosition().y)); //向右走
      break;
   case 2:
      hero->SetAnimation("run_animation.plist","run_animation.png","run_",8,rocker->rocketRun);//"run_"為run_animation.png集合圖片中每張圖片的公共名稱部分
      hero->setPosition(ccp(hero->getPosition().x, hero->getPosition().y+2));  //向上走
      break;
   case 3:
      hero->SetAnimation("run_animation.plist","run_animation.png","run_",8,rocker->rocketRun);//"run_"為run_animation.png集合圖片中每張圖片的公共名稱部分
      hero->setPosition(ccp(hero->getPosition().x-2,hero->getPosition().y));  //向左走
      break;
   case 4:
      hero->SetAnimation("run_animation.plist","run_animation.png","run_",8,rocker->rocketRun);//"run_"為run_animation.png集合圖片中每張圖片的公共名稱部分
      hero->setPosition(ccp(hero->getPosition().x,hero->getPosition().y-2));  //向下走
      break;
   default:
      hero->StopAnimation();//停止所有動畫和運動
      break;

   }
}

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站標(biāo)題:3.2簡單搖桿上下左右-創(chuàng)新互聯(lián)
分享路徑:http://jinyejixie.com/article4/dcipoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站用戶體驗、品牌網(wǎng)站設(shè)計、網(wǎng)站設(shè)計、網(wǎng)站設(shè)計公司、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計
苏尼特右旗| 钟祥市| 邹城市| 平塘县| 榆中县| 苏尼特右旗| 长乐市| 东宁县| 翼城县| 万安县| 泰顺县| 霸州市| 黑山县| 苏尼特右旗| 磐石市| 手机| 宝丰县| 洪湖市| 万安县| 建瓯市| 昔阳县| 安康市| 渭源县| 余干县| 专栏| 蕲春县| 精河县| 汤原县| 丽江市| 乌兰察布市| 宜宾市| 旅游| 孙吴县| 洪雅县| 三台县| 阿克陶县| 义乌市| 浏阳市| 五莲县| 壤塘县| 西华县|