第4章
4.1.在场景中播放声音
#include "SimpleAudioEngine.h"//添加头文件
bool HelloWorld::init()
{
if (!Layer::init())
{
return false;
}
CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("MyMusic.mp3", true);//播放音乐
CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("MyEffect.wav");//播放音效
return true;
}
4.2.可以拉伸的精灵Scale9Sprite
#include "cocos-ext.h"
using namespace cocos2d::extension;
bool HelloWorld::init()
{
//
// 1. super init first
if (!Layer::init())
{
return false;
}
Scale9Sprite *scalesp = Scale9Sprite::create("MyPicture.png");
scalesp->setContentSize(Size(200, 200));
scalesp->setPosition(Point(0, 0, ));
return true;
}
另外,由于Scale9Sprite不在cocos2d包里,它属于扩展库,所以要进行下面三个操作才能使用:
(1)在工程的解决方案上右击,【添加】【现有项目】,打开libExtensions.vexproj文件,目录为cocos2d\extensions\proj.win32。
(2)在项目上右击,【属性】【通用属性】【添加新引用】,把libExtensions选中点确定。
(3)在项目上右击,【属性】【配置】【C/C++】【常规】【附加包含目录】,进行编辑,在最后加上:$(EngineRoot)。
4.3.利用Scale9Sprite创建ControlButton
bool HelloWorld()
{
Scale9Sprite *spNor = Scale9Sprite::create("button.png");
Scale9Sprite *spSel = Scale9Sprite::create("buttonHighlighted.png");
Label *label = Label::create("Touch me!", "Marker Felt", 30);
ControlButton *ctrlBtn = ControlButton::create(label, spNor);
ctrlBtn->setBackgroundSpriteForState(spSel, Control::State::HIGH_LIGHTED);
ctrlBtn->setPosition(Point(50, 200));
this->addChild(ctrlBtn);
return true;
}
注意:ControlButton的大小是有Label决定的。官方已经不再维护ControlButton。
4.4.利用cocostudio ui编辑器创建人型血量条
(1)使用cocostudio ui编辑器编辑导出文件
利用一个图片创建一个精灵,再在精灵上创建一个进度条,精灵和进度条是父子关系,进度条使用和精灵相同的图片,精灵混合设置为红,将精灵和进度条叠加,然后导出文件,将三个文件(.ExportJson、.plist、.png)放到项目的resources文件夹中。
(2)导入cocostudio、UI库,过程与前面导入extensions库相似,路径分别为:
cocos2d\cocos\editor-support\cocostudio\proj.win32\libCocosStudio.vcxproj
cocos2d\cocos\ui\proj.win32\libGUI.vcxproj
在【附加包含目录】中添加:$(EngineRoot)cocos\editor-support
$(EngineRoot)cocos
(3)添加代码
在头文件中:
#include "editor-support/cocostudio/CCSGUIReader.h"
#include "ui/CocosGUI.h"
using namespace cocos2d::ui;
using namespace cocostudio;
class HelloWorld : public cocos2d::Layer
{
public:
...
void onTouch(Ref *,TouchEventType type);
LoadingBar *m_hpBar;
...
};
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
auto UI = cocostudio::GUIReader::getInstance()->widgetFromJsonFile("Test_1.ExportJson");//利用cocostudio导出的三个文件之一
UI->setPosition(Point(100, 100));
this->addChild(UI);
m_hpBar =(LoadingBar*)Helper::seekWidgetByName(UI,"hpBar");//"hpBar"是进度条的名字,利用cocostudio修改的
m_hpBar->setTouchEnabled(true);
m_hpBar->addTouchEventListener(this, toucheventselector(HelloWorld::onTouch));
return true;
}
void HelloWorld::onTouch(Ref * ref, TouchEventType type)
{
switch (type)
{
case TouchEventType::TOUCH_EVENT_BEGAN:
m_hpBar->setPercent(m_hpBar->getPercent() - 1);
break;
}
}
效果:
点击一下红色部分就会变多