最近在一家公司实习,自己就自学了cocos2dx,花了两个星期把cocos2dx-c++学了一遍,做了4个游戏。之后开始学习quick-cocos和cocos-lua,单当我在学的时候发现,自己其实存在很多问题,主要体现在不熟练。加之quick和cocos-lua的两套API,把我的兴趣越高越差。所以我决定在深入学习cocos2dx-c++并且把它的搞透彻了,熟练了,再转cocos-lua,其实cocos-lua的API和cocos-c++的很像。
后来我去问了公司一个做cocos2dx的同事,他的意思是把基础常用的熟练了,到时候做游戏遇到比较复杂的模块再去研究。所以我决定先把一些常用的基础的,在用一遍,并且熟悉API。当然也作为一个笔记,在我日后用到的时候方便查找。
其实Button和CheckButton 用cocos2dx的菜单类很好实现,当我现在讲的是cocos2dx的UI类中的
-------------------------------------------------------------------基础UI的Button
void HelloWorld::addButton()
{
//auto button = cocos2d::ui::Button::create("button/Button01.png", "button/Button01Pressed.png", "button/Button01Disabled.png"); //使用图片创建Button
auto button = cocos2d::ui::Button::create(); //创建一个Button,纹理贴图后面添加
//button->loadTextures("button/Button01.png", "button/Button01Pressed.png", "button/Button01Disabled.png");
button->loadTextureNormal("button/Button01.png");
button->loadTexturePressed("button/Button01Pressed.png");
button->loadTextureDisabled("button/Button01Disabled.png");
button->setPressedActionEnabled(false); //设置启用按钮被按下时的缩放操作
button->setScale9Enabled(true); //打开scale9 可以拉伸图片
button->setTitleText("BUTTON"); //设置按钮标题,还有其他函数可以设置颜色,字体大小
button->setOpacity(100); //继承自node,设置node透明度,0完全透明
button->addTouchEventListener(CC_CALLBACK_2(HelloWorld::touchEvent,this)); //设置按钮的触摸事件和作用目标(继承自Widget)
button->setContentSize(Size(100, 40)); //设置按钮大小,必须setScale9Enabled(true),不然没有用
button->setPosition(Vec2(400, 100));
this->addChild(button,1);
}
//按钮的触摸事件回掉函数
void HelloWorld::touchEvent(Ref *pSender, cocos2d::ui::Widget::TouchEventType type)
{
switch (type)
{
case cocos2d::ui::Widget::TouchEventType::BEGAN:log("BEGAN"); //按钮按下的
break;
case cocos2d::ui::Widget::TouchEventType::MOVED:log("MOVED"); //按钮按下并移动
break;
case cocos2d::ui::Widget::TouchEventType::ENDED:log("ENDED"); //按钮结束按下的
break;
case cocos2d::ui::Widget::TouchEventType::CANCELED:log("CANCELED"); //按钮按下取消
break;
default:
break;
}
}
-------------------------------------------------------------------基础UI的
CheckButton
void HelloWorld::addCheckBox()
{
auto checkbox = CheckBox::create("button/CheckBoxButton2Off.png", "button/CheckBoxButton2On.png", TextureResType::LOCAL); //使用选中和取消图片创建复选框
checkbox->setPosition(Vec2(200, 100));
checkbox->addEventListener(CC_CALLBACK_2(HelloWorld::CheckButtontouchEvent,this)); //注册一个回调函数,它将在复选框被选中或者取消选中时被调用。
this->addChild(checkbox, 1);
}
void HelloWorld::CheckButtontouchEvent(Ref* pSender, CheckBox::EventType type)
{
switch (type)
{
case CheckBox::EventType::SELECTED: log("checkbutton selected");
break;
case CheckBox::EventType::UNSELECTED:log("checkbutton unselected");
break;
default:
break;
}
}
下一节我介绍一下使用菜单类实现这两个控件