cocos2dx--纹理平铺
使用cocos2d-x的时候,有时候我们需要一场重复纹理的大图,比如某个有很多花纹的背景,花纹都是完全一样的,这个时候用一张很大的图片就比较浪费了,正确的做法应该是只做一个花纹的图片,然后利用cocos2d-x的平铺技术,生成一个有很多花纹的大背景,这样就比较节省资源。
代码如下: //auto texture = Director::getInstance()->getTextureCache()->addImage("test.png"); //auto sprite = Sprite::createWithTexture(texture); auto sprite = Sprite::create("test.png"); Texture2D::TexParams texParams = { GL_LINEAR,GL_LINEAR,GL_REPEAT,GL_REPEAT }; sprite->getTexture()->setTexParameters(texParams); sprite->setTextureRect(Rect(0,1024,1024)); sprite->setPosition(Vec2( 0,0)); addChild(sprite); 效果如下:
上面最重要的函数就是setTexParameters();他就是根据TexParams来控制纹理图像的纹理如何对应到屏幕的像素。根据什么来实现纹理的缩放和纹理的重复(重复纹理)等效果。
我们来看看TxtParams这个结构体 /** Extension to set the Min / Mag filter */ typedef struct _TexParams { GLuint minFilter;//纹理过滤器:缩小过滤器 GLuint magFilter;//纹理过滤器:放大过滤器 GLuint wrapS;//横向纹理寻址模式 GLuint wrapT;//纵向纹理寻址模式 }TexParams; 两个基本的纹理过滤规则: (1)GL_LINEAR:“当显示纹理时,显示的大小大于或者小于原纹理的尺寸时,使用邻近像素点来插值补点”
但是据说这里的小图块一定要用单独一张小图,而且宽高为2的幂,如果用texturePacker之类的工具打包了,再用spriteFrame创建出sprite的话上面代码会有问题。 没有证实过。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |