閱讀335 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Cocos2dx 3.0 過渡篇(十四)用touch拖動女主打敗小三!

首先我要說明的是:這是一篇女主與小三爭奪男主的故事!該故事場麵規模宏大,劇情環環緊扣,堪稱苦情劇中的穿越劇,
愛情公寓裏的愛森公寓...
上集劇情介紹:https://blog.csdn.net/start530/article/details/20153367

-------------------------------------
boy 和 girl 甜蜜的交往了兩年,但是,由於boy是一個文理雙修的優秀男兒,小三不得不跳出來了!小三設計出種種陰謀
來拆散boy和girl。最後他倆大吵了一架。在冷戰期間,小三強勢入內,伴隨boy左右!女主發現這個情況後,意識到所有一切都是小三搞的鬼,但她又拉不下臉來去和boy道歉。而我們的故事也就是從這裏開始的。
主線劇情:拖動girl移動到男主旁的紅色框框內。
分線劇情:girl一進入紅框,就能立馬被boy文理雙修的氣質所吸引,飛到他..身邊。
分線劇情:按照劇情安排,小三必須在女主回來的時候馬上離開!


-------------------------------------------------------
實現過程:

1、添加觸摸監聽事件:

  1. auto listener = EventListenerTouchOneByOne::create();//創建一個觸摸監聽(單點觸摸)  
  2. listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);//指定觸摸的回調函數  
  3. listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);  
  4. listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);  
  5. _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);//將listener放入事件委托中  

2、創建boy,girl,girl_3

  1. boy = Sprite::create("boy.png");//創建男主  
  2. boy->setPosition(Point(400,370));  
  3. this->addChild(boy,1);  
  4.   
  5. girl_1 = Sprite::create("girl_1.png");//創建女主  
  6. girl_1->setPosition(Point(250,250));  
  7. this->addChild(girl_1,1);  
  8.   
  9. girl_3 = Sprite::create("girl_3.png");//創建小三  
  10. girl_3->setPosition(Point(450,370));  
  11. this->addChild(girl_3,1);  

3、接收監聽,touchBegan

  1. bool HelloWorld::onTouchBegan(Touch* touch, Event  *event)  
  2. {  
  3.     return true;//返回true表示接收觸摸事件  
  4. }   

4、拖動女主移動

  1. void HelloWorld::onTouchMoved(Touch* touch, Event  *event)  
  2. {  
  3.     auto beginPos = touch->getLocationInView();//獲得觸摸位置  
  4.     beginPos = Director::getInstance()->convertToGL(beginPos);//坐標轉換  
  5.   
  6.     auto girlPos = girl_1->getPosition();//獲取女主的位置  
  7.     auto girlSize = girl_1->getContentSize();//獲取女主的三圍(大小)  
  8.     //針對女主的坐標和三圍定製一個凶..框框  
  9.     auto rect = Rect(girlPos.x - girlSize.width/2,girlPos.y - girlSize.height/2,girlSize.width + 10,girlSize.height + 10);  
  10.     if(rect.containsPoint(beginPos))//判斷觸點是否在女主身上!  
  11.     {  
  12.         auto endPos = touch->getPreviousLocationInView();//獲取觸摸的前一個位置  
  13.         endPos = Director::sharedDirector()->convertToGL(endPos);//轉換坐標  
  14.   
  15.         auto offset = Point(beginPos-endPos);//獲取offset,2.14是用ccpSub,3.0後直接用 - 號就可以  
  16.         auto nextPos = Point(girlPos + offset);//獲取女主的下一步計劃,2.14用的是ccpAdd,  
  17.         girl_1->setPosition(nextPos);  
  18.     }    
  19. }  

5、判斷女主移動的最後位置,如果在紅框,則被吸引,同時小三離開。如果不在,則女主回原地,小三不動。

  1. void HelloWorld::onTouchEnded(Touch* touch, Event  *event)  
  2. {  
  3.     auto lastPos = touch->getLocationInView();  
  4.     lastPos = Director::getInstance()->convertToGL(lastPos);  
  5.   
  6.     auto rect = Rect(400,300,100,150);//建立一個選中區域,女主如果拖動到這個框內就可以瞬移進來,反之是小三進來  
  7.       
  8.     MoveTo* moveTo_1;//女主的動作  
  9.     MoveTo* moveTo_3;//小三的動作  
  10.     if(rect.containsPoint(lastPos))  
  11.     {  
  12.         moveTo_1 = MoveTo::create(0.1f,Point(450,370));  
  13.         moveTo_3 = MoveTo::create(0.1f,Point(250,250));  
  14.     }  
  15.     else  
  16.     {  
  17.         moveTo_1 = MoveTo::create(0.1f,Point(250,250));  
  18.         moveTo_3 = MoveTo::create(0.1f,Point(450,370));  
  19.     }  
  20.   
  21.     girl_1->runAction(moveTo_1);//男主爭奪戰~~  
  22.     girl_3->runAction(moveTo_3);  
  23. }  

--------------------------------------------------------
這個故事告訴我們,情侶之間一定要珍惜彼此的感情,我們並不是在演三國,分分合合終究是有風險的。一個疏忽,小三自然就出現了。


本博客純屬娛樂;
轉載請注明來自star特530
https://blog.csdn.net/start530/article/details/20319009

最後更新:2017-04-03 12:56:12

  上一篇:go C# 常用函數集錦
  下一篇:go C# 常用函數集錦