小for的Cocos2d-x学习笔记与感悟4之单击事件

来源:互联网 发布:三星ml2161清零软件 编辑:程序博客网 时间:2024/04/20 09:54

小for在前面已经记录了Cocos2d-x的环境搭建和基本控件的使用,也算是开始了Cocos2d-x的学习了吧。前面的控件只记录了6种,以后等对这个引擎更了解了后再做一些自定义的控件,如果效果不错的话就贡献上来。

正文开始,如题,今天(早上发的是昨天写的^-^)要记录的内容点击事件,这个单机事件不是针对某一个精灵的,而是整个屏幕上的点击监听,通过监听点击的坐标位置实现。

首先,我们需要在HelloWorld.h中的public添加声明

        

 virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent);

然后,在HelloWorld.cpp中定义

        

CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,true);

 

最后,在HelloWorld.cpp中定义ccTouchBegan函数即可

bool HelloWorld::ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent) {//得到被点击的位置,为什么这个位置的高度不正确?CCPoint point=pTouch->locationInView();//我的模拟器高度为320point.y=320-point.y;//在控制台打印点中的坐标位置CCLog("Where you clicked was (%f,%f).",point.x,point.y);//在点中的位置放一张图片,CCSpritemark=CCSprite::create("CloseNormal.png");mark->setPosition(point);this->addChild(mark);return true;}

调试—>启动新实力,小for在屏幕上随机地点了很多很多下,得到了下图的结果(满脸麻子的赶脚)

控制台打印的坐标点如下

 

基本上,这个东西的使用就这样完成了。

小for扩展下,检测一下一张图片是否被点中了,请看如下代码,其中注释写得很清楚了。(只修改ccTouchBegan函数,注意那几个全局变量)

bool HelloWorld::ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent) {//得到被点击的位置,为什么这个位置的高度不正确?CCPoint point=pTouch->locationInView();//我的模拟器高度为320point.y=320-point.y;//在控制台打印点中的坐标位置CCLog("Where you clicked was (%f,%f).",point.x,point.y);float width=spriteClick->getContentSize().width;float height=spriteClick->getContentSize().height;float x=spriteClick->getPosition().x;float y=spriteClick->getPosition().y;if((point.x>=x&&point.x<=(x+width))&&(point.y>=y&&point.y<=y+height)){          //在这个矩形范围内          //点中的点在  图片矩形的(x,x+width)&&(y,y+height)之间,矩形范围内           //修改HelloWorld那几个字儿          this->removeChild(pLabel,true);          pLabel = CCLabelTTF::create("Sprite was clicked", "Arial", 24);         // Get window size and place the label upper.         CCSize size = CCDirector::sharedDirector()->getWinSize();        pLabel->setPosition(ccp(size.width / 2, size.height - 50));         this->addChild(pLabel, 1); }else{          this->removeChild(pLabel,true);          pLabel = CCLabelTTF::create("Sprite was not been clicked", "Arial", 24);         // Get window size and place the label upper.         CCSize size = CCDirector::sharedDirector()->getWinSize();        pLabel->setPosition(ccp(size.width / 2, size.height - 50));         // Add the label to HelloWorld layer as a child layer.        this->addChild(pLabel, 1);}return true;}

 

同样地,也贴一张图让大家看看效果

正文结束,午休了…小for给大家说午安了~

刚才看到腾讯新闻说消息薛蛮z因为嫖娼被抓了,我以前还关注了他的呢,完全是正人君子的赶脚。这事儿我不好评论得,因为小for不懂这些事哈。我觉得他出来后会立即黑警察局,黑政府,黑中国人性,即使不黑,也会无尽的讽刺了,我们就静静的看吧,因为这样才“符合”他的微博名人身份嘛。已经有微博名人在为他辩护了:

微博某公知: 在中国嫖娼都抓,连做爱都没有自由,这要是在美国,警察局长,市长要在电视台上向被打扰做爱的市民公开道歉, 这, 就是差距。

近来,薄熙来也正在被庭审,其实,作为一个重庆人,他的功劳是显而易见的,政治斗争什么的不懂,反正这人是功过都有。祈祷他能好好活着,以上只是小for没过大脑的想法,大家一笑置之吧。

原创粉丝点击