cocos2d-X CCsprite点击问题
来源:互联网 发布:ubuntu和centos 编辑:程序博客网 时间:2024/06/10 13:30
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 "init" you need to initialize your instance
bool
HelloWorld::init()
{
bool
bRet =
false
;
do
{
CC_BREAK_IF(! CCLayer::init());
//Get window size.
CCSize size = CCDirector::sharedDirector()->getWinSize();
//pSprite is a CCSprite for test.
pSprite = CCSprite::spriteWithFile(
"fjut.png"
);
CC_BREAK_IF(! pSprite);
//Place the sprite on the center of the screen
pSprite->setPosition(ccp(size.width/2, size.height/2));
this
->addChild(pSprite, 0);
bRet =
true
;
}
while
(0);
this
->setIsTouchEnabled(
true
);
return
bRet;
}
void
HelloWorld::registerWithTouchDispatcher()
{
CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(
this
, -1988,
true
);
}
static
CCRect getRect(CCNode* pNode)
{
CCRect rc;
rc.origin = pNode->getPosition();
rc.size = pNode->getContentSize();
rc.origin.x -= rc.size.width*0.5;
rc.origin.y -= rc.size.height*0.5;
return
rc;
}
void
HelloWorld::ccTouchEnded(CCTouch* pTouch, CCEvent* event)
{
CCPoint touchLocation = convertTouchToNodeSpace(pTouch);
if
(CCRect::CCRectContainsPoint(getRect(pSprite), touchLocation))
{
printf
(
"我被点中了!\n"
);
}
}
bool
HelloWorld::ccTouchBegan(CCTouch* touch, CCEvent* event)
{
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 "init" you need to initialize your instance
bool
HelloWorld::init()
{
bool
bRet =
false
;
do
{
CC_BREAK_IF(! CCLayer::init());
bRet =
true
;
}
while
(0);
this
->setIsTouchEnabled(
true
);
this
->testLayer();
return
bRet;
}
void
HelloWorld::testLayer()
{
CCLayer* ly = CCLayer::node();
/*x, y轴各偏移100*/
ly->setPosition(ccp(100, 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 add to layer1
this
->addChild(ly);
pSprite = CCSprite::spriteWithFile(
"fjut.png"
);
pSprite->setPosition(ccp(20, 20));
ly->addChild(pSprite, 0);
}
void
HelloWorld::registerWithTouchDispatcher()
{
CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(
this
, -1988,
true
);
}
static
CCRect getRect(CCNode* pNode)
{
CCRect rc;
rc.origin = pNode->getPosition();
rc.size = pNode->getContentSize();
/*x, y轴各偏移100*/
rc.origin.x -= rc.size.width*0.5 - 100;
//!!!!
rc.origin.y -= rc.size.height*0.5 - 100;
//!!!!
return
rc;
}
void
HelloWorld::ccTouchEnded(CCTouch* pTouch, CCEvent* event)
{
CCPoint touchLocation = convertTouchToNodeSpace(pTouch);
if
(CCRect::CCRectContainsPoint(getRect(pSprite), touchLocation))
{
printf
(
"我被点中了!\n"
);
}
}
bool
HelloWorld::ccTouchBegan(CCTouch* touch, CCEvent* event)
{
return
true
;
}
毛毛虫原创,转载请注明出处:http://www.cnblogs.com/fjut/
- cocos2d-X CCsprite点击问题
- cocos2d-x CCSprite添加点击事件注意事项
- Cocos2d-x-->CCSprite 动画
- cocos2d-x ccsprite 详解
- cocos2d-x 中的 CCSprite
- Cocos2d-X中的CCSprite
- cocos2d-x如何反白高亮CCSprite
- cocos2d-x学习:CCSprite总结
- [cocos2d-x] --- CCSprite类详解
- cocos2d-x学习之CCSprite
- cocos2d-x学习:CCSprite总结
- cocos2d-x学习:CCSprite总结
- cocos2d-x学习:CCSprite总结
- [cocos2d-x]坐标系,触屏自定义检测CCSprite的点击拖动等信息
- [cocos2d-x]坐标系,触屏自定义检测CCSprite的点击拖动等信息
- cocos2d-x 中CCScene CCLayer CCSprite CCNode
- cocos2d-x中CCSprite更换图片
- 【cocos2d-x】CCScene CCLayer CCSprite CCNode 描述
- JAVA IO 输入流 输出流 笔记(二)
- C#学习要点一
- 58
- Java:在Bean中使用PropertyChangeSupport支持PropertyChangeListeners
- C#调用epplus 创建Excel
- cocos2d-X CCsprite点击问题
- In App Purchase Verification using PHP
- 利用CSS3制作WINDOWS7开始菜单
- 提高显示布局文件的性能 4 - 提升ListView的性能
- selenium webdriver定位不到元素的五种原因及解决办法
- hadoop的五个守护进程
- 关闭ASM实例时 ORA-01031: insufficient privileges
- 绑定到异步的ObservableCollection [This type of CollectionView does not support changes to its SourceColl]
- Asp.net 中连接失败跳转到固定页面