Cocos2d-x   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了【木头Cocos2d-x 016】控件篇(第01章) 我最爱的九妹和按钮事件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

Cocos2d-x控件篇001】我最爱的九妹和按钮事件@H_944_12@

@H_944_12@

笨木头花心贡献,啥?花心?不呢,是用心~

@H_944_12@转载请注明,原文地址
http://www.voidcn.com/article/p-tuhmikxk-zw.html

正文:@H_944_12@

最近在尝试写一个小游戏,噢?你刚刚说什么?你说你想看看我的小游戏?好啊好啊,我很乐意,来,看看截图:

目前只有这个样子了,这个战斗模块的第一个版本,很简陋,我想完善一下控件界面。所以,我开始研究官方的控件Demo~

然后,和以前一样,不管如何,我还是要记录下我的学习心得~

1.九妹图片@H_944_12@

相信做过Android开发的都很熟悉九妹这个词,其实她就是一种图片,一种支持拉伸的图片,由一张小图拉伸到一张大图,并且是,任意的~

这实在是太让人兴奋了,因为Cocos2d-x已经封装了这个功能了,来,迫不及待地要看看了:

[cpp]@H_944_12@ view plain copy print ?
  1. CCScale9Sprite*nineGirl=CCScale9Sprite::create("button.png");
  2. nineGirl->setContentSize(CCSize(200,100));
  3. nineGirl->setPosition(ccp(300,200));
  4. this->addChild(nineGirl);


新建一个场景,然后添加这段代码,就能看到效果了:

稍微啰嗦一下,CCScale9Sprite顾名思义,它是一张可拉伸的精灵(旁白:噗?精灵的单位是”张”?你确定?好像是”个”吧)。唔?好像听到有人喷我,不管了~

然后,button.png是一张很小很小的图片:

只要给它设置一下大小:setContentSize(CCSize(200,100));它就会自动拉伸,很神奇,很好用~

2.九妹和按钮搭配@H_944_12@

话说,九妹这么强大,不可能就这么放着浪费了~来看看,我们的按钮是怎么和九妹合作的:

?
    @H_527_197@/*正常状态下的按钮图片*/
  1. CCScale9Sprite*btnNormal=CCScale9Sprite::create("button.png");
  2. /*点击状态下的按钮图片*/
  3. CCScale9Sprite*btnDown=CCScale9Sprite::create("buttonHighlighted.png");
  4. /*按钮标题*/
  5. CCLabelTTF*title=CCLabelTTF::create("TouchMe!3324234","MarkerFelt",30);
  6. /*按钮的大小会根据标题自动调整*/
  7. CCControlButton*controlBtn=CCControlButton::create(title,btnNormal);
  8. /*设置按钮按下时的图片*/
  9. controlBtn->setBACkgroundSpriteForState(btnDown,CCControlStateSELEcted);
  10. controlBtn->setPosition(ccp(200,85); line-height:18px"> this->addChild(controlBtn);


其实代码很简单,两张图片,分别是按钮正常状态和点击状态图片,当然,她们都是九妹图片~

然后是一个标题标签,当然了,如果按钮没有标题,呢谁知道是什么作用呢~

最后要界面一个新的家伙:CCControlButton

我是这么理解的,CCControlButton它只是一个空壳,它具备很多按钮所需要的功能(点击事件什么的),然后九妹图片和标题标签是内容,把内容添加到这个空壳里,一个按钮就诞生了:

但是有一点要注意,按钮的大小是根据标签内容进行缩放的,那,如果我想让按钮的大小固定呢?毕竟不是所有人都喜欢变化~

很简单,就一句话:

?
    /*强制设置按钮大小,如果按钮标题大小超过这个范围,则会自动扩大*/
  1. controlBtn->setPreferredSize(CCSize(300,50));


搞定~

3.按钮事件@H_944_12@

按钮怎么可能少了点击事件呢?~这个很简单,直接看代码,注释已经很详细了。

?
    /*当鼠标处于按下并曾经点中按钮时,则触发一次*/
  1. controlBtn->addTargetWithActionForControlEvents(this,cccontrol_SELEctor(HelloWorld::touchDownAction),CCControlEventTouchDown);
  2. /*当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发一次*/
  3. controlBtn->addTargetWithActionForControlEvents(this,cccontrol_SELEctor(HelloWorld::touchDragEnter),CCControlEventTouchDragEnter);
  4. /*当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发一次*/
  5. :rgb(153,cccontrol_SELEctor(HelloWorld::touchDragExit),CCControlEventTouchDragExit);
  6. /*当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发,只要达到条件,就不断触发*/
  7. :rgb(153,cccontrol_SELEctor(HelloWorld::touchDragInsidE),CCControlEventTouchDragInsidE);
  8. /*当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发,只要达到条件,就不断触发*/
  9. :rgb(153,cccontrol_SELEctor(HelloWorld::touchDragOutsidE),CCControlEventTouchDragOutsidE);
  10. /*当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围内,则触发一次*/
  11. :rgb(153,cccontrol_SELEctor(HelloWorld::touchUpInsidE),CCControlEventTouchUpInsidE);
  12. /*当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围外,则触发一次*/
  13. :rgb(153,cccontrol_SELEctor(HelloWorld::touchUpOutsidE),CCControlEventTouchUpOutsidE);
  14. /*暂时没有发现能用鼠标触发这个事件的操作,看了注释,应该是由其它事件中断按钮事件而触发的*/
  15. :rgb(153,cccontrol_SELEctor(HelloWorld::touchCancel),CCControlEventTouchCancel);


回调函数是这样的

?
    voidtouchDownAction(CCObject*pSender,CCControlEventevent);
  1. voidtouchDragEnter(CCObject*pSender,CCControlEventevent);
  2. voidtouchDragExit(CCObject*pSender,85); line-height:18px"> voidtouchDragInside(CCObject*pSender,226); color:inherit; line-height:18px"> voidtouchDragOutside(CCObject*pSender,85); line-height:18px"> voidtouchUpInside(CCObject*pSender,226); color:inherit; line-height:18px"> voidtouchUpOutside(CCObject*pSender,85); line-height:18px"> voidtouchCancel(CCObject*pSender,CCControlEventevent);


唯一要注意的是,CCControlEvent不是指针,千万不要习惯了就给它加一个*~

好了,感谢大家听我唠叨~

(旁边:噗,你真以为你这么烂的文字会有人看?)

大佬总结

以上是大佬教程为你收集整理的【木头Cocos2d-x 016】控件篇(第01章) 我最爱的九妹和按钮事件全部内容,希望文章能够帮你解决【木头Cocos2d-x 016】控件篇(第01章) 我最爱的九妹和按钮事件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。