cocos2d-x 纯代码创建透明格子精灵

cocos2d-x 纯代码创建透明格子精灵,第1张

概述效果图: 代码 //// 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 c 效果图: 代码
//// 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 纯代码创建透明格子精灵所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1080849.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存