안드로이드/cocos2d-x2016. 1. 17. 02:53

일단 터치기능을 세팅해보자

 터치 기능으로 무얼하는지는 나중에 생각하고 일단 터치부터 세팅한다.

CGameLayer.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef PuzzleGame_GameLayer
#define PuzzleGame_GameLayer
 
#include "Common.h"
 
class CGameLayer : public cocos2d::Layer {
public:
    static cocos2d::Scene* createScene();
 
    virtual bool init();
 
    void startGame();
 
    void onTouchesBegan(const std::vector<cocos2d::Touch*>&pTouches, cocos2d::Event* pEvent);
    void onTouchesMoved(const std::vector<cocos2d::Touch*>&pTouches, cocos2d::Event* pEvent);
    void onTouchesEnded(const std::vector<cocos2d::Touch*>&pTouches, cocos2d::Event* pEvent);
 
    CREATE_FUNC(CGameLayer);
 
protected:
    Sprite* m_pBoard[COLUMN_COUNT][ROW_COUNT];
    Size m_winSize;
};
 
#endif
cs

 

CGameLayer.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include "GameLayer.h"
#include "GameObject.h"
#include <stdio.h>
#include <string.h>
 
 
#define COCOS2D_DEBUG 1
USING_NS_CC;
 
cocos2d::Scene* CGameLayer::createScene() {
    auto pScene = Scene::create();
    auto pLayer = CGameLayer::create();
 
    pScene->addChild(pLayer);
 
    return pScene;
}
 
bool CGameLayer::init() {
    if (!Layer::init()) { return false; }
 
    // 배경 이미지 출력
    cocos2d::Sprite* pBackgroundSprite = cocos2d::Sprite::create("background.png");
    pBackgroundSprite->setPosition(cocos2d::CCPointZero);
    pBackgroundSprite->setAnchorPoint(ccp((float)0, (float)0));
    addChild(pBackgroundSprite);
 
    
    // 터치 초기화
    EventListenerTouchAllAtOnce* listener = EventListenerTouchAllAtOnce::create();
    listener->onTouchesBegan = CC_CALLBACK_2(CGameLayer::onTouchesBegan, this);
    listener->onTouchesMoved= CC_CALLBACK_2(CGameLayer::onTouchesMoved, this);
    listener->onTouchesEnded = CC_CALLBACK_2(CGameLayer::onTouchesEnded, this);
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
 
 
    m_winSize = Director::sharedDirector()->getWinSize();
    startGame();
    return true;
}
 
void CGameLayer::startGame() {
    srand(time(NULL));
    for (int x = 0; x < COLUMN_COUNT; x++) {
        for (int y = 0; y < ROW_COUNT; y++) {
            if (x == COLUMN_COUNT - 1 && y % 2 != 0continue;
 
            int type = rand() % TYPE_COUNT;
 
            Sprite* pGameObjectBack = Sprite::create("blockBack.png");
            CGameObject* pGameObject = CGameObject::Create(type);
            m_pBoard[x][y] = pGameObject;
 
            
            // debug --------------------------------------------------------------
            // 각 블록의 좌표를 출력
            std::string str, str2, str3;
            str = std::to_string(x);
            str2 = ",";
            str3 = std::to_string(y);
            str.append(str2);
            str.append(str3);
            auto label = LabelTTF::create(str, "Arial"50);
            Point pos; pos.set(Common::ComputeXY((float)x, (float)y));
            label->setPosition(pos);
            // end of debug -------------------------------------------------------
            
 
            pGameObjectBack->setAnchorPoint(ccp(0.5f, 0.5f));
            pGameObjectBack->setPosition(Common::ComputeXY((float)x, (float)y));
            pGameObject->setAnchorPoint(ccp(0.5f, 0.5f));
            pGameObject->setPosition(Common::ComputeXY((float)x, (float)y));
            
 
            addChild(pGameObjectBack, 1);
            addChild(pGameObject, 2);
            addChild(label, 3);
        }
    }
}
 
void CGameLayer::onTouchesBegan(const std::vector<cocos2d::Touch*>&pTouches, cocos2d::Event* pEvent) {
    Touch* pTouch = (Touch*)pTouches.back();
 
    Point point = pTouch->getLocation();
 
    CCLog("Point = %f, %f", point.x, point.y);
}
 
void CGameLayer::onTouchesMoved(const std::vector<cocos2d::Touch*>&pTouches, cocos2d::Event* pEvent) {
    Touch* pTouch = (Touch*)pTouches.back();
 
    Point point = pTouch->getLocation();
}
 
void CGameLayer::onTouchesEnded(const std::vector<cocos2d::Touch*>&pTouches, cocos2d::Event* pEvent) {
    Touch* pTouch = (Touch*)pTouches.back();
 
    Point point = pTouch->getLocation();
}
cs

빨간 색으로 표시된 부분이 변경된 부분이다.

터치 이벤트 함수에서 CCLog() 함수를 통해 터치된 좌표를 디버깅할 수 있다.

Windows에서 Log를 찍어보려면 따로 세팅해줘야하고 번거로우니

Eclips로 넘어가서 찍어보고 온다.

 

 

 

 

Eclipse에서 CatLog로 터치 디버깅하기

Eclipse를 켠 후 잠시 기다려줘야한다. Cpp파일을 연동하는데에 시간이 걸리는 모양이다.

갑자기 디버깅부터 하면 이클립스가 놀래서 작업중지가 될 수 있으니

조심스럽게 Ctrl+B를 눌러서 빌드한 후

본인의 안드로이드 휴대폰을 연결한 후

Package Explorer -> 프로젝트 우 클릭 -> Run As -> Android Application을 선택해

직접 터치해본다.

 

하단의 LogCat에 여러가지 Log가 찍히는데

Saved Filters에서 본인이 프로젝트를 생성할 때 사용했던 패키지명을 선택하면

cocos2d-x에 관한 Log만 받아볼 수 있다.

또한 상단의 검색창에 "Point : "를 검색해

우리가 출력한 좌표 Log값을 확인할 수 있다.

 

 

 

 

다음 게시물에서 계속...

 

Posted by gharlic