//// copyright (c) 2015-2016 x-studio365 - All Rights Reserved.//#define DARK_BYTE 0x99#define liGHT_BYTE 0xddvoID filllinePixelsRGB888(const SIZE& size,const SIZE& cellSize,unsigned char*& ptr,int flag){ auto startp = ptr; for (int i = 0; i < size.cx;) { switch (flag) { case 1: for (auto j = 0; j < cellSize.cx; ++j) { *ptr++ = DARK_BYTE; *ptr++ = DARK_BYTE; *ptr++ = DARK_BYTE; ++i; } flag = 2; break; case 2: for (auto j = 0; j < cellSize.cx; ++j) { *ptr++ = liGHT_BYTE; *ptr++ = liGHT_BYTE; *ptr++ = liGHT_BYTE; ++i; } flag = 1; break; } } auto sizeb = ptr - startp; // copy remain bytes for (int loopi = 1; loopi < cellSize.cy; ++loopi) { ::memcpy(ptr,startp,sizeb); ptr += sizeb; }}voID filllinePixelsRGBA8888(const SIZE& size,int flag){ auto startp = ptr; for (int i = 0; i < size.cx;) { switch (flag) { case 1: for (auto j = 0; j < cellSize.cx; ++j) { *ptr++ = DARK_BYTE; *ptr++ = DARK_BYTE; *ptr++ = DARK_BYTE; *ptr++ = DARK_BYTE; ++i; } flag = 2; break; case 2: for (auto j = 0; j < cellSize.cx; ++j) { *ptr++ = liGHT_BYTE; *ptr++ = liGHT_BYTE; *ptr++ = liGHT_BYTE; *ptr++ = 0xff; ++i; } flag = 1; break; } } //} auto sizeb = ptr - startp; // copy remain bytes for (int loopi = 1; loopi < cellSize.cy; ++loopi) { ::memcpy(ptr,sizeb); ptr += sizeb; }}Sprite* createtransparentBackgrondRGB888(const SIZE& canvasSize,const SIZE& cellSize/*,const color3B& color1,const color3B& color2*/){ if (canvasSize.cx < cellSize.cx || canvasSize.cy < cellSize.cy) return nullptr; SIZE size; int rx = canvasSize.cx % cellSize.cx; int ry = canvasSize.cy % cellSize.cy; size.cx = rx == 0 ? canvasSize.cx : canvasSize.cx + (cellSize.cy - rx); size.cy = ry == 0 ? canvasSize.cy : canvasSize.cy + (cellSize.cy - ry); Sprite* sp = nullptr; auto bytesPixels = size.cx * size.cy * 3; unsigned char* pixels((unsigned char*)malloc(bytesPixels)); memset(pixels,0x0,bytesPixels); // Fill Pixels unsigned char* ptr = pixels; // Todo: calculate somethings filllinePixelsRGB888(size,cellSize,ptr,1); filllinePixelsRGB888(size,2); // copy remain bytes int lines = size.cy / cellSize.cy; auto sizeb = ptr - pixels; for (int loopi = 1; loopi < lines / 2; ++loopi) { memcpy(ptr,pixels,sizeb); ptr += sizeb; } if (lines % 2 != 0) { memcpy(ptr,(sizeb >> 1)); ptr += (sizeb >> 1); } assert((ptr - pixels) == bytesPixels); // create texture2d by pixels Texture2D* texture = new Texture2D(); if (texture->initWithData(pixels,bytesPixels,Texture2D::PixelFormat::RGB888,size.cx,size.cy,Size(size.cx,size.cy))) { sp = Sprite::createWithTexture(texture); } texture->release(); free(pixels); return sp;}Sprite* createtransparentBackgrondRGBA8888(const SIZE& canvasSize,const color3B& color2*/){ if (canvasSize.cx < cellSize.cx || canvasSize.cy < cellSize.cy) return nullptr; SIZE size; int rx = canvasSize.cx % cellSize.cx; int ry = canvasSize.cy % cellSize.cy; size.cx = rx == 0 ? canvasSize.cx : canvasSize.cx + (cellSize.cy - rx); size.cy = ry == 0 ? canvasSize.cy : canvasSize.cy + (cellSize.cy - ry); Sprite* sp = nullptr; auto bytesPixels = size.cx * size.cy * sizeof(unsigned int); unsigned char* pixels((unsigned char*)malloc(bytesPixels)); memset(pixels,bytesPixels); // Fill Pixels auto ptr = pixels; filllinePixelsRGBA8888(size,1); filllinePixelsRGBA8888(size,Texture2D::PixelFormat::RGBA8888,size.cy))) { sp = Sprite::createWithTexture(texture); } texture->release(); free(pixels); return sp;}总结
以上是内存溢出为你收集整理的cocos2d-x 纯代码创建透明格子精灵全部内容,希望文章能够帮你解决cocos2d-x 纯代码创建透明格子精灵所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)