cocos2dx 3.x(精靈的碰撞檢測,點擊移動與拖動精靈)


 1 //
 2 //  MainScene.hpp
 3 //  helloworld
 4 //
 5 //  Created by apple on 16/9/19.
 6 //
 7 //
 8 
 9 #ifndef MainScene_hpp
10 #define MainScene_hpp
11 
12 #include <stdio.h>
13 #include "cocos2d.h"
14 USING_NS_CC;
15 using namespace cocos2d;
16 //定義一個場景類
17 
18 class MainScene : public cocos2d::Layer{
19     
20 private:
21     // 成員變量(私有的)
22     Size size;//注意不能用auto關鍵字
23     Sprite *sprite1, *sprite2;//定義兩個成員變量的精靈(注意不能用auto關鍵字
24     Label *label;//全局變量Label->顯示碰撞與未碰撞(注意不能用auto關鍵字)
25 public:
26     virtual bool init(); // 虛函數,返回值為布爾類型,沒有函數
27 
28     static cocos2d::Scene* createScene();//static是一個類方法返回場景
29     //聲明點擊手勢
30     virtual bool onTouchBegan(Touch *touch, Event *unused_event);
31     //聲明拖動手勢
32     virtual void onTouchMoved(Touch *touch, Event *unused_event);
33     
34     CREATE_FUNC(MainScene);
35 };
36 
37 
38 #endif /* MainScene_hpp */

 

 

 1 //
 2 //  MainScene.cpp
 3 //  helloworld
 4 //
 5 //  Created by apple on 16/9/19.
 6 //
 7 //
 8 
 9 #include "MainScene.hpp"
10 cocos2d::Scene * MainScene::createScene()
11 {
12      auto scene = Scene::create();
13 //    CCScene * scene = CCScene::create();// 創建場景
14     //創建層
15     MainScene *layer = MainScene::create();
16     scene->addChild(layer);
17     return scene;
18 }
19 bool MainScene::init(){
20     if (!Layer::init()) {
21         return false;
22     }
23     //獲取屏幕大小
24     size = Director::getInstance()->getVisibleSize();
25     //auto size = Director::getInstance()->getWinSize();
26     //添加一個圖片精靈
27     sprite1 = Sprite::create("CloseNormal.png");
28     sprite1->setPosition(Vec2(size.width/2, size.height/2));
29     this->addChild(sprite1);
30     
31     sprite2 = Sprite::create("CloseNormal.png");
32     sprite2->setPosition(Vec2(size.width*0.4, size.height/2));
33     this->addChild(sprite2);
34     
35     label = Label::createWithSystemFont("No collision", "Marker Felt", 50);
36     label->setPosition(Vec2(size.width/2, size.height*0.7));
37     this->addChild(label);//直接把Label顯示在屏幕上
38     
39     //創建監聽事件對象
40     auto listener = EventListenerTouchOneByOne::create();
41     
42     //定義監聽事件的回調函數
43     listener->onTouchBegan = CC_CALLBACK_2(MainScene::onTouchBegan, this);
44     listener->onTouchMoved = CC_CALLBACK_2(MainScene::onTouchMoved, this);
45     
46     //在事件分發器中注冊
47     _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
48     
49     return true;
50 }
51 
52 //點擊移動精事件回調方法
53 bool MainScene::onTouchBegan(Touch *touch, Event *unused_event)
54 {
55     //獲取觸屏位置(坐標)
56     Point pos = touch->getLocation();
57     
58     sprite2->setPosition(pos);//把點擊屏幕的觸摸點(坐標)給賦值給精靈2
59     
60     log("TouchBegan");
61     
62     return true;
63 }
64 //拖動手勢執行事件方法
65 void MainScene::onTouchMoved(Touch *touch, Event *unused_event)
66 {
67     //獲取當前拖動手勢的坐標與位置
68     Point pos = touch->getLocation();
69     
70     sprite2->setPosition(pos);//讓精靈跟着拖動點移動
71     
72     //判斷兩個精靈是否相交
73     if (sprite2->getBoundingBox().intersectsRect(sprite1->getBoundingBox())){    //3.0改變處
74         label->setString("Collision!");//改變屏幕上Label的文字
75     }else{
76         label->setString("No collision");//改變屏幕上Label的文字
77     
78         log("TouchMoved");
79     }
80 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM