在游戏中经常会点击某一个图形就会产生特定的效果,
原理就是,在点击的头片上创建了一个可以调用部分功能的函数的按钮,或者说在按钮层上添加一个图片,这样点击在图片上就相当于点击按钮;
代码功能如下:
1,创建一个图层
auto Image=Sprite::createWithSpriteFrameName("towerPos.png");
//通过plist文件创建图层“ sprite::createWithSpriteFrameName”
int height=Image->getContentSize().height;
int weight=Image->getContentSize().width;
//获取创建图片的自身大小
auto bt01=Sprite::createWithSpriteFrameName("ArrowTower1.png");
auto bt01_select=Sprite::createWithSpriteFrameName("ArrowTower1.png");
auto bt02=Sprite::createWithSpriteFrameName("AttackTower1.png");
auto bt02_select=Sprite::createWithSpriteFrameName("AttackTower1.png");
auto bt03=Sprite::createWithSpriteFrameName("MultiDirTower1.png");
auto bt03_select=Sprite::createWithSpriteFrameName("MultiDirTower1.png");
bt01_select->setScale(1.2 );
bt02_select->setScale(1.2 );
bt03_select->setScale(1.2 );
//将图片放大1.2倍(setscale)
2.在将图层添加到一个调用功能函数的node;
auto enuitem01=MenuItemSprite::create(bt01, bt01_select,CC_CALLBACK_1(Game::TDselect, this));
enuitem01->setTag(10);
auto enuitem02=MenuItemSprite::create(bt02, bt02_select,CC_CALLBACK_1(Game::TDselect, this));
enuitem02->setTag(11);
auto enuitem03=MenuItemSprite::create(bt03, bt03_select,CC_CALLBACK_1(Game::TDselect, this));
enuitem03->setTag(12);
//创建节点,包括两种状态下的图片静态(bt01)按下(bt01_select)通过CC_CALLBACK_1,调用函数“game::TDselect”
在.h文件定义调用函数TDselect,在cpp文件实现
void Game::TDselect(Ref *obj)
{
auto item=(MenuItemSprite *)obj;
//将对象强制转换成节点类型(MenuItemSprite *)
函数
}
}
3,将节点添加到按钮;
auto menu=Menu::create(enuitem01,enuitem02,enuitem03,nullptr);
//将定义的三个节点添加到按钮层
menu->setPosition(Vec2::ZERO);
Image->addChild(menu);
//添加按钮到imgae
this->addChild(Image);
//将按钮层添加到当前层,并且2秒后自动消除这个图层
Image->runAction(Sequence::create(DelayTime::create(2.0f),
CallFunc::create(CC_CALLBACK_0(Sprite::removeFromParent, Image)),
NULL));