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





0 0
原创粉丝点击