本文共 1301 字,大约阅读时间需要 4 分钟。
原文地址:
自定的简单按钮,直接贴代码:
- MenuItem* MenuItemNode::create( const char* normal,Ref* target,SEL_MenuHandler select )
- {
- auto _normal = Sprite::create(normal);
- return MenuItemNode::create(_normal,target,select);
- }
-
- MenuItem* MenuItemNode::create( Sprite* normal, Ref* target, SEL_MenuHandler selector )
- {
- Rect _rect = Rect(normal->getPositionX(),normal->getPositionY(),normal->getContentSize().width,normal->getContentSize().height);
- auto select = Sprite::createWithTexture(normal->getTexture(),_rect,false);
- select->setColor(ccGRAY);
- select->setScale(1.1f);
- auto _menuItem = MenuItemSprite::create(normal,select,target,selector);
- return _menuItem;
- }
但是很可惜,这种放大是基于锚点(0,0)的,是向右上方放大,非常别钮,需要让其居中放大,需要修改cocos2dx源码:
找到CCMenuItem.cpp 修改方法:void MenuItemSprite::setSelectedImage(Node* image)
代码:
- void MenuItemSprite::setSelectedImage(Node* image)
- {
- if (image != _normalImage)
- {
- if (image)
- {
- addChild(image, 0, kSelectedTag);
-
-
- image->setAnchorPoint(Point((image->getScaleX() -1)/2 , (image->getScaleY()-1)/2));
- }
-
- if (_selectedImage)
- {
- removeChild(_selectedImage, true);
- }
-
- _selectedImage = image;
- this->updateImagesVisibility();
- }
- }
用上面自定义的Node创建一个按钮,点击试下,居中放大,而且变色,灰常的不错,而且还节省资源。
PS:图片的变色可以自已根据需要去调,修改这个方法的参数:
- select->setColor(ccGRAY);
-
转载地址:http://mvsmi.baihongyu.com/