cocos2d-x 3.0深入了解之三
来源:互联网 发布:现货波段指标公式源码 编辑:程序博客网 时间:2024/05/01 12:00
本节是根据官网的学习累积得到的经验。
如何使用cocos2d-x3.0来给Sprite添加遮罩
网址:http://www.cocos2d-x.org/docs/tutorial/how-to-mask-a-sprite-with-cocos2dx/zh
1、更改窗口的尺寸,这里设置setDesignResolutionSize,方便在不同的设备上显示。遇到其他分辨率的设备,自动调整。
在AppDelegate.cpp文件:
glview->setDesignResolutionSize(480,320,ResolutionPolicy::NO_BORDER);
2、获得a~b之间的随机数,传入的参数是a和b
int getRandomNumber(int start,int end)
{
return CCRANDOM_0_1()*(end-start)+start;
}
float CGame::getRandomNumber(float start,float end)
{
float deta;
deta=end-start;
float a=rand()/deta+start;
log("%f",a);
return a;
}
3、重写CREATE_FUNC()函数
HelloWorld *create()
{
HelloWorld *pRet=new HelloWorld();
if(pRet && pRet->init())
{
pRet->autorelease();
return pRet;
}
else
{
CC_SAFE_DELETE(pRet);
return nullptr;
}
}
4、触摸回调函数的声明一般放在onEnter()
void HelloWorld::onEnter()
{
Layer::onEnter();
auto listener=EventListenerTouchOneByOne::create();
listener->setSwallowTouches(true);
listener->onTouchBegan=CC_CALLBACK_2(HelloWorld::onTouchBegan,this);
listener->onTouchMoved=CC_CALLBACK_2(HelloWorld::onTouchMoved,this);
listener->onTouchEnded=CC_CALLBACK_2(HelloWorld::onTouchEnded,this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener,this);
}
5、RenderTexture实现的四个步骤
//1、创建RenderTexture类,以像素为单位,指定你想要绘制的纹理的宽度和高度
RenderTexture *rt=RenderTexture::create(maskSprite->getContentSize().width,maskSprite->getContentSize().height);
//2、调用RenderTexture的begin方法来初始化渲染操作
rt->begin();
//BlendFunc(混合纹理)的简单学习;
//{src color,destination color} 把将要画上去的颜色为“源颜色”,把原来的颜色称为“目标颜色”(屏幕);
BlendFunc blenfuc1={GL_ONE,GL_ZERO}; //“目标颜色”为屏幕:黑色,“源颜色”为maskSprite(即白色的图片,但是四角Alpha值减小),
//{GL_ONE,GL_ZERO}可知目标颜色*GL_ZERO,源颜色*GL_ONE,得到的为源颜色
maskSprite->setBlendFunc(blenfuc1);
BlendFunc blenfuc2={GL_DST_ALPHA, GL_ZERO};//“目标颜色”为屏幕:上面计算后的颜色,“源颜色”为textureSprite,
//{GL_DST_ALPHA,GL_ZERO}可知目标颜色*GL_ZERO,源颜色*GL_DST_ALPHA(屏幕的Alpha值)
textureSprite->setBlendFunc(blenfuc2);
//3、调用OpenGl函数来绘制实际的内容,这些OpenGl调用的最终都会绘制到屏幕之外去,而不会影响游戏中现在渲染的图像。
//如果想要渲染一个节点的话,可以直接调用某个节点的visit方法,如sprite—>visit(),然后这个函数会自动发射一些OpenGl函数指针给图形硬件去显示
maskSprite->visit();
textureSprite->visit();
//4、调用RenderTexture的end方法来借宿绘制操作,一旦你完成之后,rendertexture有一个sprite属性,你可以把它当Sprite来用
rt->end();
Sprite *retval=Sprite::createWithTexture(rt->getSprite()->getTexture());
retval->setFlippedX(true); //同时翻转y,因为纹理创建出来是倒的
这里附上源码:http://download.csdn.net/detail/h980740316/7178945
- cocos2d-x 3.0深入了解之三
- cocos2d-x 3.0深入了解之二
- cocos2d-x 3.0深入了解之五
- cocos2d-x 3.0深入了解之一
- cocos2d-x 3.0深入了解 --- 四
- 学习cocos2d-x 之路 (1)--了解cocos2d-x
- cocos2d-x 渲染机制深入解析(三)
- 深入了解Cocos2d-x中几个代表性的类
- Cocos2d-x中图字原理之深入分析
- Cocos2d-x之CCImage深入分析
- Cocos2d-x中图字原理之深入分析
- Cocos2d-x之CCImage深入分析
- Cocos2d-x之CCImage深入分析
- Cocos2d-x之CCImage深入分析
- Cocos2d-x之CCImage深入分析
- Cocos2d-x之CCImage深入分析
- Cocos2d-x之CCImage深入分析
- Cocos2d-x之CCImage深入分析
- C++中引用(&)的用法和应用实例
- ubuntu升级内核 virtualbox 出现Kernel driver not installed (rc=-1908)
- JQuery Mobile 开发学习手记(二):JS绑定的按钮动作不正确的问题
- 关于自增列的操作
- sss
- cocos2d-x 3.0深入了解之三
- J2EE Servlet 学习笔记
- 如何把输入的阿拉伯数字金额转换成中文大写金额
- ActivityStackSupervisor.StartActivityUncheckedLocked()函数分析
- 部署发布
- XML 名称不能以"1"来头
- nginx使用遇到500和400
- 定制天气预报
- c++ 模板类有感