標籤:cts close 成員變數 eve idt 返回 拖動 ccscene collision
1 // 2 // MainScene.hpp 3 // helloworld 4 // 5 // Created by apple on 16/9/19. 6 // 7 // 8 9 #ifndef MainScene_hpp10 #define MainScene_hpp11 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);//把點擊螢幕的觸摸點(座標)給賦值給精靈259 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 }
cocos2dx 3.x(精靈的碰撞檢測,點擊移動與拖動精靈)