Cocos2dx 3.0 過渡篇(十四)用touch拖動女主打敗小三!
首先我要說明的是:這是一篇女主與小三爭奪男主的故事!該故事場麵規模宏大,劇情環環緊扣,堪稱苦情劇中的穿越劇,愛情公寓裏的愛森公寓...
上集劇情介紹:https://blog.csdn.net/start530/article/details/20153367
-------------------------------------
boy 和 girl 甜蜜的交往了兩年,但是,由於boy是一個文理雙修的優秀男兒,小三不得不跳出來了!小三設計出種種陰謀
來拆散boy和girl。最後他倆大吵了一架。在冷戰期間,小三強勢入內,伴隨boy左右!女主發現這個情況後,意識到所有一切都是小三搞的鬼,但她又拉不下臉來去和boy道歉。而我們的故事也就是從這裏開始的。
主線劇情:拖動girl移動到男主旁的紅色框框內。
分線劇情:girl一進入紅框,就能立馬被boy文理雙修的氣質所吸引,飛到他..身邊。
分線劇情:按照劇情安排,小三必須在女主回來的時候馬上離開!

-------------------------------------------------------
實現過程:
1、添加觸摸監聽事件:
- auto listener = EventListenerTouchOneByOne::create();//創建一個觸摸監聽(單點觸摸)
- listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);//指定觸摸的回調函數
- listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
- listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
- _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);//將listener放入事件委托中
2、創建boy,girl,girl_3
- boy = Sprite::create("boy.png");//創建男主
- boy->setPosition(Point(400,370));
- this->addChild(boy,1);
- girl_1 = Sprite::create("girl_1.png");//創建女主
- girl_1->setPosition(Point(250,250));
- this->addChild(girl_1,1);
- girl_3 = Sprite::create("girl_3.png");//創建小三
- girl_3->setPosition(Point(450,370));
- this->addChild(girl_3,1);
3、接收監聽,touchBegan
- bool HelloWorld::onTouchBegan(Touch* touch, Event *event)
- {
- return true;//返回true表示接收觸摸事件
- }
4、拖動女主移動
- void HelloWorld::onTouchMoved(Touch* touch, Event *event)
- {
- auto beginPos = touch->getLocationInView();//獲得觸摸位置
- beginPos = Director::getInstance()->convertToGL(beginPos);//坐標轉換
- auto girlPos = girl_1->getPosition();//獲取女主的位置
- auto girlSize = girl_1->getContentSize();//獲取女主的三圍(大小)
- //針對女主的坐標和三圍定製一個凶..框框
- auto rect = Rect(girlPos.x - girlSize.width/2,girlPos.y - girlSize.height/2,girlSize.width + 10,girlSize.height + 10);
- if(rect.containsPoint(beginPos))//判斷觸點是否在女主身上!
- {
- auto endPos = touch->getPreviousLocationInView();//獲取觸摸的前一個位置
- endPos = Director::sharedDirector()->convertToGL(endPos);//轉換坐標
- auto offset = Point(beginPos-endPos);//獲取offset,2.14是用ccpSub,3.0後直接用 - 號就可以
- auto nextPos = Point(girlPos + offset);//獲取女主的下一步計劃,2.14用的是ccpAdd,
- girl_1->setPosition(nextPos);
- }
- }
5、判斷女主移動的最後位置,如果在紅框,則被吸引,同時小三離開。如果不在,則女主回原地,小三不動。
- void HelloWorld::onTouchEnded(Touch* touch, Event *event)
- {
- auto lastPos = touch->getLocationInView();
- lastPos = Director::getInstance()->convertToGL(lastPos);
- auto rect = Rect(400,300,100,150);//建立一個選中區域,女主如果拖動到這個框內就可以瞬移進來,反之是小三進來
- MoveTo* moveTo_1;//女主的動作
- MoveTo* moveTo_3;//小三的動作
- if(rect.containsPoint(lastPos))
- {
- moveTo_1 = MoveTo::create(0.1f,Point(450,370));
- moveTo_3 = MoveTo::create(0.1f,Point(250,250));
- }
- else
- {
- moveTo_1 = MoveTo::create(0.1f,Point(250,250));
- moveTo_3 = MoveTo::create(0.1f,Point(450,370));
- }
- girl_1->runAction(moveTo_1);//男主爭奪戰~~
- girl_3->runAction(moveTo_3);
- }

--------------------------------------------------------
這個故事告訴我們,情侶之間一定要珍惜彼此的感情,我們並不是在演三國,分分合合終究是有風險的。一個疏忽,小三自然就出現了。
本博客純屬娛樂;
轉載請注明來自star特530:https://blog.csdn.net/start530/article/details/20319009
最後更新:2017-04-03 12:56:12