cocos2d-x CCLayer上精灵的点击判断的问题
今天发现的问题,记录下,对cocos2d坐标转换的理解还不透彻,看来有必要去学习下OpenGL的基础知识了。
//使用的2dx是老版本.
1. 平时在CCLayer上放置的CCSprite,判断是否被点击到的,我一般这样做:
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
|
//on bool HelloWorld::init() { bool bRet false ; do { CC_BREAK_IF(! //Get CCSize //pSprite pSprite "fjut.png" ); CC_BREAK_IF(! //Place pSprite->setPosition(ccp(size.width/2, this ->addChild(pSprite, bRet true ; } while (0); this ->setIsTouchEnabled( true ); return bRet; } void HelloWorld::registerWithTouchDispatcher() { CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate( this , true ); } static CCRect { CCRect rc.origin rc.size rc.origin.x rc.origin.y return rc; } void HelloWorld::ccTouchEnded(CCTouch* { CCPoint if (CCRect::CCRectContainsPoint(getRect(pSprite), { printf ( "我被点中了!\n" ); } } bool HelloWorld::ccTouchBegan(CCTouch* { return true ; } |
2. 要是在CCLayer1上放置CCLayer2(有偏移),再向CCLayer2上放置CCSprite的点击判断需要计算偏移量:
eg:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
//on bool HelloWorld::init() { bool bRet false ; do { CC_BREAK_IF(! bRet true ; } while (0); this ->setIsTouchEnabled( true ); this ->testLayer(); return bRet; } void HelloWorld::testLayer() { CCLayer* /*x, ly->setPosition(ccp(100, |
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
|
//layer2 this ->addChild(ly); pSprite "fjut.png" ); pSprite->setPosition(ccp(20, ly->addChild(pSprite, } void HelloWorld::registerWithTouchDispatcher() { CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate( this , true ); } static CCRect { CCRect rc.origin rc.size /*x, rc.origin.x //!!!! rc.origin.y //!!!! return rc; } void HelloWorld::ccTouchEnded(CCTouch* { CCPoint if (CCRect::CCRectContainsPoint(getRect(pSprite), { printf ( "我被点中了!\n" ); } } bool HelloWorld::ccTouchBegan(CCTouch* { return true ; } |
毛毛虫原创,转载请注明出处:http://www.cnblogs.com/fjut/