일단 터치기능을 세팅해보자
터치 기능으로 무얼하는지는 나중에 생각하고 일단 터치부터 세팅한다.
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 != 0) continue;
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값을 확인할 수 있다.
다음 게시물에서 계속...
'안드로이드 > cocos2d-x' 카테고리의 다른 글
퍼즐 게임 만들기7 - 터치해서 두 블록의 위치 바꾸기 (0) | 2016.01.17 |
---|---|
퍼즐 게임 만들기6 - 터치 구현하기2 (0) | 2016.01.17 |
퍼즐 게임 만들기4 - 게임화면에 블록 출력하기2 (0) | 2016.01.17 |
퍼즐 게임 만들기3 - 게임화면에 블록 출력하기1 (0) | 2016.01.17 |
퍼즐 게임 만들기2 - 배경 이미지, 아이콘 등 리소스 만들기 (0) | 2016.01.17 |